Vim 常用的模式有四种:
普通模式:Vim 启动后的默认模式,用来移动光标、删除文本、覆盖输入文本、恢复操作、粘贴文本等等。
插入模式:输入 i 或 a 进入插入模式,在这个模式下敲击键盘会往文字缓冲区增加文字,相当于普通编辑器的编辑模式。
可视模式:选择文本,可以行选、块选和依次选择,选择后可以进行复制、删除、排序等操作。
命令模式:执行内部和外部命令,通过 “:”“/”“?”“:!” 可以进入命令模式,分别对应的是:执行内部命令、向上或向下搜索、执行外部命令。
重复操作
- . 命令可以让我们重复上次的修改,它是Vim中最为强大的多面手。
- yyp 复制当前行
删除
插入
- i在光标之前,进入插入模式
- I在本行开头,进入插入模式
- a在光标之后,进入插入模式
- A在本行结尾,进入插入模式
- o在本行之后新增一行,并进入插入模式
- O在本行之前新增一行,并进入插入模式
- s删除当前字符,并进入插入模式
- S删除当前行中的所有文本,并进入插入模式
恢复
- u撤销上次的修改
移动
- $ 移动到末尾(光标前)
- a移动到末尾(光标后)
- b 移动到单词的首端
- 0 跳转到行首
gg 命令跳转到开头
行移动
- 下移一行
- j
- 下移十行
- 10j
- 下移一行
修改
- 加动作来进行修改(cc 修改整行);C 则相当于 c$,删除到行尾然后进入插入模式。
- s 相当于 cl,删除一个字符然后进入插入模式;S 相当于 cc,替换整行的内容。
- i 在当前字符前面进入插入模式;I 则相当于 ^i,把光标移到行首非空白字符上然后进入插入模式。
- o 在当前行下方插入一个新行,然后在这行进入插入模式;O 在当前行上方插入一个新行,然后在这行进入插入模式。
- u撤销最近的一个修改动作;U 撤销当前行上的所有修改
- r 替换光标下的字符;R 则进入替换模式,每次按键(直到 )替换一个字符。
退出
- 无条件退出
- :q! / ZQ
- 存盘并退出
- :wq / ZZ
重复操作
; 重复最近的字符查找(f、t 等)操作
, 重复最近的字符查找操作,反方向
n 重复最近的字符串查找操作(/ 和 ?)
N 重复最近的字符串查找操作(/ 和 ?),反方向
. 重复执行最近的修改操作
删除前一个字符。删除前一个单词,删除至行首,删除至末尾
切换到普通模式
- dd删除
- .重复上次的操作
G会增加从当前行到文档末尾处的缩进层级
h 左移一列
- l 右移一列
- j 下移一行
- k 上移一行
- 0 移动到屏幕行的行首
- $移动到实际行的行尾
- w 正向移动到下一单词的开头
- b 反向移动到当前单词/上一个单词的开头
- e 正向移动到当前单词/下一单词的结尾
- % 在()之间的跳转
- :q! 放弃更改
- :%s/源字符串/目的字符串/g 全局批量替换字符串
先定单位再定量
操作对象的范围计算公式为:操作范围 = 操作次数 * 操作单位。比如:5h 命令左移 5 个字符,8w 命令右移 8 个单词。
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 移动到光标所在单词的末尾 | W、B、E 命令操作的单词是以空白字符(空格、Tab)分隔的字串,比如字符串“str1-str2 str3-str4”,对 W、B、E 命令来说是两个单词,而对 w、b、e 命令来说则是四个单词。 |
行 | j 下移一行 k 上移一行 0 移到当前行开头 ^ 移到当前行的第一个非空字符 $ 移到当前行末尾 :n 移动到第 n 行 | 0 为数字零(zero) |
句子 | ) 移动到当前句子的末尾 ( 移动到当前句子的开头 |
TODO
- 回到标记的位置