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

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

#1 楼

您可以告诉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,并且想发疯,则可以从inotify-tools中使用inotifywatch监视您的vimrc文件是否有更改,并在每次更改时自动执行(未试过,示例改编自联机帮助页)

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


但是...如果您不小心保存了一个带有
语法错误的文件,则可能会使所有vim会话无效...

#2 楼

我不了解clientserver,但是由于您说过您对其他解决方案感兴趣,因此我建议您研究一下有关Github中的点文件的文章。

https://dotfiles.github.io

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

评论


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

–xthrd
2015年2月3日在21:14

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

–马丁·图尔诺伊(Martin Tournoij)
2015年2月6日15:30

在回答之前,最初的问题并不清楚,他是在谈论同一台计算机上的实例。当时我的回答确实解决了这个问题。

– tgrosinger
2015年2月6日15:34