当我点击Ctrl+ x, Ctrl+ ein时,我可以通过或zsh
编辑当前命令行。但是,我想使用, 并在那里获得 shell 语法的语法突出显示,我必须传递,因为在编辑命令行时不会自动识别 shell 语法(创建时无需传递扩展名)。$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
,则提交消息将突出显示为 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
脚本使用EDITOR
或VISUAL
。一种方法是将该脚本从其隐藏位置复制$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
文件并指定不同的环境变量。