将 vim 中的 tab 转换为 space

无论是处于协同编程的需要还是重看自己代码的需要,对于同一种语言,保持一致的编程风格是很有必要的。关于这些的讨论很古老也很多资料,这里主要是说说在 vim 中 tab 的处理。

为了在不同环境中获得相同的效果,采用 space 缩进而不是 tab 缩进是个明智的选择。然而,手动按空格键来缩进会是件痛苦的事情,不但次数多,而且还要计数。因此,采用 softtab 会是一个更好的选择。softtab,即按 tab 键会自动转化为 space 来进行缩进,因此所需要做的便是设定 softtab 的大小。我个人是习惯用 4,好像国外比较多用的是 2。

vim 中可以简单设置来得到自动缩进,我初学 vim 时参考别人的配置时就拿了这些:

1
2
3
4
5
6
7
set autoindent
set smartindent
set cindent

set tabstop=4
set shiftwidth=4
set softtabstop=4

然而,今天发现个问题,对于换行时和 shift / unshift 时,尽管缩进到正确位置了,但使用的依然是 tab 而不是 space。重新 Google 了一下,发现再加上以下配置便可以自动将 tab 转为 space 了。

1
set expandtab

对于已有的文件,可以使用 :retab 命令来进行 reset,其中便会根据配置来进行转换了。当然,也可加个键映射来简化操作:

1
nnoremap <f2> :retab<cr>

Reference:

Tab key == 4 spaces and auto-indent after curly braces in VIM