如何配置vim以有条件地设置softtabs?

时间:2014-03-04 22:41:27

标签: python ruby vim

我现在是一个Python / Ruby多语言,需要根据我正在使用的文件类型切换我的.vimrc中的值。

对于Ruby,我需要tabstop=2softtabstop=2,对于Python,我需要tabstop=4softtabstop=4。我的Google-fu未能如何做到这一点。有关如何检测文件扩展名的任何想法?

3 个答案:

答案 0 :(得分:9)

确保在~/.vimrc

中有此内容
filetype plugin on

然后在~/.vim/ftplugin

中创建这两个文件

~/.vim/ftplugin/python.vim

setlocal tabstop=4 softtabstop=4 shiftwidth=4 expandtab

~/.vim/ftplugin/ruby.vim

setlocal tabstop=2 softtabstop=2 shiftwidth=2 expandtab

(我添加了shiftwidthexpandtab,因为您几乎肯定也想要这些。)

Vim将检测文件类型,然后根据类型运行相应的文件。这很好,因为它会使你的~/.vimrc变得杂乱无章。您可以对Vim识别的任何文件类型执行此操作。当您编辑文件时,可以使用:set filetype?查看Vim认为的文件类型。

答案 1 :(得分:3)

您需要将其基于以下文件类型:

au FileType ruby set tabstop=2 softtabstop=2
au FileType python set expandtab tabstop=4 softtabstop=4

这将在您的.vimrc或其后加载的任何文件中。

答案 2 :(得分:3)

首先,肮脏的方式:

autocmd FileType ruby   setlocal tabstop=2 softtabstop=2
autocmd FileType python setlocal expandtab tabstop=4 softtabstop=4

您需要setlocal才能阻止这些设置应用于其他缓冲区。


然后,不那么脏的方式:

augroup filetypes
    autocmd!
    autocmd FileType ruby   setlocal tabstop=2 softtabstop=2
    autocmd FileType python setlocal expandtab tabstop=4 softtabstop=4
augroup END

名为augroup的{​​{1}}适用于组织~/.vimrc,但如有需要,也可以一次性启用/停用。

当您重新加载~/.vimrc时,如果您经常修补,可能会发生很多事情,autocmd永远不会取代之前的版本:它们会被添加,添加和添加,这可能会导致严重的问题。 autocmd!删除当前autocmd中的所有augroup,然后再将其添加回来以避免出现问题。


然后,干净的方式:

将以下行添加到~/.vim/after/ftplugin/ruby.vim

setlocal tabstop=2
setlocal softtabstop=2

将以下行添加到~/.vim/after/ftplugin/python.vim

setlocal expandtab
setlocal tabstop=4
setlocal softtabstop=4

即使你干净地整理它们并autocmd!以防止它们堆积,autocmd绑定到FileType事件仍然会造成问题:它们复制了Vim的内置文件类型检测机制。假设您的filetype plugin indent on中有~/.vimrc,该机制已对您缓冲区的FileType作出反应,并尝试获取~/.vim/ftplugin/~/.vim/after/ftplugin/中包含的脚本。< / p>

这是特定于文件类型设置的最合适位置。