Как редактировать командную строку в полноэкранном редакторе в ZSH?

52

В bash, используя режим vi, если я нажму Esc, vмоя текущая командная строка открывается в редакторе, указанном в, $EDITORи я могу редактировать ее в полноэкранном режиме, прежде чем «сохранить» команду, которая будет возвращена в оболочку и выполнена.

Как я могу добиться аналогичного поведения в Zsh? Удар vв командном режиме приводит к тому, что звонок не имеет видимого эффекта, несмотря на установленную EDITORпеременную среды.

Мурали Суриар
источник

Ответы:

36

Смотрите edit-command-lineв zshcontrib.

bindkey -M vicmd v edit-command-line
ephemient
источник
13
(Только для уточнения): Для того, чтобы позволил edit-command-line«виджет» вам потребуется что - то вроде autoload edit-command-line; zle -N edit-command-lineв одном из ваших ЗШ файлов инициализации (см раздел Функции ZLE в zshcontribдокументации ).
Крис Джонсен
Как вы активируете это, когда оно будет на месте? Привязка в ответе в стиле emacs имеет для меня смысл. Но я не могу найти ссылку на то, что bindkey -M vicmd vнастраивает.
Мат Шаффер
1
@MatSchaffer То же, что и Bash: если вы находитесь в режиме vi, нажмите, <ESC>чтобы перейти в командный режим из режима вставки и затем vв визуальный режим ( Meta-vто же самое), или просто vесли вы уже находитесь в командном режиме. Если вы используете режим Emacs, типичное связывание C-x C-e.
Эфимент
1
Повторное сопоставление клавиши v означает, что вы больше не можете использовать визуальный режим, поэтому я предпочитаю переназначение на пробел (который не делает ничего полезного в обычном режиме) сbindkey -M vicmd ' ' edit-command-line
gib
37

Если вы предпочитаете сочетания клавиш Emacs:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
Даниэль Серодио
источник
9
^x^eСвязывания , как представляется, по умолчанию с текущим .oh-мой-Zsh , что крайне приятно.
quodlibetor
^ x ^ e это именно то, что я искал.
jmreicha
1
Аналогичная настройка для Prezto, пока editorмодуль загружен.
AL X
23

Вы можете использовать fcдля редактирования последней команды в истории. Это не то же самое, что редактирование той же команды, но быстрое нажатие на клавишу Enter делает вашу текущую команду последней командой в истории.

Кристоф Вурм
источник
15

Это полная конфигурация, которую я добавил к своему, ~/.zshrcчтобы получить то же поведение от bash:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line
Мэтт Хьюз
источник
Согласно предыдущим комментариям, это настроено по умолчанию, если вы используете Oh my ZSH или Prezto . Последнее требует, чтобы editorмодуль был загружен и / viили vimвыбран для командного режима.
AL X
Я бы проголосовал за принятие этого ответа, он решил мой вопрос со всей описанной конфигурацией. Благодарю.
Лоран