Итак, я наконец-то внес большое изменение. В моем .zshenv я изменил мой редактор:
export EDITOR=vim
У меня есть пара вопросов, которые настолько незначительны, что я не хотел задавать для них отдельные вопросы. Вот они:
Как заставить zsh различать режим вставки и командный режим, как в vim? Предпочтительно, это изменит курсор с подчеркивания на блок, как в vim, но отображение текста внизу также будет работать.
Как мне заставить его вести себя как vim? Например, я бы предпочел, чтобы он был в командном режиме по умолчанию и не выходил из него после одной команды.
~
персонажа вставляют, когда я нажимаюDelete
клавишуzsh
. Я задал вопрос об этом здесь: superuser.com/questions/997593/…Ответы:
1. ) (см. Http://zshwiki.org/home/examples/zlewidgets и http://pthree.org/2009/03/28/add-vim-editing-mode-to-your-zsh-prompt/ ) :
Где:
«RPS» обозначает «правую строку приглашения» и определяет приглашение, появляющееся в правой части терминала, а синтаксис $ {variable / pattern / replace} является синтаксисом «раскрытия параметра», см. Http: // mywiki .wooledge.org / BashSheet # Parameter_Operations .
«zle -N» вызывает привязку определяемых пользователем виджетов «zle-line-init» и «zle-keymap-select» (к функциям оболочки с одинаковыми именами), так что они будут вызываться при инициализации редактора строк и раскладка клавиш изменяется соответственно, см .: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC125 .
2. ) Я подозреваю, что для этого вам нужно написать еще один zsh-виджет, вдохновившись первой из двух ссылок на первую проблему.
источник
Решение akira имеет следующую проблему при использовании многострочных приглашений: при переходе из режима ins в режим cmd перерисовка подсказки приводит к удалению нескольких строк из предыдущего вывода (а новое приглашение отображается несколькими строками выше). Сколько строк зависит от того, сколько строк у вас в приглашении.
Способ справиться с этим - использовать
zle-line-finish
, не используяzle reset-prompt
там. Пример:И тогда вы можете добавить его в правую строку, например:
Это прямо из моего блога об этом:
источник
zle-line-init
виджетом безрезультатно. Изменил это, чтобы соответствовать тому, что предоставил Павел и бинго!RPROMPT2
следует установить так, чтобы статус отображался в продолжениях строк. Кроме того, при использовании этого вы можете сделатьsetopt transient_rprompt
так, чтобы режимы для ранее принятых линий не отображались.bindkey -e
), он все еще показывает[INS]
.эти две строки убедитесь, что он начинается в командном режиме
источник
Ниже приведены настройки с измененным курсором и подсказкой, показывающей, в каком режиме вы находитесь. Вы можете изменить
DEFAULT_VI_MODE
либо на,viins
либо наvicmd
. Просто вставьте ниже,.zshrc
чтобы начать:Примечание: я проверял это только в Terminal.app (2.7.3) на MacOS (10.12.6) с помощью zsh (5.3.1). Кроме того, если вы когда-либо добавите,
edit-command-line
режим будет установлен правильно.источник