如何使 Vim 在“--远程静默”中打开文件而不会在仅运行“vim”时出现错误



要在预先存在的 Vim 实例(在我的例子中为 MacVim)中打开文件,我接受了 Derek Wyatt 的建议并将其添加到我的bash_profile中:

alias mvim='mvim --remote-silent'

只要我向 mvim 传递一个参数(mvim myFilemvim . 等),这就可以工作,但是如果我自己运行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

相关内容

  • 没有找到相关文章

最新更新