我正在使用 Zsh 和一些 CLI,例如 Googlegcloud
通过$EDITOR
.
对于我来说,我将其设置为:
export EDITOR="/usr/local/bin/mvim"
使用该编辑器的别名,使用-v
在终端中加载 vim 的标志:
mac_vim="$EDITOR -v"
alias vi=$mac_vim
alias vim=$mac_vim
alias v=$mac_vim
这是可行的,但是当gcloud
CLI 调用时$EDITOR
它没有该-v
标志,因此它会在新终端中打开。我想我可以通过-v
在此处添加标志来改变这一点:
export EDITOR="/usr/local/bin/mvim -v"
但是,当我尝试在命令行上运行它时,我得到:
$EDITOR text.html
zsh: no such file or directory: /usr/local/bin/mvim -v
导出我的时是否可以包含一个标志$EDITOR
?
答案1
使用薄薄的外壳包装纸:
#!/bin/sh
exec /usr/local/bin/mvim -v "$@"
并将其隐藏在某处(某处PATH
或可能在~/libexec
或其他地方),然后将该包装器设置为值EDITOR
。
使用 ZSH,可以强制扩展:
% EDITOR='echo -E'
% $EDITOR /etc/passwd
zsh: command not found: echo -E
% $=EDITOR /etc/passwd
/etc/passwd
%
详细信息如下zshexpn(1)
:
${=spec}
Perform word splitting using the rules for SH_WORD_SPLIT during
请注意,ZSH 在以下问题上与其他 shell 相矛盾:不是SH_WORD_SPLIT
默认执行。顺便说一句,POSIX 默认设置是一个非常好的耙子,许多人错误地使用了它,因此被踩到并被重击:
% DERP="/var /nish"
% ls $DERP
ls: cannot access /var /nish: No such file or directory
% sudo bash
# DERP="/var /nish"
# rm -rf $DERP
...
然而,各种其他程序,可能是那些不知道如何执行 shell 分词的程序,可能会调用EDITOR
.最可移植的选项EDITOR
是可以通过调用直接执行的选项exec(3)
,并且如果需要,该脚本可以为编辑器实际添加任何标志。因此,包装纸很薄。