像 vim 高手一样思考问题
Vim 解决问题的方式
认识 . 命令
.
命令会重复上次修改
注: `.` 命令是一个微型的宏
不要自我重复
使用复合命令减少无关的移动
复合命令 | 等效长命令 |
---|---|
C |
c$ |
s |
cl |
S |
^C |
I |
^i |
A |
$a |
o |
A<CR> |
O |
ko |
以退为进
使修改可重复 + 使移动可重复
执行 重复 回退
宁可重复超越一定次数, 也不要去慢慢数, 超过了可以回退, 并不浪费时间
查找并手动替换
*
命令可以查找与光标下单词相同的单词
认识 . 范式
.
范式: 一键移动, 一键修改
模式
停顿时请移开画笔
画家只花一小部分时间作画, 程序员也只花一小部分时间编写代码
把撤销单元切成块
进入插入模式-进行修改-<Esc>
是一次修改, 合理利用 <Esc>
按键, 将可撤销单元切成块
构造可重复的修改
daw
好过 d3l
用次数做简单的算术运算
num
+ 操作
可以重复执行多次
能够重复, 就别用次数
dwdw
, 不要用 2dw
双剑合璧, 天下无敌
操作符 + 动作命令 = 操作
操作符 | 用途 |
---|---|
c |
修改 |
d |
删除 |
y |
复制到寄存器 |
g~ |
反转大小写 |
gu |
转换为小写 |
gU |
转换为大写 |
> |
增加缩进 |
< |
减少缩进 |
= |
自动缩进 |
! |
使用外部程序过滤 {motion} 所跨越的行 |
荐: 使用自定义操作符与已有操作符协同工作
操作符待决模式: 按下操作符, 等待动作命令的状态, 是一个短暂瞬间
插入模式
插入模式中可及时更改错误
按键操作 | 用途 |
---|---|
<C-h> |
删除前一个字符 |
<C-w> |
删除前一个单词 |
<C-u> |
删除至行首 |
返回普通模式
按键操作 | 用途 |
---|---|
<Esc> |
切换到普通模式 |
<C-[> |
切换到普通模式 |
<C-o> |
切换到 插入-普通模式 |
插入-普通模式: 能让我们执行一次普通模式命令, 执行完毕立刻返回插入模式
不离开插入模式, 粘贴寄存器中的文本
<C-r>{register}
命令, 可以在插入模式粘贴寄存器中的内容, 使用 :register
查看寄存器中的内容
随时随地做运算
<C-r>=
访问表达式寄存器, 输入命令后, 敲一下 <CR>
即可将执行结果插入光标位置
用字符编码插入非常用字符
<C-v>{123}
以十进制字符编码插入字符<C-v>u{1234}
以十六进制字符编码插入字符<C-v>{nondigit}
按按键原义插入非数字字符<C-k>{char1}{char2}
插入二合字母表示的字符
用二合字母插入非常用字符
<C-k>{char1}{char2}
插入二合字母表示的字符:digraphs
查看二合字母列表:h digraph-table
查看有序二合字母列表
用替换模式替换已有文本
r{char}
替换单个字符R
进入替换模式gR
进入虚拟替换模式
虚拟替换模式: 制表符将会以多个空格的形式存在
可视模式
深入理解可视模式
- 可视模式并非传统的 “选择”
- 可视模式与操作符相结合, 并使用 “选区” + “操作” 的方式, 而非普通模式的 “操作” + “动作” 的方式
选择模式: vim 提供传统意义上的选择模式, 参见
:h Select-mode
, 使用<C-g>
在可视模式和选择模式中进行转换, 这一模式用处不大
选择高亮选区
命令 | 用途 |
---|---|
v |
激活面向字符的可视模式 |
V |
激活面向行的可视模式 |
<C-v> |
激活面向列的可视模式 |
gv |
重选上次的高亮选区 |
在可视模式中, 使用上述其他指令可以切换到相应的可视模式, 使用相同指令或
<Esc>
则退出可视模式, 使用o
可切换高亮选区的活动端
重复执行面向行的可视命令
面向行的可视命令如 >
<
dd
等, 尽量使用 “命令” + “.
” 的方式来执行, 而非盲目使用 R
只要可能, 最好用操作符命令而非可视命令
可视命令会有限定字符长度的陷阱, 如果需要重复执行, 最好不要使用可视模式
用面向列块的可视模式编辑表格数据
这是 vim 比其他编辑器强的一个点
修改列文本
高亮列选区, 此时同时按下操作符, 该操作符将对所有行同时生效, 如 a
c
等
在长短不一的高亮块后添加文本
进入面向列的可视模式后, 按下 $
即可同时到达行尾, 接着进行同时操作
vim 对
A
和I
都存在约定, 可以替代按下$
或0
的操作