如何从bash脚本重新启动vim?

如何从bash脚本重新启动vim?,bash,vim,Bash,Vim,我想从bash脚本中重新启动vim,以便vim接收带外更改。我几乎让它工作了,但我一直在努力确定用什么来启动vim 以下是我所拥有的: #!/usr/bin/env bash local servername=$(vim --serverlist) [ -n "$servername" ] && { vim --servername "$servername" --remote-send '<C-\><C-N>:mks! _session.vim<

我想从bash脚本中重新启动vim,以便vim接收带外更改。我几乎让它工作了,但我一直在努力确定用什么来启动vim

以下是我所拥有的:

#!/usr/bin/env bash
local servername=$(vim --serverlist)
[ -n "$servername" ] && {
  vim --servername "$servername" --remote-send '<C-\><C-N>:mks! _session.vim<CR>:wqa<CR>'
  vim -S _session.vim
  sleep 1
  rm _session.vim
}
#/usr/bin/env bash
本地服务器名=$(vim--serverlist)
[-n“$servername”]&&{
vim--servername“$servername”--远程发送:mks!\u会话。vim:wqa'
vim-S_session.vim
睡眠1
rm_session.vim
}
问题是脚本调用的
vim
是位于
/usr/bin/vim
的非常过时的系统vim,而不是作为
mvim-v
别名的“我的”vim(其中
mvim
是MacVim附带的启动脚本)

这有两个不幸的后果:(1)系统vim无法识别
--serverlist
;(2) 即使这样,我的脚本也会随后启动错误的vim

在我的路径上调用vim的最佳方式是什么

  • 默认的vim从来都不是用
    +clientserver
    构建的,因此您害怕失去的可移植性从一开始就不存在

  • bash脚本中不会扩展别名,因此如果不明确告诉脚本使用它,脚本将不会看到
    mvim-v
    。此外,您的
    vim
    是一个别名,因此它不在您的
    路径中

  • 您可以在脚本顶部附近的某个位置定义一个环境变量,并使用它代替
    vim

    #!/usr/bin/env bash
    
    VIM='/path/to/mvim'
    
    "$VIM" -v whatever
    
    或者将别名转换为正确的脚本

    或者,可以将
    mvim
    放在
    路径的前面,并显式调用
    mvim-v


  • 难道你就不能像你说的那样用
    mvim-v
    替换
    vim
    吗?在这台特定的机器上,这对我来说是可行的,但我更喜欢便携式解决方案。这些带外更改是什么?您正在编辑的文件的更改?如果是,请参见
    :h“自动读取”
    。您的vim文件或插件中的更改?使用
    :source
    或使用类似的方法重新加载插件。你在使用vim?时更新了vim?@PeterRincker他们正在添加/更新/删除插件。在尝试在进程中重新加载插件时,事后重启Vim比处理所有边缘情况更简单。1。哦2.很高兴知道。3.看起来是最好的选择。谢谢