Intereting Posts
g ++ -v говорит, что программа в данный момент не установлена, но я знаю, что она Таблицы с разделителями пробелов в CSV со стандартными инструментами обработки текста Как отправить AT-команды модему после установления соединения? Права доступа к файлу PHP для машины разработки Разрешения каталога «rs», chmod 655 не изменяется на «rx», почему? Широкая поддержка поиска с помощью «-exec … +»? Мониторинг портов при текущих соединениях gnome-settings-daemon не сохраняет настройки после перезагрузки; Монетный двор 14 XFCE Как я могу потянуть переменную env в отображение ключей VIM? использование egrep & regex Перезагрузите систему, если она исчерпана? Как добавить текст в начало строки? Можно ли заменить каталог символической ссылкой без разрешения на запись в родительском? как решить ошибку в cinder на openstack havana? Как отправить нажатия клавиш перед интерактивной оболочкой для автоматизации входа в последовательный порт Linux с помощью экрана GNU?

Режим vi не отображается корректно на новом терминале

Это продолжение моих предыдущих вопросов. В настоящее время у меня есть ~/.zsh.d/functions.sh

 function zle-line-init zle-keymap-select { psvar[1]="${${KEYMAP/vicmd/}/(main|viins)/-- INSERT --}" zle reset-prompt } precmd() { psvar[2]=() vcs_info [[ -n $vcs_info_msg_0_ ]] && psvar[2]="$vcs_info_msg_0_" } 

и соответствующие разделы из моего ~/.zshrc

 if [ -d ~/.zsh.d ]; then for i in ~/.zsh.d/*; do if [ -r $i ]; then source $i fi done unset i fi zle -N zle-line-init zle -N zle-keymap-select autoload -Uz colors && colors autoload -Uz vcs_info zstyle ':vcs_info:*' enable git zstyle ':vcs_info:*' formats '[%b]' zstyle ':vcs_info:*' branchformats '[%b|%r]' zstyle ':vcs_info:*' actionformats '[%b|%a]' # 063 is a blue # vimode implentation psvar[1]='-- INSERT --' local down=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1] local mode="%F{063}%1 %(1v.%1v.)%f" local up=$terminfo[rc] local vimode=$down$mode$up # current working directory as blue local cwd='%F{063}%1~%f' # display git branch if git repo local git='%(2v.%F{099}%2v%f.)' # if root then red # else blue % local prompt_char='%(!.%F{red}%#%f.%F{063}%#%f)' PS1=$'%{$vimode%} $cwd $git $prompt_char ' RPS1='%m' preexec () { print -rn -- $terminfo[el]; } 

Это работает правильно, за исключением того, что он не отображается -- INSERT -- при первом запуске оболочки, после чего он работает так, как ожидалось.

Другие предложения по улучшению приветствуются.

Обновление Я решил решить проблему, хотя я до сих пор не знаю, почему она работает. На данный момент я установил psvar[1] в -- INSERT -- из коробки, так как я знаю, что он будет вставляться при запуске. Однако это не похоже на правильное разрешение.

В моем хакере, кажется, я исправил его, установив

 psvar[1]='-- INSERT --' 

прежде чем делать что-либо еще с моим vimode … Я не уверен, что на 100% доволен своим решением, но он работает.