简明 vim 练级攻略
(1) 存活
(2) 感觉良好
(3) 觉得更好、更快、更强
(4) vim 超能力
第一级别:在 Normal 模式下生存:
(1) i: insert
(2) a: add
(3) ESC: 回到 Normal 模式
(4) x: 删除当前光标所在的一个字符
(5) dd: 删除当前行,并存到剪贴板里
(6) p: 粘贴剪贴板
(7) 方向键:hjkl、或、上下左右
h: 左
l: 右
j: 下
k: 上
10j, 5k, 4h
第二级别:
(1) 各种插入模式
大写字符是在之前的操作,小写字符是在之后的操作
a: 光标后插入
o: 在当前行后插入一个新行
O: 在当前行前插入一个新行
cw: 替换从光标所在位置后到一个单词结尾的字符
其实是先删除,然后再进入 insert 模式
(2) 光标移动
0: 到行头 ^: 到行头(和 0 差一个字符) $: 到行尾 g_: 到本行最后一个不是 blank 字符的位置(和$类似) /flag: 搜索 flag 字符串(如果有多个,按 n 键到下一个) (3) 剪切复制粘贴 dd、p、yy、u (4)同时打开多个文件时: :bn :bp :n 来切换到下一个、或上一个文件 单词的定义: 程序变量:一个单词由字母、数字和下划线组成 程序语句:由 blank 字符分隔符(程序语句) 第三级:更好、更快、更强 (1) 重复 . 重复上一次命令 N<command> 重复N次 3p 2dd 100ihello[ESC] (2) 光标移动 行移动 :xx, NG, gg, G:到第xx行、第N行、第一行、最后一行 按单词移动: w: 到下一个单词的开头 e: 到下一个单词的结尾 匹配形式移动: %: 匹配括号移动,包括(, [, {, 需要把光标先移到括号上 * 和 #: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词 * 是下一个,# 是上一个 更快 很多命令可以和移动光标的命令连动:<start position><command><end position> 0y 先到行头,从这里开始拷贝,拷贝到本行最后一个字符 ye 从当前位置拷贝到本单词的最后一个字符 y2/foo 拷贝两个"foo"之间的字符串 第四级:超能力 在当前行上移动光标: 0 行头 ^ 本行的第一个非 blank 字符 $ 行尾 g_ 本行最后一个不是 blank 字符的位置 fa 到下一个为 a 的字符处 fS 到下一个为 S 的字符处 3fa 在当前行查找第三个出现的 a F和T 和f和t一样,相反方向 大写字母的功能是向前,小写字母的功能是向后 dt" 在当前行内,删除所有的内容,直到遇到双引号" df" 功能类似,在实验中看结果 dd 删除当前光标所在的行 d1[Enter], d2[Enter], d3[Enter] 删除当前光标之下的2,3,4行(包括当前光标行) 3dd, 4dd, 5dd 删除当前光标之下的3, 4, 5行 (包括当前光标行) 区域选择<action>a<object> 或 <action>i<object> 在 visual 模式下 action 可以是任何的命令,如 d, y, v object 可能是 w(一个单词), W(一个以空格为分割的单词), s(一个句子), p(一个段落), 一个特别的字符" ' ) } ]等 举例 当前字符串 (map (+)("foo")) visual 模式,光标键在第一个 o 的位置 vi" -> foo va" -> "foo" vi) -> "foo" va) -> ("foo") v2i) -> map (+)("foo") v2a) -> (map (+)("foo")) i 是不选择当前字符的匹配 a 是选择当前字符的匹配 块操作: 0 <C-v> <C-d> I-- [ESC] ^ <C-v> hjkl选中块 x [ESC] 自动提示: Insert 模式下,<C-n> 和 <C-p> 自动补全提示 宏录制: qa 把操作记录在寄存器 a @a 会 replay 被录制的宏 @@ 是一个快捷键用来 replay 最新录制的宏 举例:在一个只有一行且这一行只有 "1" 的文本中: qaYp<C-a>q qa 开始录制 Yp 复制行 <C-a> 增加 1 q 录制结束 10@a 10@@