Vim: 缩进
# Vim 的自动缩进方式
| 缩进方式 | 官方文档 | 说明 |
|---|---|---|
| 自动缩进 | :help autoindent | 起新行的时候复制当前的缩进形式; |
| 智能缩进 | :help smartindent | 在 autoindent 基础上添加一些缩进规则;能识别一些 C 语法,合适的时候进行自动增减缩进; |
| C语言缩进 | :help cindent | 能够分析上下文,提供 C 相似语言的自动增减缩进能力; |
| 缩进表达式 | :help indentexpr | 自定义自动缩进的方式; 完全自定义比较高阶,就不过多介绍了; |
# Vim 的自动缩进配置方式
| 缩进方式 | 开启的选项 | 配置 | 生效优先级 |
|---|---|---|---|
| 自动缩进 | set autoindent | 最后 | |
| 智能缩进 | +smartindent | set smartindent | 第三 |
| C语言缩进 | +cindnet | set cindent | 其次 |
| 缩进表达式 | set indentexpr= | 最高 | |
| 文件类型缩进 | filetype indent on | 它是上述四种的组合,看实际实现 |
Vim 提供了哪些文件类型的智能缩进表达式? 你可以在
Normal模式下,键入echo $VIMRUNTIME,获取 Vim 的 Runtime 目录,在${VIMRUNTIME}/indent目录下就可以看到 Vim 支持的文件类型。
# Vim 下常用的缩进快捷键
| 操作 | 所在的模式 | 产生的效果 |
|---|---|---|
Enter | INSERT | 下一行自动增减缩进 |
O/o | Normal | 下一行自动增减缩进 |
>> | Normal/Visual | 增加当前行/选中行缩进 |
<< | Normal/Visual | 减少当前行/选中行缩进 |
Ctrl+T | Insert | 增加当前行缩进 |
Ctrl+D | Insert | 减少当前行缩进 |
== | Normal/Visual | 根据上下文,对当前行/选中行自动缩进 |
gg=G | Normal | 自动缩进整个文档 |
=a{ | Normal | 自定缩进当前所在的代码块,即花括号之间 |
# 我对 Vim 缩进的推荐配置
.vimrc 中需要开启的配置:
| |
验证配置是否生效,detection 和 indent 需要打开状态,前者识别文件类型,后者告诉 Vim 根据识别的文件类型需要加载缩进配置:
| |
不推荐
smartindent,诞生之初,就是autoindent的更智能版本的存在,但是在他诞生的同期,大部份语言都有自己的缩进表达式或者基于cindent定制自己的规则, 所以smartindent就显得鸡肋了。^[1]
[1]: vi - autoindent is subset of smartindent in vim? - Stack Overflow