改变Vim缩进行为通过的文件的类型
-
03-07-2019 - |
题
有人向我解释简单的条款的最简单的方法来改变压行为的Vim根据文件的类型?例如,如果我打开一个Python文件,它应该缩进有2个空间,但如果我打开一个Powershell脚本,它应该使用4个空间。
解决方案
只要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 ,向下滚动到文件类型插件部分。
其他提示
使用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
您可以使用其简短版本替换任何长命令或设置:
autocmd
: au
点击
setlocal
: setl
点击
shiftwidth
: sw 码>点击
tabstop
: ts 码>点击
softtabstop
: sts 码>点击
expandtab
: et 代码>
我还建议学习 tabstop
和 softtabstop
之间的区别。很多人不了解 softtabstop
。
编辑〜/ .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
请参阅:按文件类型设置Vim空白首选项
根据〜/ .vimrc
中的文件后缀放置autocmd命令autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
您正在寻找的命令可能是ts =和sw =
我通常使用 expandtab
设置,但这对于makefile来说很糟糕。我最近补充说:
:autocmd FileType make set noexpandtab
到我的.vimrc文件的末尾,它将Makefile,makefile和* .mk识别为makefile,并且不会展开标签。据推测,你可以扩展它。
我总是对那些为不同文件类型更改标签大小的人感到惊讶。当你用较少的文件查看文件时,你到底做了什么?
就个人而言,我在.vimrc中使用这些设置:
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
我们大多数人都知道这一点,但无论如何(我第一次感到困惑):
执行:set et
(:set
expandtabs)不会更改文件中已存在的选项卡,必须执行:retab
。
例如:
:set et
:retab
并且文件中的选项卡被足够的空格替换。要获得标签,请执行以下操作:
:set noet
:retab
今天,您可以尝试 editorconfig ,还有一个 vim插件。有了这个,您不仅可以在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
我使用我在C中写的一个名为 autotab的实用程序代码>
。它分析您加载的文件的前几千行,并确定Vim参数 shiftwidth
, tabstop
和 expandtab
的值。
这是使用例如 gcc -O autotab.c -o autotab
编译的。与Vim集成的说明位于顶部的注释标题中。
Autotab相当聪明,但可能会不时混淆,特别是使用不同的缩进样式进行不一致的维护。
如果文件显然使用制表符或制表符和空格的组合进行缩进,Autotab将通过考虑连续行(如注释)内部元素的对齐等因素来确定正在使用的制表符大小。
它适用于各种编程语言,并且对于“带外”是宽容的。不服从缩进增量的元素,如C预处理指令,C语句标签,更不用说明显的空行。