如何配置vim以有条件地设置软选项卡?

2024-03-28 09:44:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我需要tabstop=2softtabstop=2用于Ruby,tabstop=4softtabstop=4用于Python。我的googlefu在如何做到这一点上失败了。关于如何检测文件扩展名有什么想法吗?在


Tags: 文件myvimrcpolyglot文件类型rubytabstopgooglefu
3条回答

请确保您的~/.vimrc中包含此内容:

filetype plugin on

然后在~/.vim/ftplugin中创建这两个文件:

~/.vim/ftplugin/python.vim中:

^{pr2}$

~/.vim/ftplugin/ruby.vim

setlocal tabstop=2 softtabstop=2 shiftwidth=2 expandtab

(我添加了shiftwidthexpandtab,因为你几乎肯定也想要它们。)

Vim将检测文件类型,然后根据类型运行相应的文件。这是很好的,因为它可以使你的~/.vimrc保持整洁。您可以对Vim识别的任何文件类型执行此操作。当您编辑一个文件时,您可以使用:set filetype?来查看Vim认为它是什么类型的文件。在

首先,肮脏的方式:

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

您需要setlocal来防止这些设置应用于其他缓冲区。在


那么,不那么脏的方法是:

^{pr2}$

命名的augroup有助于组织您的~/.vimrc,但也可以在需要时一次性启用/禁用它。在

当你重新加载你的~/.vimrc,如果你做了很多修改,这可能会发生很多,autocmd永远不会取代以前的:它们被添加、添加和添加,这可能会导致严重的问题。autocmd!删除当前augroup中的所有autocmd,然后将它们添加回以避免出现问题。在


那么,干净的方法是:

将以下行添加到~/.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绑定到^{事件的autocmd仍然会带来问题:它们复制了Vim内置的文件类型检测机制。假设您的filetype plugin indent on~/.vimrc中,该机制已经对缓冲区的FileType做出反应,并尝试源代码~/.vim/ftplugin/和{}中包含的脚本。在

对于特定于文件类型的设置,这是最合适的地方。在

您需要基于如下文件类型:

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

它会放在你的.vimrc或任何在它之后加载的文件中。在

相关问题 更多 >