问题描述
要在当前窗口的所有缓冲区中获取vimrc
,请执行:bufdo so~/.vimrc
,要在所有窗口中的活动缓冲区中获取vimrc
,请执行:windo so~/.vimrc
。如何在所有窗口的所有缓冲区中获取vimrc
?
如果出于某些原因 :bufdo so~/.vimrc | :windo so~/.vimrc
非活动窗口中的活动缓冲区发生更改。
示例:如果我在。set number
中设置了vimrc
,我希望所有窗口中的所有缓冲区都影响更改。
解决方案可能是这样的:
for window in windowlist
execute 'bufdo so~/.vimrc'
我使用 vim 8.2 。
请注意::我确实尝试了您建议的所有命令,但似乎还不够清楚。包含:tabdo
:windo
:bufdo
或它们的组合的所有命令均无法正常运行。请注意,这与更改vimrc以及使用诸如:tabdo bufdo so~/.vimrc
之类的命令链进行采购相同。例如,:windo bufdo set number
对活动窗口中的所有缓冲区(活动或隐藏)执行set number
,但在非活动窗口中仅对活动缓冲区(窗口中显示的缓冲区)执行set number
)或:tabdo windo set number
仅在每个窗口的活动缓冲区中执行set number
,这意味着隐藏的缓冲区不会获得行号。
我什至在reddit post上针对此问题制作了r/vim,并制作了有关该问题的视频,但我不知道为什么没人能说我的话。老实说,尽管这是一个简单的问题,但是我认为这个问题不会被其他人解决。
解决方法
:bufdo
命令将消耗|
作为要执行的命令的一部分,因此实际上,您正在为每个 缓冲区运行:windo
命令你很活跃!
请参见:help :bar
,其中记录了此行为。
该帮助部分还提到了一种解决此问题的方法,方法是使用:execute
命令从字符串中运行第一个命令,从而可以分隔第一个命令。像这样:
:execute 'bufdo so ~/.vimrc' | windo so ~/.vimrc
请注意,在所有缓冲区中获取“ emem” 或“在所有窗口中 采购vimrc文件没有多大意义... vimrc文件通常具有全局通常只需要获取一次的命令,通常,如果您修改了vimrc,仅再次获取一次就足够了……
使用单独的*.vim
脚本可以影响本地设置,并且可以作用于单个缓冲区,因此可能有意义。我想到了ftplugin,缩进和语法脚本。除此之外,它们通常是在每个缓冲区而不是每个窗口中运行的...并非完全无法想象您要在每个缓冲区和窗口中运行的脚本,但是肯定看起来很奇怪... >
.vimrc
仅应包含全局定义。那应该被使用的方式。在多个缓冲区中购买它毫无意义。
我想知道您是否正在与本地设置作斗争,对于它们,最好使用的最佳工具是ftplugin(当设置是文件类型驱动时),还是用于项目驱动设置的local_vimrc插件。
,要在所有缓冲区和所有窗口中应用:
:windo bufdo set number
如果您有标签,则来自:tabe
,:tabf
,:tab
和朋友。像这样添加tabdo
:
:tabdo windo bufdo set number
我建议您不要像这样采购您的vimrc
。如果您想进行快速设置,只需使用set
命令和朋友。
尽管我同意为您的vimrc
采购货源的大多数答案。我确实相信source命令有用途。特别是批量修复。我从未尝试过使用
:windo
这样,我主要使用:argdo
和:cdo
。由于我可以更精确地控制需要应用的文件。
批量修复在大型代码库上特别有用。例如,您使用:g
,:v
,:s
进行修复,并将其保存在名为fix.vim
的文件中。这非常有用,您甚至可以通过:g
命令将宏与这些命令(:v
和:norm
)配对。
然后通过:args *.js
或类似命令(like backtick expression)更新您的argslist,最后执行:argdo source fix.vim