导出带有标志的编辑器

导出带有标志的编辑器

我正在使用 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

这是可行的,但是当gcloudCLI 调用时$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),并且如果需要,该脚本可以为编辑器实际添加任何标志。因此,包装纸很薄。

相关内容