如何在 zsh 中将编辑器命令设置为 *only* 用于编辑命令行?

Tim*_*imo 4 zsh

当我点击Ctrl+ xCtrl+ ein 时zsh,我可以通过$EDITOR或编辑当前命令行$VISUAL。但是,我想使用nano, 并在那里获得 shell 语法的语法高亮显示,我必须通过-Y sh,因为nano在编辑命令行时不会自动识别 shell 语法(zsh创建时/tmp/random-name没有.sh扩展名传递给nano)。

我可以执行

EDITOR='nano -Y sh'
VISUAL="$EDITOR"
Run Code Online (Sandbox Code Playgroud)

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

我也试过

EDITOR='nano -Y sh' fc
Run Code Online (Sandbox Code Playgroud)

确实有效,但是每次输入似乎有点冗长(尽管我可能会将它放在一个函数中)。此外,fc使用最后一个历史命令行预填充命令行,要使用它,我必须输入命令。这意味着我无法输入一些长命令zsh,然后决定nano像使用键盘快捷键一样编辑它。

那么,有没有办法让我告诉zsh编辑器/标志在按+时用于编辑命令行,+其他程序忽略?我会喜欢一些我可以设置然后忘记的环境变量。CtrlxCtrle~/.zshrc

Gil*_*il' 6

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

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
Run Code Online (Sandbox Code Playgroud)

¹夸张。