我现在是一个Python / Ruby多语言,需要根据我正在使用的文件类型切换我的.vimrc中的值。
对于Ruby,我需要tabstop=2
,softtabstop=2
,对于Python,我需要tabstop=4
,softtabstop=4
。我的Google-fu未能如何做到这一点。有关如何检测文件扩展名的任何想法?
答案 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
(我添加了shiftwidth
和expandtab
,因为您几乎肯定也想要这些。)
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>
这是特定于文件类型设置的最合适位置。