如何在所有缓冲区中获取 vimrc



要在当前窗口中的所有缓冲区中获取vimrc,我:bufdo so~/.vimrc,要在我:windo so~/.vimrc的所有窗口中的ACTIVE缓冲区中获取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,这意味着隐藏缓冲区不会获得行号。 我什至在 r/vim 上发表了一篇关于这个问题的 reddit 帖子,并制作了一个关于它的视频,但我不知道为什么没有人明白我说的话。老实说,即使这个问题很简单,也不认为除了我之外的其他人会解决这个问题。

:bufdo命令将消耗|作为要执行的命令的一部分,因此实际上您正在为处于活动状态的每个缓冲区运行:windo命令!

请参阅:help :bar,其中记录了此行为。

该帮助部分还提到了一种解决此问题的方法,即使用:execute命令从字符串运行第一个命令,这允许您分隔第一个命令。这样:

:execute 'bufdo so ~/.vimrc' | windo so ~/.vimrc

请注意,"在所有缓冲区中"或"在所有窗口中">获取 vimrc 文件没有多大意义......vimrc 文件通常具有全局命令,通常只需要获取一次,通常如果您修改 vimrc,只需再次获取一次就足够了......

对于影响本地设置并用于对单个缓冲区进行操作的单独*.vim脚本,这可能有意义。ftplugin,缩进和语法脚本浮现在脑海中。但同样对于这些,它们通常是按缓冲区运行的,而不是按窗口运行的......拥有要在每个缓冲区和窗口上运行的脚本并非完全不可思议,但这肯定看起来很奇怪......

.vimrc只能包含全局定义。这是它应该被使用的方式。在多个缓冲区中采购它是没有意义的。

我想知道您是否正在使用本地设置,其中最好的工具是 ftplugin(当设置是文件类型驱动的)或用于项目驱动设置的local_vimrc插件时。

在所有缓冲区和所有窗口中应用::windo bufdo set number

如果您有标签,请从:tabe:tabf:tab和朋友。只需添加这样的tabdo:tabdo windo bufdo set number

我建议不要像这样采购您的vimrc。如果您想要快速设置,只需使用set命令和朋友。

  • :help tabdo
  • :help windo
  • :help bufdo
  • :help source

虽然我同意大多数关于采购vimrc的答案.我确实相信源命令有用途。特别是批量固定。我从未尝试过使用:windo,我主要使用:argdo:cdo。因为我对需要应用的文件有更精细的控制。

批量修复在大型代码库上特别有用。例如,您可以使用:g:v:s进行修复,并将它们保存在名为fix.vim的文件中。这非常有用,您甚至可以通过:norm命令将宏与这些命令(:g:v)配对。

  • :help norm

然后通过:args *.js或类似的命令(如反引号表达式)更新你的argslist,最后做:argdo source fix.vim

最新更新