如何在Vim中为不同语言设置不同的标签设置?

在我的.vimrc我有一个通用的标签设置为两个空格,我想覆盖每个基本语言(即,四个Python等,否则使用默认),但我有麻烦find这样的一个很好的例子。

只需将设置放入文件types插件文件〜/ .vim / ftplugin / LANGUAGE.vim。 我的〜/ .vim / ftplugin / perl.vim包含行:

" " ---------- tabulator / shiftwidth -------------------- " Set tabulator and shift width to 4 (Perl Style Guide) " setlocal tabstop=4 setlocal shiftwidth=4 " 

对于文件types为“perl”(新的或现有的)的每个文件,这些设置将自动生效。

这些其他答案似乎太复杂。 不要在〜/ .vim树中混淆更多的目录和文件,只需将以下内容添加到〜/ .vimrc中即可。

 autocmd Filetype python setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4 

(你可以是lt3t和缩写参数, et ts=4 sw=4 sts=4 )。 我通过filetype设置了Vim空白首选项

我的回答是基于VIM Wiki上的这个提示 。 这个答案使用“后”目录,所以你不必为提供不同的文件types提供的插件文件。

例如,要指定Python文件的自定义设置,请创build一个名为python.vim的文件来保存您的Python设置:

 setlocal expandtab setlocal shiftwidth=4 setlocal softtabstop=4 

把这个文件放在其中

  • ~/.vim/after/ftplugin (Linux)
  • $HOME/vimfiles/after/ftplugin (Windows)

最后,你必须在你的.vimrc (Linux)或_vimrc (Windows)中有这个:

 filetype plugin indent on 

通常,你所做的就是设置一个特殊的vimrctypes的文件,其中包含特定语言的设置,然后在主要的.vimrc中使用自动命令来在必要时执行特殊的vimrc。 这里是我的Haskell( .hs等)文件的configuration:

 autocmd! BufNewFile,BufReadPre,FileReadPre *.hs so ~/.vim/haskell.vim autocmd! BufNewFile,BufReadPre,FileReadPre *.hsc so ~/.vim/haskell.vim autocmd! BufNewFile,BufReadPre,FileReadPre *.lhs so ~/.vim/haskell.vim autocmd! BufNewFile,BufReadPre,FileReadPre *.cabal so ~/.vim/haskell.vim 

我的~/.vim/haskell.vim可以像“set expandtab”那样使用空格而不是制表符,以及各种其他的格式化魔术和类似的东西。 您可以经常从http://vim.org和其他网站下载各种语言的优秀版本。;

请注意,除了更改vim设置外,您还可以做更多的事情。 例如,您可以在编辑之前和之后通过filter运行该文件:

 " Edit gpg-encrypted ascii-armoured files autocmd! BufReadPre,FileReadPre *.asc set bin autocmd BufReadPost,FileReadPost *.asc '[,']!gpg -q -d autocmd BufReadPost,FileReadPost *.asc set nobin autocmd! BufWritePre,FileWritePre *.asc set bin autocmd BufWritePre,FileWritePre *.asc '[,']!gpg -e autocmd BufWritePost,FileWritePost *.asc undo autocmd BufWritePost,FileWritePost *.asc set nobin 

我使用编辑器configuration插件,并将.editorconfig文件添加到我的所有项目中 – 它将允许您使用相同的编程语言为不同的项目定义不同的缩进设置,因为相同语言中的不同项目经常具有不同的编码标准。

你可以在这里看到一个你可以设置的configurationtypes的例子: http : //editorconfig.org/