Vim-ftplugin设置更改不更新现有文件
对于我已经在Vim中打开过的文件,似乎存在一些奇怪的缓存行为。我打开了一个文件Vim-ftplugin设置更改不更新现有文件,vim,ftplugin,Vim,Ftplugin,对于我已经在Vim中打开过的文件,似乎存在一些奇怪的缓存行为。我打开了一个文件foo.txt,然后我在~/.vim/after/ftplugin/text.vim中更改了一些设置,但这些新设置不会出现在foo.txt中。我可以退出vim并重新打开foo.txt,或者使用:e重新加载,甚至可以使用:so~/.vim/after/ftplugin/text.vim,但这些似乎都不会影响foo.txt的设置。如果Imv foo.txt bar.txt,则bar.txt的设置不会出现问题 编辑 似乎我可
foo.txt
,然后我在~/.vim/after/ftplugin/text.vim
中更改了一些设置,但这些新设置不会出现在foo.txt
中。我可以退出vim并重新打开foo.txt
,或者使用:e
重新加载,甚至可以使用:so~/.vim/after/ftplugin/text.vim
,但这些似乎都不会影响foo.txt
的设置。如果Imv foo.txt bar.txt
,则bar.txt
的设置不会出现问题
编辑
似乎我可以按以下顺序强制重新加载foo.txt
的设置:
:so~/.vimrc
:so~/.vim/after/ftplugin/text.vim
~/.vimrc
不够?它应用了在~/.vimrc
中直接指定的设置,但是ftplugins不应该在上的文件类型插件缩进行加载吗?为什么事后需要寻源text.vim
:so~/.vimrc
的操作,但除非您专门编写vimrc
来考虑这一点,否则将存在一些缺点(例如autocmd
s堆积)。如果你想安全,你必须退出Vim并重新启动它。这就是Vim的工作原理
现在,对于ftplugin
s,您可能会得到如下结果:
:setf text
(使用实际的文件类型,而不是文本
)。这适用于简单的set fubar
选项。它之所以有效,是因为发动机罩下的setf实际上是一个精心编写的autocmd
。对于更复杂的构造(例如autocmd
s或文件范围的变量),它仍然会中断,原因与:so ~/.vimrc
有缺点。更精确一些:
加载一次->用于定义全局内容.vimrc
- 与
相同,仅在.gvimrc
之后加载gvim.vimrc
- 插件也加载一次,在vimrc文件->之后加载全局内容
- 自动加载的插件在调用它们定义的函数时按需加载一次
- ftplugins每个缓冲区加载一次(可能多次!因为可能有多个缓冲区需要对其进行源化)->定义仅适用于触发加载的当前缓冲区
- 还有langmap脚本、语法脚本、缩进脚本,甚至还有旧的
脚本(显式/手动加载)宏/
- 一些插件提供本地vimrcs(基本上与ftplugins相同,但加载取决于缓冲区的当前目录,而不是其文件类型)
如您所见,所有内容都只加载一次。如果要多次加载它们,则必须手动显式加载。这就是为什么我们中的一些人有一个
:Reload
命令来简化任何类型的脚本的重新加载-我的脚本隐藏在我的脚本集合中:lh misc->plugin/vim maintain.vimvim文档的一个主要问题(如果不是主要问题的话)是缺乏关于如何组合的高级视图。出于这个原因,每个人都必须通过自下而上的解析来发现这些细节,这就是为什么绝大多数人在尝试之前就放弃了。“我想知道我们能做些什么。”SatoKatsura说。我们以前有vim提示,然后迁移到vim.wikia.com。已经投入了大量的精力来整理各种提示,编辑它们。。。约翰和弗里茨,以及其他人,在这个话题上做了非常出色的工作。不幸的是,维基并不受欢迎。一部分是因为我们没有登录时的侵入性广告,另一部分是因为我们从来没有时间完成和完成tips数据库。此外,它还受到没有外部链接的SO/SE政策的影响。因此,我们几乎不得不重新开始,这无助于知识的资本化。现在,我们有了关于vim的文档。。。