2009-05-21 108 views

回答

47

只需将设置到文件类型插件文件 〜/ vim的/文件类型插件/ LANGUAGE.vim。 我〜/的.vim /文件类型插件/ perl.vim包含行:

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

这些设置将自动生效用于与文件类型“的perl” (新的或者现有的)的每个文件。

+0

很遗憾,我们仍然需要ftplugin来做到这一点。 – shabunc 2013-11-12 06:50:24

9

通常情况下,您要为特定语言设置一个特殊的vimrc类型的文件,然后在您的主.vimrc中使用自动命令来在必要时执行特殊的vimrc。这是我的哈斯克尔(.hs等)配置文件:

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做的东西,如“设置expandtab”使用空格代替制表符,以及其他各种魔法格式化和这样的事情。您可以经常从http://vim.org和其他网站下载各种语言的良好版本。

请注意,您可以做的不仅仅是更改vim设置。例如,你可以在编辑之前和之后运行经过过滤器的文件:

" 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 
+0

很好,谢谢。我打算使用这个解决方案而不是基于ftplugin的解决方案,因为在我使用相同语言的多个文件扩展名的情况下(比如你在Haskell示例中),这看起来更清晰。 – 2009-05-21 08:11:15

+1

有一点小的代价。每次切换到这样的缓冲区时,源命令(例如〜/ .vim/haskell.vim)都会被执行。 – 2009-05-21 08:55:29

+4

这不是正确的解决方案。正确的解决方案包括使用ftplugins(不需要自己编写和维护自动命令)和使用本地设置(非常重要)。 - > s#:set tabstop =#:setlocal tabstop =#。见fgm的答案。如果您的扩展程序未被识别为haskell,则更新您的文件类型库。你不想让vim将正确的语法高亮应用到你的文件吗? – 2009-05-21 10:43:26

20

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

例如,指定Python文件自定义设置,创建一个名为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 
60

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

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

(您可以是l33t并将参数缩写为et ts=4 sw=4 sts=4)。我发现这个在 Setting Vim whitespace preferences by filetype

2

我使用editor config插件和.editorconfig文件添加到我的所有项目 - 它会让你定义使用相同的编程语言不同的项目可以是经常不同的项目有用不同的缩进设置在同一种语言中有不同的编码标准。

你可以看到的配置类型,你可以在这里设置的例子: http://editorconfig.org/

相关问题