通用配置
可以通过运行以下命令安装一套完整的 Vim 配置:
git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh
如果想添加自定义配置,请编辑:
vim ~/.vim_runtime/my_configs.vim
用于保持缩进一致的基础 Vim 配置如下:
set shiftwidth=4 " used by >>, << and tab.
set tabstop=4 " number of space characters used when displaying TAB
set expandtab " replace TAB by spaces
set softtabstop=4 " will erase 4 spaces at once when using BS in the beginning of lines only
这些选项的含义是:
shiftwidth=4:使用>>、<<或自动缩进等命令缩进时使用四个空格。tabstop=4:将一个实际的制表符显示为四列宽。expandtab:按下 Tab 键时插入空格,而不是插入真正的制表符。softtabstop=4:让编辑体验表现为一个缩进层级等于四个空格,包括用 Backspace 删除缩进时也是如此。
如果这是一个已有文件,并且想按照当前设置规范化缩进,可以在 Vim 中运行:
:%retab
启用 expandtab 时,这会把制表符转换为空格。在大型文件上使用之前,最好事后检查 diff,因为缩进变更在版本控制中可能会产生大量噪声。
Python
对于 Python,四个空格是标准缩进宽度。同样的设置很适合:
set shiftwidth=4
set tabstop=4
set expandtab
set softtabstop=4
也可以通过添加 autocmd,让这些设置只应用于 Python 文件:
autocmd FileType python setlocal shiftwidth=4 tabstop=4 expandtab softtabstop=4
使用 setlocal 会把设置限制在当前缓冲区内,因此不会意外影响其他文件类型。
C
C 项目可能使用制表符、空格,或项目特定的混合方式。转换缩进之前,应先检查项目采用的风格。
对于使用空格的四空格 C 风格:
autocmd FileType c setlocal shiftwidth=4 tabstop=4 expandtab softtabstop=4
对于基于制表符的 C 风格,并且一个制表符显示为八列:
autocmd FileType c setlocal shiftwidth=8 tabstop=8 noexpandtab softtabstop=8
重点是让 Vim 的缩进设置与项目现有风格保持一致。
Vim 与 Notepad++ 的不一致
Vim 和 Notepad++ 之间常见的不一致,通常来自对制表符的不同处理。一个编辑器可能把真正的制表符显示为四列,而另一个编辑器显示为八列。这样同一个文件可能在一个编辑器中看起来对齐,在另一个编辑器中却是错乱的。
要在 Vim 中检查文件是否包含真正的制表符,可以运行:
:set list
要再次隐藏标记:
:set nolist
如果文件包含八个空格组成的连续空格组,并且你想把每组替换成四个空格,可以使用:
:%s/ / /g
该命令会在整个文件中把八个实际空格替换为四个实际空格。它不会替换制表符。如果文件包含真正的制表符,而目标是按照当前 Vim 缩进设置进行转换,请使用:
:%retab
一个实用工作流是:
:set tabstop=4 shiftwidth=4 expandtab softtabstop=4
:%retab
:w
然后在 Notepad++ 中重新打开文件,并将其制表符宽度配置为与项目风格一致。保持一致比具体数字更重要,因此应先选定一种缩进规则,并在用于编辑该文件的每个编辑器中应用它。
