如何设置编辑器命令以*仅*用于 zsh 中的编辑命令行?

如何设置编辑器命令以*仅*用于 zsh 中的编辑命令行?

当我点击Ctrl+ x, Ctrl+ ein时,我可以通过或zsh编辑当前命令行。但是,我想使用, 并在那里获得 shell 语法的语法突出显示,我必须传递,因为在编辑命令行时不会自动识别 shell 语法(创建时无需传递扩展名)。$EDITOR$VISUALnano-Y shnanozsh/tmp/random-name.shnano

我可以执行

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

然后按Ctrl+ x, Ctrl+e即可获得所需的结果。但是,其他程序也使用$EDITOR/ $VISUAL。如果我如上所述设置$EDITOR/ $VISUAL,然后执行 (例如) git commit,则提交消息将突出显示为 shell 语法,这是我想避免的。

我也尝试过

EDITOR='nano -Y sh' fc

哪个做过工作,但是每次输入似乎有点冗长(不过我可能会把它放在一个函数中)。此外,还fc使用以下命令预填充命令行最后的历史命令行,要使用它,我必须输入命令。这意味着我无法输入一些长命令zsh,然后决定nano像使用键盘快捷键一样对其进行编辑。

那么,我有没有办法告诉zsh编辑器/标志使用仅有的Ctrl按+时编辑命令行x,其他程序会忽略Ctrl+吗?e我想要一些可以设置~/.zshrc然后忘记的环境变量。

答案1

解决每个计算机问题的通用方法是添加一个间接级别。

不调用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

1夸张。

答案2

zle脚本使用EDITORVISUAL。一种方法是将该脚本从其隐藏位置复制$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文件并指定不同的环境变量。

相关内容