首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vim - ftplugin设置更改不更新现有文件。

Vim - ftplugin设置更改不更新现有文件。
EN

Stack Overflow用户
提问于 2017-02-27 17:14:32
回答 2查看 580关注 0票数 1

对于我已经在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,其顺序如下:

  1. :so ~/.vimrc
  2. :so ~/.vim/after/ftplugin/text.vim

问题:

  1. 为什么这是必要的/为什么其他设置没有被拾取?
  2. 为什么采购~/.vimrc是不够的?它应用了直接在~/.vimrc中指定的设置,但不是应该在filetype plugin indent on行加载ftplugins吗?为什么采购text.vim之后是必要的?
EN

回答 2

Stack Overflow用户

发布于 2017-02-27 17:51:37

Vim 运行时由几百个文件组成,我不知道为什么您希望Vim持续监视它们。没有,这些文件是在一些定义良好(并有文档记录的)点加载的,仅此而已。

特别是没有安全的方法来重新加载您的配置。您可以做像:so ~/.vimrc这样的事情,但是除非专门编写vimrc来考虑这一点,否则就会有缺点(比如autocmd的堆积)。如果你想安全,你必须放弃Vim,重新启动它。这就是维姆的工作方式。

现在,对于ftplugin来说,您可以通过这样的方法来解决问题:

代码语言:javascript
复制
:setf text

(使用实际的文件类型而不是text)。这适用于简单的set fubar选项。它之所以有效,是因为在幕后,setf实际上是一个精心编写的autocmd。对于更复杂的构造(如autocmd或文件作用域变量),它仍然会中断,原因与:so ~/.vimrc存在缺陷的原因相同。

票数 2
EN

Stack Overflow用户

发布于 2017-02-27 23:01:40

还有几个精确性:

  • .vimrc只加载一次->,用于定义全局内容
  • .gvimrc相同,只在.vimrc之后加载gvim。
  • 插件也会在vimrc文件->之后加载一次,用于全局处理。
  • 自动加载插件是按需加载的,只要它们定义的函数被调用一次。
  • 每个缓冲区加载一次ftplugins (可能多次加载)!由于可能存在多个缓冲区,需要对其进行来源),因此定义的->只适用于触发其加载的当前缓冲区。
  • 还有langmap脚本、语法脚本、缩进脚本,甚至旧的macros/脚本(显式/手动加载)。
  • 有些插件提供本地vimrcs (基本上与ftplugins相同,但加载取决于缓冲区的当前目录,而不是它的文件类型)。

正如你所看到的,所有的东西都只装载一次。如果您想要加载它们几次,则必须手动和显式地进行加载。这就是为什么我们中的一些人有一个:Reload命令来简化重新加载任何类型的脚本--我的脚本集合隐藏在我的脚本集合中: lh-misc -> plugin/vim-->.vim。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42491812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档