当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《按文件类型更改Vim缩进行为》经验,为你挑选了7个好方法。

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



1> SpoonMeiser..:

.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,向下滚动到filetype插件部分.


你应该把它放在`〜/ .vim/after/ftplugin/html.vim`中.但正如其他人在下面指出的那样,将`autocmd FileType html setlocal shiftwidth = 2 tabstop = 2`添加到你的`.vimrc`会好得多.
仅供参考:不要将js用于javascript文件类型.请改用javascript.(`autocmd FileType javascript setlocal shiftwidth = 2 tabstop = 2`)
你需要在你的vimrc上添加`filetype plugin on`.
哎呀,实际上,那是/我/那里有那个文件.我会解决问题.我不同意,但我认为将不同文件类型的命令分离成单独的文件会使一切变得更加容易,特别是如果您有许多文件类型的要求,或者某些文件类型的许多选项.
实际上,没有太多理由为ftplugins使用after目录.Vim将加载它在运行时路径中找到的所有内容,而不仅仅是语法文件中的第一个.

2> graywh..:

使用ftplugins或autocommands设置选项.

文件类型插件

~/.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

我也建议学习之间的差异tabstopsofttabstop.很多人都不知道softtabstop.


`sw`是`softwidth`的缩写,`sts`是`softtabstop`的缩写,`et`是`expandtab`的缩写,`setl`是`setlocal`的缩写,`au`是`autocmd的缩写.您可以使用长格式而不是短格式.
我相信`sw`扩展到`shiftwidth`而不是`softwidth`.
@jvriesem没有太多内容:'ts'是制表符的显示方式; 'sts'是按Tab键时要插入的"空格"数; 'sw'是每个缩进级别使用多少"空格"; 'et'是使用空格还是标签; 'sta'允许您在按行的开头按Tab键时插入'sw'"空格".
我想知道为了清楚起见,完整的表格是否会更好用,而不是最后的简短句子.

3> Siwei Shen 申..:

编辑你的~/.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空白首选项



4> Paul Tomblin..:

根据〜/ .vimrc中的文件后缀放置autocmd命令

autocmd BufRead,BufNewFile   *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile   *.pl syntax on

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


"FileType"有什么优势呢?
我在使用文件类型来处理html文件时遇到了问题(因为.html文件实际上不是HTML,而是带有模板语言的模板HTML文件).Filetypes似乎并不认为它是html,但这种方法会.
有没有办法颠倒比赛?
@digitxp-优点是当您使用的扩展名与定义的“ FileType”不匹配时。例如,在我的安装中,*。md表示Modula2的文件类型,而我正在使用它进行降价。我可以(a)更改默认的FileType设置(b)使用自定义配置更改文件类型设置,或者(c)在与(c)一起使用的1 .vimrc文件中使用此设置可以快速获得所需的内容。

5> Jonathan Lef..:

我通常使用expandtabset,但这对makefile来说很糟糕.我最近补充说:

:autocmd FileType make set noexpandtab

到.vimrc文件的末尾,它将Makefile,makefile和*.mk识别为makefile,并且不会扩展选项卡.据推测,你可以扩展它.


例如,Vim附带的文件类型插件将为makefile等"setlocal noexpandtab"提供有用的功能.对于诸如shiftwidth之类的个人事物,自动命令与ftplugins并不重要 - 这就是你选择构建你的vim配置的方式.

6> 小智..:

我总是对那些为不同文件类型更改选项卡大小的人感到惊讶.当您使用较少的文件查看文件时,您到底做了什么?

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

autocmd FileType python set tabstop=8|set shiftset expandtab
autocmd FileType ruby set tabstop=8|set shiftset expandtab


与某些公司一样,许多语言都有很长的惯例.以NodeJS为例.标签应该是两个空格.头痛,很傻,但很重要.
为什么选项卡必须在所有情况下都相同?对于配置文件,8个空格选项卡可以正常工作,但对于具有大量缩进的代码,2更容易管理.然后有固定的约定:node.js应该有2个空格选项卡,而python实际上在语法上无效,除了4个空格选项卡之外的任何其他选项.

7> Juan Lanus..:

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

:set et
:retab

并且文件中的选项卡被足够的空格替换.要让标签返回,只需:

:set noet
:retab

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有