首页 > 技术文章 > vim缩进

wyzersblog 2020-11-09 12:45 原文

一些设置选项的含义

set expandtab: 编辑时将tab展开为tabstop个空格。

shiftwidth:使用自动缩进或>><<等命令时的缩进宽度。若无expandtab,当连续缩进达到tabstop距离时,会替换为一个tab字符。

tabstop文件中的tab的显示宽度。

softtabstop编辑时按下的缩进宽度,不启用expandtab会混合tab与space进行缩进。

一些组合

1). tab字符显示4个space;缩进只使用4空格

set tabstop=4
set shiftwidth=4
set expandtab

2). tab字符显示8个space;缩进只使用4空格

set softtabstop=4
set shiftwidth=4
set expandtab

个人认为,维持tabstop和缩进空格数一致(即组合1)更好。大多数源代码文件都是space-only或者tab-only的,而使用tabstop=4可以使用:retab将源文件转换为4-space缩进的源文件。

3). 只用tab(4-space)

set tabstop=4
set shiftwidth=4

缩进模式之间的转换

由于只是简单的字符串处理,不涉及源码编译。所以以下方法不能完美的实现缩进转换。如果您有更好的方法,欢迎留言。

1). tab到空格
:%retab
将文件中的tab替换为tabstop个空格。可能会影响字符串中的tab(不是转义字符'\t')

2). 空格到tab
:%retab!
与1)相反。同样可能会影响字符串。

3). 2-space到4-space
:%s/ /&&/g
可能会影响字符串中的内容。

4). 4-space到2-space
:%s/ / /g
可能会影响字符串中的内容。

5). 格式化
gg=G
将整个文件格式化,使用cindentlisp。效果可能会比以上几种简单的字符串处理更好。

推荐阅读