对于我已经在Vim中打开一次的文件,似乎有一些奇怪的缓存行为。我打开了一个文件foo.txt
,然后我更改了~/.vim/after/ftplugin/text.vim
中的部分设置,但这些新设置未显示在foo.txt
中。我可以退出vim并重新打开foo.txt
,或者使用:e
或:so ~/.vim/after/ftplugin/text.vim
重新加载,但这些似乎都不会对foo.txt
的设置产生影响。如果我mv foo.txt bar.txt
,设置会显示bar.txt
而没有任何问题。
修改
我似乎可以按以下顺序强制设置为foo.txt
重新加载:
:so ~/.vimrc
:so ~/.vim/after/ftplugin/text.vim
问题:
~/.vimrc
不够?它应用了~/.vimrc
中直接指定的设置,但是不应该在filetype plugin indent on
行加载ftplugins?为什么之后需要采购text.vim
?答案 0 :(得分:2)
Vim runtime包含几百个文件,我不确定为什么你希望Vim能够持续监控它们。它没有。这些文件是在一些明确定义的(并记录在案的)点上加载的,这些都是它的全部内容。
特别是没有安全重新加载配置的方法。您可以执行:so ~/.vimrc
之类的操作,但除非您专门编写了vimrc
来考虑这一点,否则将成为缺点(例如autocmd
堆积)。如果你想要安全,你必须退出Vim并重新开始。这就是Vim的工作原理。
现在,对于ftplugin
你可能会得到这样的东西:
:setf text
(使用实际的文件类型而不是text
)。这适用于简单的set fubar
选项。它起作用,因为引擎盖setf
实际上是一个精心编写的autocmd
。它仍会因更复杂的构造(例如autocmd
或文件范围的变量)而中断,原因相同:so ~/.vimrc
有缺点。
答案 1 :(得分:1)
更精确一些:
.vimrc
加载一次 - >用于定义全局内容.gvimrc
相同的内容,仅在.vimrc
macros/
脚本(显式/手动加载)如你所见,所有东西都只加载一次。如果要多次加载它们,则必须手动并明确地执行此操作。这就是为什么我们中的一些人有:Reload
命令来简化重新加载任何类型的脚本 - 我的脚本隐藏在我的脚本集合中:lh-misc - >插件/ VIM-maintain.vim