如何根据文件类型更改默认缩进?


34

我想根据正在处理的文件类型使用不同的缩进。例如,处理.c文件时,我希望缩进为4个空格。在.html文件中,我想(必须)使用标签。

我该如何实现?

Answers:


25

最好的方法是将这些设置放入~/.vim/after/ftplugin/<filetype>.vim

对于HTML(假设您需要4个字符宽的标签):

~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

使用ftplugin比使用自动命令更可取,因为Vim本身已经进行了文件类型检查并且已经尝试提供足够的ftplugin,因此没有理由强制进行更多检查并重新实现。

-编辑-

假设您已经拥有filetype plugin onvimrc(应该这样做),Vim将尝试检测所编辑文件的文件类型,一旦找到正确的文件类型并为缓冲区设置了文件,请尝试在以下标准位置获取相应的ftplugin:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

所有这些都是自动发生的,因此,如果您的文件类型被Vim识别,则绝对没有理由添加任何文件类型检测逻辑:只需将设置添加到正确的ftplugin即可。


我需要以某种方式激活ftplugin还是创建文件自动激活它?
DeltaLima 2015年

确保你有filetype plugin indent on你的vimrc
romainl 2015年

1
@DeltaLima vim具有检查设置的路径。只要filetype plugin on设置好,vim的路径就在其路径中包含ftplugin/<filetype>.vimafter/ftplugin/<filetype>/vim文件。
davidlowryduda

@DeltaLima,请参阅我的编辑。
romainl

14

您可以在中使用自动命令来执行此操作.vimrc

例如,我有一个功能html_like_mode可以设置各种内容来编辑HTML文件。在我的中.vimrc,我有:

au BufNewFile,BufRead *.html call s:html_like_mode()

这将关闭文件扩展名。如果启用了该文件类型,也可以取消该文件类型:

au FileType perl setlocal equalprg=perltidy

如您所见,您可以让它在其中执行任何命令。因此,您可以轻松地setlocal shiftwidth 4为* .c文件做一个。


9

augroup允许您将相关自动命令分组为命名组。(请参阅此处以了解有关augroup自动命令组的信息。)我们使用s来添加自动命令~/.vimrc,这种方式不会在每次获取源代码时都添加重复项。

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4

2
如果您能解释一下它的作用以及如何设置它,那将很有用,并不是每个人都知道;)
Seth 2015年

3

使用的autocmdFileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.