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

dim*_*ura 45 vim file-type ftplugin

我正在浏览我的vim dotfiles来整理它们.我注意到,随着时间的推移,我以各种不一致的方式添加了各种文件类型特定的设置.让我们假设我正在为Python定制:

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

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

  • 添加.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.vimafter出于同样的原因.

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

Joh*_*web 66

I store my Python-specific settings is in $HOME/.vim/ftplugin/python.vim, since I do nothing to conflict with $VIMRUNTIME/ftplugin/python.vim.

Keeping these settings in an ftplugin file keeps my .vimrc nice and generic and easier to maintain (it's still pretty big after over ten years of Vim usage).

如果你想推翻什么,ftplugin用你的vim分布S成立,那么$HOME/.vim/after/ftplugin/python.vim是你想要的,因为它是阅读after这些.

类似地$HOME/.vim/filetype.vim将在之前采购$VIMRUNTIME/filetype.vim,反过来将在之前采购$HOME/.vim/after/filetype.vim.

调用:scriptnames将按照首次采购的顺序列出所有源脚本名称.

:help filetype 提供有关所有这些的非常全面的信息.

  • 只是想在此处添加一条注释,即并非所有设置都必须位于文件类型的单个文件中,它们可以位于以filetype命名的目录中.我在.vim/ftplugin/python/{pydoc.vim,python.vim等中有我的python设置(以及特定于python的插件).} (19认同)
  • Randy提到你可以使用.vim/ftplugin/python/*,但你也可以使用filetype开始你的脚本:.vim/ftplugin/python _*.vim适合从python-vim代码中分割你的python设置. (4认同)
  • +1:如果您对给定的文件类型有很多不同的设置,那么这是一个非常好的组织方式. (2认同)