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

我该如何实现?

#1 楼

最好的方法是将这些设置放在~/.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 on中包含vimrc(应该这样做),Vim会尝试检测您编辑的文件的文件类型,一旦找到正确的文件类型并为缓冲区设置了该文件类型,请尝试获取源文件。在以下标准位置中对应的ftplugin:

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


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

评论


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

–DeltaLima
15年2月3日在17:37

确保在vimrc中缩进了文件类型插件。

– romainl
15年2月3日在17:38

@DeltaLima vim具有检查设置的路径。只要将文件类型插件设置为开,vim的路径将在其路径中包含ftplugin / .vim和after / ftplugin / / vim文件。

–davidlowryduda
15年2月3日在20:24

@DeltaLima,请参阅我的编辑。

– romainl
15年2月3日在20:49

#2 楼

您可以在.vimrc中使用自动命令来执行此操作。例如,我有一个函数html_like_mode,它可以设置各种用于编辑HTML文件的内容。在我的.vimrc中,我有:

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


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

au FileType perl setlocal equalprg=perltidy


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

#3 楼

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

评论


如果您能解释一下它的作用和设置方式,那将很有用,并不是每个人都知道;)

–赛斯
15年2月3日在17:01

#4 楼

二手的autocmd和FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4