简明 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@@ 


京公网安备 11010502036488号