Bash 如何使Vim在`--remote silent`中打开文件,而在仅运行` Vim`时不会出错?

Bash 如何使Vim在`--remote silent`中打开文件,而在仅运行` Vim`时不会出错?,bash,vim,.bash-profile,Bash,Vim,.bash Profile,为了在Vim的一个预先存在的实例(在我的例子中是MacVim)中打开文件,我将其添加到我的bash_配置文件中: alias mvim='mvim --remote-silent' 只要我向mvim传递一个参数(mvim myFile,mvim.,等等),这就可以工作,但如果我自己运行mvim,我会得到一个错误:参数在“--remote silent” 因此,我将上述别名替换为以下函数: function mvim() { if [ $# > 0 ] ; then comma

为了在Vim的一个预先存在的实例(在我的例子中是MacVim)中打开文件,我将其添加到我的bash_配置文件中:

alias mvim='mvim --remote-silent'
只要我向mvim传递一个参数(
mvim myFile
mvim.
,等等),这就可以工作,但如果我自己运行
mvim
,我会得到一个错误:
参数在“--remote silent”

因此,我将上述别名替换为以下函数:

function mvim() {
  if [ $# > 0 ] ; then
    command mvim --remote-silent "$@"
  else
    command mvim
  fi
}
现在,如果我在没有参数的情况下运行
mvim
,我会得到相同的错误一个名为
0
的文件会被写入当前目录。如果我传递mvim参数,事情仍然很好

我在这里遗漏了什么?最好的处理方法是什么

感谢Ingo Karkat的澄清。如果有人感兴趣,下面是我现在的处理方式:

函数ivim{
如果[-n“$1”];则
命令mvim--远程静默“$@”
elif[-n“$(mvim--serverlist)”;然后
命令mvim--远程发送“:调用前台():enew:”
其他的
命令mvim
fi
}
elif
分支末尾的
只是为了清除命令行。感觉有点粗糙,但我不知道如何实现这一点。

在Bash中,此测试表达式不正确:
[$#>0]
;您正在将stdout(
)重定向到
0
文件。相反,可以使用老式的
-gt
“大于”运算符

或更新的
[[
内置条件命令:

[[ $# > 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
}
函数mvim{
如果[-n“$1”];则
命令mvim--远程静默“$@”
elif[-n“$(命令mvim--serverlist)”;然后
命令mvim--远程发送“:调用前台():enew:”
其他的
命令mvim
fi
}
请注意,在调用
elif
中的
mvim
之前添加的
命令

[$\35;>0]
不是一个算术“大于”。您可能指的是
($\35;>0))
[[ $# > 0 ]]
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
}