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

我正在通过我的vim dotfiles来整理它们。 我注意到,通过时间我已经以各种不一致的方式添加了各种文件types的具体设置。 假设我正在为Python定制:

  • au BufRead,BufNewFile *.py (do something) 。 我不喜欢这个,因为一些Python文件可能没有.py终止。

  • au FileType python (do something) 。 这似乎是一个更好的select,因为它不依赖于具有.py终止的文件。 缺点是Vim不知道一些文件types。 我可以让Vim识别附加的文件types,但是我也有各种不一致的方法: .vim/filetype.vim文件,另外一个在.vim/after/filetype.vim以及.vimrc各种set filetype命令。

  • 添加一个.vim/ftplugin/python.vim文件,具有文件types特定的设置。 我知道$VIMRUNTIME/ftplugin/python.vim可以覆盖我在这里设置的任何设置。 一个问题是,我不知道这是如何与.vim/filetype.vim.vim/after/filetype.vim交互。

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

所以我至less有四种方法来做这个,而不是提到语法文件和文件types特定的插件。 在我看来,最好的办法是将我的文件types特定的设置放在after/ftplugin这样它们不会被覆盖,而filetypes.vim也会出于同样的原因。

但是,在我继续之前,我想问问任何人是否有处理文件types特定设置的最佳方法的build议。

我将我的Python特有的设置存储在$HOME/.vim/ftplugin/python.vim ,因为我没有做任何与$VIMRUNTIME/ftplugin/python.vim冲突的$VIMRUNTIME/ftplugin/python.vim

将这些设置保存在一个ftplugin文件中,可以让我的.vimrc保持良好的通用性,并且更易于维护(在Vim使用十多年之后,它仍然相当大)。

如果你想控制你的Vim发行版的ftplugin ,那么$HOME/.vim/after/ftplugin/python.vim是你想要的,因为它是afterafter被读取的。

同样, $HOME/.vim/filetype.vim将在$VIMRUNTIME/filetype.vim之前被find,并且在$HOME/.vim/after/filetype.vim之前被提交。

调用:scriptnames脚本名将按照它们的第一个来源的顺序列出所有的脚本名。

:help filetype提供了所有这些相当全面的信息。