按文件类型更改Vim缩进行为

时间:2008-10-01 18:17:45

标签: file vim settings indentation

有人可以用简单的语言向我解释根据文件类型更改Vim的缩进行为的最简单方法吗?例如,如果我打开一个Python文件,它应该缩进2个空格,但如果我打开一个Powershell脚本,它应该使用4个空格。

11 个答案:

答案 0 :(得分:282)

只要vim切换到特定文件类型,您就可以添加.vim个文件。

例如,我有一个包含以下内容的文件~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=2
setlocal tabstop=2

这导致vim使用宽度为2个字符的标签进行缩进(noexpandtab选项在我的配置中全局设置)。

这里描述:http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4,向下滚动到文件类型插件部分。

答案 1 :(得分:156)

使用ftplugins或自动命令设置选项。

类型插件

~/.vim/ftplugin/python.vim:

setlocal shiftwidth=2 softtabstop=2 expandtab

不要忘记在~/.vimrc中打开它们:

filetype plugin indent on

:h ftplugin了解更多信息)

自动命令

~/.vimrc

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

您可以用短版本替换任何长命令或设置:
autocmdau
setlocalsetl
shiftwidthsw
tabstopts
softtabstopsts
expandtabet

我还建议您了解tabstopsofttabstop之间的区别。很多人不了解softtabstop

答案 2 :(得分:75)

编辑您的~/.vimrc,并为不同的缩进添加不同的文件类型,例如。我希望html/rb缩进2个空格,js/coffee个文件缩进4个空格:

" by default, the indent is 2 spaces. 
set shiftwidth=2
set softtabstop=2
set tabstop=2

" for html/rb files, 2 spaces
autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab

" for js/coffee/jade files, 4 spaces
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab

请参阅:Setting Vim whitespace preferences by filetype

答案 3 :(得分:58)

根据〜/ .vimrc

中的文件后缀放置autocmd命令
autocmd BufRead,BufNewFile   *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile   *.pl syntax on

您正在寻找的命令可能是ts =和sw =

答案 4 :(得分:23)

我通常使用expandtab设置,但这对于makefile来说很糟糕。我最近补充说:

:autocmd FileType make set noexpandtab

到我的.vimrc文件的末尾,它将Makefile,makefile和* .mk识别为makefile,并且不会展开标签。据推测,你可以扩展它。

答案 5 :(得分:14)

我总是对那些为不同文件类型更改标签大小的人感到惊讶。当你用较少的文件查看文件时,你到底做了什么?

就个人而言,我在.vimrc中使用这些设置:

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab

答案 6 :(得分:6)

这可能是我们大多数人都知道的,但无论如何(我第一次感到困惑): 执行:set et:set expandtabs)不会更改文件中已存在的标签,必须执行:retab。 例如:

:set et
:retab

并且文件中的选项卡被足够的空格替换。要获得标签,请执行以下操作:

:set noet
:retab

答案 7 :(得分:4)

今天,您可以尝试editorconfig,还有一个vim plugin。有了这个,您不仅可以在vim中更改缩进大小,而且在许多其他编辑器中,可以保持一致的编码样式。

下面是一个简单的editorconfig,正如你所看到的,python文件将有4个空格用于缩进,而pug模板文件只有2个。

# 4 space indentation for python files
[*.py]
indent_style = space
indent_size = 4

# 2 space indentation for pug templates
[*.pug]
indent_size = 2

答案 8 :(得分:4)

对于使用autocmd的用户,最好将它们组合在一起。如果分组与文件类型检测有关,则您可能会遇到以下情况:

augroup filetype_c
    autocmd!
    :autocmd FileType c setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab
    :autocmd FileType c nnoremap <buffer> <localleader>c I/*<space><esc><s-a><space>*/<esc>
augroup end

分组有助于使.vimrc井井有条,特别是在文件类型具有多个关联规则的情况下。在上面的示例中,定义了专用于.c文件的注释快捷方式。

autocmd!的初始调用告诉vim删除所述分组中任何以前定义的自动命令。如果再次使用.vimrc,这将防止重复定义。有关更多信息,请参见:help augroup

答案 9 :(得分:3)

虽然您可以使用缩进插件或手动使用设置来配置Vim的缩进,但我建议使用名为Vindect的python脚本,它会在您打开python文件时自动为您设置相关设置。使用this tip可以更有效地使用Vindect。当我第一次开始编辑由其他人创建的python文件时,它们具有各种缩进样式(制表符与空格和空格数),令人难以置信的令人沮丧。但是Vindect和this indent file

还建议:

答案 10 :(得分:1)

我使用我在C中编写的一个名为autotab的实用程序。它会分析您加载的文件的前几千行,并确定Vim参数shiftwidthtabstopexpandtab的值。

这是使用例如gcc -O autotab.c -o autotab编译的。与Vim集成的说明位于顶部的注释标题中。

Autotab相当聪明,但可能会不时混淆,特别是使用不同的缩进样式进行不一致的维护。

如果文件显然使用制表符或制表符和空格的组合来缩进,Autotab将通过考虑连续行(如注释)内部元素的对齐等因素来确定正在使用的制表符大小。

它适用于各种编程语言,并且对于#34;带外&#34;是宽容的。不服从缩进增量的元素,如C预处理指令,C语句标签,更不用说明显的空行。