在.vim和.vimrc中组织文件类型设置的最佳方法是什么?

48

我正在整理我的vim配置文件。我注意到随着时间的推移,我以不一致的方式添加了各种针对特定文件类型的设置。假设我正在为Python自定义配置:

  • au BufRead,BufNewFile *.py (do something)。我不喜欢这个选项,因为某些Python文件可能没有.py后缀。

  • au FileType python (do something)。这似乎是一个更好的选择,因为它不依赖于文件是否具有.py后缀。缺点是Vim并不知道某些文件类型。我可以让Vim识别其他文件类型,但我也有各种不一致的方法:一个 .vim/filetype.vim 文件,另一个在 .vim/after/filetype.vim 中,以及各种在 .vimrc 中的 set filetype 命令。

  • 添加一个 .vim/ftplugin/python.vim 文件,其中包含特定文件类型的设置。我知道 $VIMRUNTIME/ftplugin/python.vim 可以覆盖我所做的任何设置。问题之一是我不确定这如何与.vim/filetype.vim.vim/after/filetype.vim交互。

  • 添加 .vim/after/ftplugin/python.vim。我知道这是在$VIMRUNTIME/ftplugin/python.vim加载之后加载的,因此可以覆盖从那里设置的设置。与上一种方法一样,我不确定它如何与 filetype.vim 文件交互。

所以,我至少有四种方法来处理这个问题,还没有提到语法文件和特定文件类型的插件。对我而言,似乎最好的方法是将我的特定文件类型的设置放在after/ftplugin中,以便它们不会被覆盖,并且将filetypes.vim放在after中以获得同样的效果。

但在继续之前,我想问问是否有人有关于处理特定文件类型设置的最佳建议。

1个回答

70
我将我的Python特定设置存储在$HOME/.vim/ftplugin/python.vim中,因为我不会与$VIMRUNTIME/ftplugin/python.vim冲突。
将这些设置保存在ftplugin文件中可以使我的.vimrc更加通用和易于维护(经过超过十年的Vim使用后仍然很大)。
如果您想覆盖带有Vim分布式的ftplugin设置,则需要$HOME/.vim/after/ftplugin/python.vim,因为它是在这些设置之后读取的。
类似地,$HOME/.vim/filetype.vim将在$VIMRUNTIME/filetype.vim之前被引用,而后者将在$HOME/.vim/after/filetype.vim之前被引用。
调用:scriptnames将列出所有已引用的脚本名称及其首次被引用的顺序。 :help filetype提供了有关所有这些内容的相当全面的信息。

21
在这里我想补充一点,不是所有的设置都必须在一个文件中针对某种文件类型进行设置,它们可以被放置在以该文件类型命名的目录中。例如,我的Python设置(和特定于Python的插件)位于.vim/ftplugin/python/{pydoc.vim, python.vim, etc..} - Randy Morris
2
+1:如果您有许多不同的文件类型设置,这是一种非常整洁的组织方式,非常棒。 - johnsyweb
1
哦,那很酷。最好不要将其调到11,因为verbose = 10提供的信息太多了。 - dimatura
4
Randy提到你可以使用.vim/ftplugin/python/,但你也可以让你的脚本以文件类型开头:.vim/ftplugin/python_.vim。这样有利于将你的Python设置与Python-Vim代码分离。 - idbrii
1
:help filename 返回有关 :filename 命令的帮助信息。您是否指的是 :help filetype - Rich
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接