Как установить команду редактора для использования * только * для редактирования командной строки в zsh?

Когда я нажимаю Ctrl + x , Ctrl + e в zsh , я могу редактировать текущую командную строку в $EDITOR или $VISUAL . Тем не менее, я хотел бы использовать nano и получать синтаксис для синтаксиса оболочки там, мне нужно передать -Y sh , поскольку nano автоматически не распознает синтаксис оболочки при редактировании командной строки ( zsh создает /tmp/random-name без расширения .sh для перехода к nano ).

Я могу выполнить

 EDITOR='nano -Y sh' VISUAL="$EDITOR" 

а затем нажмите Ctrl + x , Ctrl + e, чтобы получить желаемый результат. Однако другие программы также используют $EDITOR / $VISUAL . Если я установил $EDITOR / $VISUAL как указано выше, а затем выполнил (например) git commit , сообщение commit выделяется как синтаксис оболочки, чего я хочу избежать.

Я также пробовал

 EDITOR='nano -Y sh' fc 

которые действительно работали, однако кажутся немного подробными, чтобы печатать каждый раз (я мог бы поместить его в функцию, хотя). Кроме того, fc предварительно заполняет командную строку с помощью последней командной строки истории , и для ее использования я должен ввести команду. Это означает, что я не мог набрать некоторую длинную команду в zsh а затем решил отредактировать ее в nano как я мог, с помощью сочетания клавиш.

Итак, есть ли способ сообщить zsh что редактор / флаги использовать только для редактирования командной строки при нажатии Ctrl + x , Ctrl + e, которые игнорируют другие программы? Мне бы понравилась переменная окружения, которую я могу установить в ~/.zshrc а затем забыть.

2 Solutions collect form web for “Как установить команду редактора для использования * только * для редактирования командной строки в zsh?”

Универсальный способ решения каждой компьютерной проблемы¹ – добавить уровень косвенности.

Вместо вызова edit-command-line вызовите функцию-оболочку.

 nano-command-line () { local VISUAL='nano -Y sh' edit-command-line } zle -N nano-command-line bindkey '^X^E' nano-command-line 

¹ Гипербола.

Сценарий zle использует EDITOR или VISUAL . Один из методов заключается в том, чтобы скопировать этот сценарий из $fpath где он скрывается в $fpath в $fpath настраиваемых функций, отредактировать сценарий для использования другого имени среды, а затем убедиться, что каталог настраиваемых функций вызывается до установленного с помощью zsh.

 # in .zshrc, set something like fpath=(~/.zsh/functions $fpath) # then in the shell, something like mkdir -p ~/.zsh/functions cp /usr/share/zsh/*/functions/edit-command-line ~/.zsh/functions 

Затем отредактируйте файл edit-command-line и укажите другую переменную среды.

  • Как я могу использовать bindkey для запуска скрипта?
  • Глобус с помощью скобок и переменных в zsh
  • Как это расширение параметра zsh работает?
  • zsh: проблемы с переименованием файлов с zmv
  • странное поведение setopt
  • изменение разделов слова zsh
  • Что вызывает это поведение при определении функции с именем ':'
  • "--noprofile" или "--norc" в zsh?
  • Синтаксис расширения Zsh
  • Что означает символ новой строки в PS1 zsh?
  • zparseopts с ассоциативным массивом в старой версии zsh
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.