简介
得益于 vim 的指法,敲起代码来如行云流水。不管是不是写代码,学好vim 指法相当重要,当然最重要的还是为了效率,节省时间做更多其他的事。
小技巧
“工欲善其事,必先利其器”。在 Vi/Vim 版本的选择上,原则是“能用 Vim 就不要使用 Vi”。Vim 提供的功能和特性要比 Vi 多得多,如语法加亮着色功能等。就使用效果及效率来说,编辑同样的文件,使用 Vim 更胜一筹;就版本来说,新版的往往会修复旧版的一些缺陷及不足。这就要求我们在可能的情况下一定要使用最新版的 Vim。
启动及关闭
- 退出
- ZQ 无条件退出
- q!无条件退出
- ZZ 存盘并退出
- :wq 存盘并退出
- 保存部分文件
- :m,nw < file>将 m 行到 n 行部分的内容保存到文件 中
- :m,nw >> 将 m 行到 n 行的内容添加到文件 的末尾
- 保存文件
- :w
教程篇
默认的 vim 是没有显示行数的,可自行在 vim 配置文件里开启(自行Google)
Vi/Vim 中操作单位有很多,按从小到大的顺序为(括号内为相应的操作命令):字符(h、l)→ 单词 (w、W、b、B、e) → 行 (j、k、0、^、、:n) → 句子((、))→ 段落({、})→ 屏 (H、M、L) → 页(Ctrl-f、Ctrl-b、Ctrl-u、Ctrl-d) → 文件(G、gg、:0、:)。
- 字符
- h左移一位,l右移一位
- 单词
- w/W 移动到下一单词的开头
- b/B 移动到上一单词的开头
- e/E 移动到光标所在单词的末尾
- f 快速移动到下一个字符的位置
- 行
- j 下移一行
- k 上移一行
- 0 移到当前行开头
- ^ 移到当前行的第一个非空字符
- $ 移到当前行末尾
- :n 移动到第 n 行
- 句子
- ) 移动到当前句子的末尾
- ( 移动到当前句子的开头
- 段落
- } 移动当前段落的末尾
- { 移到当前段落的开头
- 屏
- H 移动到屏幕的第一行
- M 移动到屏幕的中间一行
- L 移动到屏幕的最后一行
- 页
- Ctrl-f 向前滚动一页
- Ctrl-b 向后滚动一页
- Ctrl-u向前滚动半页
- Ctrl-d 向后滚动半页
- 文件
- G 移动到文件末尾
- gg 移动到文件开头
- :0移动到文件第一行
- :$ 移动到文件最后一行
文本编辑
与光标移动一样,Vi/Vim 中关于编辑操作的命令也比较多,但操作单位要比移动光标少得多。按从小到大的顺序为(括号内为相应的操作命令):字符 (x、c、s、r、i、a)→ 单词 (cw、cW、cb、cB、dw、dW、db、dB) → 行 (dd、d0、d$、I、A、o、O) → 句子((、))→ 段落({、})。这些操作单位有些可以加操作次数。操作对象的范围计算公式为:操作范围 = 操作次数 * 操作单位。比如:d3w 命令删除三个单词,10dd 命令删除十行。
- 字符
- x 删除光标位置的字符
- c 更改当前字符并进入插入模式
- s 替换光标位置的字符并进入插入模式
- r 替换光标位置的字符但不进入插入模式
- i 在当前位置的字符之前进入插入模式
- a 在当前位置的字符之后进入插入模式
- 单词
- cw/cW 删除当前单词从光标开始的部分并进入插入模式
- cb/cB 删除当前单词从光标所在位置至单词开始的部分并进入插入模式
- dw/dW 删除当前单词从光标开始的部分但不进入插入模式
- db/dB 删除当前单词从光标所在位置至单词开始的部分但不进入插入模式
- 行
- dd 删除当前行
- d0 删除从当前光标开始到行末的内容
- d$ 删除从当前光标开始到行末的内容
- I 在当前行的行首进入插入模式
- A 在当前行的行尾进入插入模式
- o 在当前行下方另起一行进入插入模式
- O 在当前行上方另起一行进入插入模式
- 句子
- d) 删除当前句子从光标位置开始到句末的内容
- d( 删除当前句子从光标位置开始到句首的内容
- 段落
- d} 删除当前段落从光标位置开始到段末的内容
- d{ 删除当前段落从光标位置开始到段首的内容
文本编辑的高效命令
- 复制与粘贴
- yw 复制当前单词从光标开始的部分
- yy 复制光标所在行的所有字符
- p 将最后一个删除或复制文本放在当前字符
- P 将最后一个删除或复制文本放在当前字符之前
- 撤消与重做
- u 撤消更改
- Ctrl-R 重做更改
- 重复操作
- .重复上次操作
- 交换相邻字符或行
- xp 交换光标位置的字符和它右边的字符
- ddp 交换光标位置的行和它的下一行
- 大小写转换
- ~ 将光标下的字母大小写反向转换
- guw 将光标所在的单词变为小写
- guw 将光标所在的单词变为小写
- gUw 将光标所在的单词变为大写
- guu 光标所在的行所有字符变为小写
- gUU 光标所在的行所有字符变为大写
- g~~ 光标所在的行所有字符大小写反向转换
- 排序
- :1,$!sort 将文件内的所有内容排序
other
先定单位再定量
操作对象的范围计算公式为:操作范围 = 操作次数 * 操作单位。比如:5h 命令左移 5 个字符,8w 命令右移 8 个单词。