是否可以使用vim的clientserver功能保持设置同步?


11

我通常在同一台计算机上运行多个vim实例。当我对vimrc进行更改时,我可以:source ~/.vimrc(使用简单的映射或autocmd)。但是为了使所有正在运行的实例反映出更改,我必须分别在每个实例中运行该更改。我可以使用该clientserver功能告诉所有实例重新加载我的vimrc吗?

我也会对不使用的解决方案感兴趣clientserver

Answers:


7

您可以告诉Vim服务器重新加载vimrc文件,如下所示:

$ vim --servername MARTIN --remote-send '<Esc>:source $MYVIMRC<CR>' 

您可以通过以下方式获得所有服务器的列表:

$ vim --serverlist
MARTIN
CARPETSMOKER

可以与for循环结合使用:

$ for s in $(vim --serverlist); do vim --servername "$s" --remote-send '<Esc>:source $MYVIMRC<CR>'; done

由于输入的内容很多,您可以将其放在shell脚本中~/bin/reload-vimrc;您当然也可以在Vim中调用它:

:!reload-vimrc

如果您正在运行Linux,并且想获得真正的疯狂,你可以使用inotifywatchinotify工具来监控更改你的vimrc文件(S),并在每一个变化自动执行这种(未经测试,例如改编自手册页)

$ inotifywatch -v -e modify -t 60 -r ~/.vimrc ~/.vim

我不建议这样做,但是...如果您不小心保存了一个带有语法错误的文件,则可能会使您所有的vim会话都陷入困境...


-1

我不了解clientserver,但是既然您说您对其他解决方案感兴趣,我建议您研究一下Github中关于dotfiles的文章。

https://dotfiles.github.io

您显然不必使用Github,但是这些概念是合理的,并且似乎已被广泛使用。


虽然我确实认为将您的dotfiles置于版本控制之下真是棒极了,但我还是特别询问了在同一台机器上运行的vim实例(我已经更新了问题)。
xthrd 2015年

1
-1; 这个答案实际上与所提问题没有任何关系。问题是关于重新加载vimrc,而不是管理vimrc
马丁·图尔诺伊

在回答之前,最初的问题并不清楚,他是在谈论同一台计算机上的实例。当时我的回答确实解决了这个问题。
tgrosinger 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.