要在预先存在的 Vim 实例(在我的例子中为 MacVim)中打开文件,我接受了 Derek Wyatt 的建议并将其添加到我的bash_profile中:
alias mvim='mvim --remote-silent'
只要我向 mvim 传递一个参数(mvim myFile
、mvim .
等),这就可以工作,但是如果我自己运行mvim
,我会得到一个错误:Argument missing after: "--remote-silent"
所以我用以下函数替换了上面的别名:
function mvim() {
if [ $# > 0 ] ; then
command mvim --remote-silent "$@"
else
command mvim
fi
}
现在,如果我在没有参数的情况下运行mvim
,则会收到相同的错误,并且名为0
的文件将写入当前目录。如果我传递 mvim 参数,事情仍然很好。
我在这里错过了什么,处理这个问题的最佳方法是什么?
感谢Ingo Karkat的澄清。如果有人感兴趣,这是我现在如何处理这个问题:
function ivim {
if [ -n "$1" ] ; then
command mvim --remote-silent "$@"
elif [ -n "$( mvim --serverlist )" ] ; then
command mvim --remote-send ":call foreground()<CR>:enew<CR>:<BS>"
else
command mvim
fi
}
elif
分支末尾的:<BS>
只是清除命令行。感觉有点笨拙,但我不知道还能如何实现这一目标。
在 Bash 中,此测试表达式不正确:[ $# > 0 ]
; 您正在将标准输出 ( >
) 重定向到0
文件。相反,请使用旧式-gt
"大于"运算符
[ $# -gt 0 ]
或较新的[[
内置条件命令:
[[ $# > 0 ]]
将函数命名为mvim
而不是其他东西(因为你已经习惯于键入mvim
或任何其他原因),这里有一个简单的修复。
function mvim {
if [ -n "$1" ] ; then
command mvim --remote-silent "$@"
elif [ -n "$( command mvim --serverlist )" ] ; then
command mvim --remote-send ":call foreground()<CR>:enew<CR>:<BS>"
else
command mvim
fi
}
在elif
中调用mvim
之前,请注意添加的command
。