-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathchapter02_vim常用指令入门
227 lines (175 loc) · 6.95 KB
/
chapter02_vim常用指令入门
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
前面介绍了像使用记事本一样使用vim,属于牛刀小试,下面继续介绍
vim里面常用的一些指令。为后面的进阶运用做铺垫。下面的指令是通
过在平常不断使用中熟练掌握的,不是通过背诵习得,就像“练习打字”。
[温馨提示]:对于误操作,可以切换到普通模式下,使用指令u来进行撤销。
2.1 光标基本移动
[lab]
针对下面的字符串,在普通模式下使用给定的指令进行操作,观察效果。
- <Enter> / + : 光标移动到下一行非空字符
- - : 光标移动到上一行非空字符
- w : (word)光标停在下一个单词开头, 此处的”单词“包括标点等。
- e : (end)光标停在下一个单词末尾
- b : (before)光标停在上一个单词开头
- W / E / B : 与w/e/b功能类似,但是对于W/E/B而言,以空格分割的
就算”单词“。可以针对前3行英文分别使用w和W指令,
观察效果。
- ( : 前移一行
- ) : 后移一行
- { : 前移一段,空行作为分割标志
- } : 后移一段
- [[: 跳转到上一部分,这里的"部分"一般针对代码块
- ]]: 跳转到下一部分
- []: 跳转到上一部分末尾
- ][: 跳转到下一部分开头
- h / j / k / l : 左下上右
### 上面的指令每次都还只能移动一个单位,作用有限,可以在前面添加
### 一个数值指令,选择移动的规模,如4w,表示前移4个字符。效率翻倍。
"""
# 使用尽可能多的方法,同时使用尽可能简单的指令,将光标移动到字符@处
Here is a tip,and a spear behind it@.
Here is a tip,and a@ spear behind it @.
With tears@,and silence. 123_@__ &&&_
@What is broken can be refoeged!
The cycle of life and death continues,@we@ will live,they will die.
By my will-this shall @ be finished.
Mess with the bull, and you get the horns!
A new moon is rising.
int func1()
{
printf("hello");
}
int func1()
{
printf("hello");
}
int func1()
{
printf("hello");
}
"""
- 0 : 光标移动到行首(包括空白字符)
- ^ : 移动到行首第一个非空白字符
- $ : 移动到行尾
- gg : 移动到文件首行
- {n}G : 光标移动到第n行
- G : 移动到文件末尾
- H : (head)移动到屏幕顶端一行
- M : (middle)移动到屏幕中间一行
- L : 移动到屏幕最底端一行
### 到此为止,光标的基本移动主要活动在当前屏幕内,下面介绍范围更广的翻屏操作。
2.2 翻屏操作
- <C-f> : (foreward)下翻一屏
- <C-b> : (backward)上翻一屏
- <C-d> : (down) 下翻半屏
- <C-u> : (up)上翻半屏
- <C-e> : 向下滚动一行,光标位置不一定改变
- <C-y> : 向上滚动一行
- zz : 将当前行移动到屏幕中央
- zt : (top)将当前行移动到屏幕顶端
- zb : (bottom)将当前行移动到屏幕底端
- n% : 到文件n%的位置
[温馨提示]:在阅读过程中,尽量不去触碰鼠标,而是使用提到的快捷键操作,
能掌握多少就算多少,记住82法则,类似于20%的指令才是最常用的指令。
2.3 插入文本
- i : 在光标前插入;一个多重拷贝的技巧,{n}i{a-zA-Z}<Esc>
输入需要复制的次数n,再按i键,输入单元字符串,最后按下<Esc>,
就能重复单元字串n次。
- I : 在当前行的第一个非空字符前插入
- a : 在光标后插入
- A : 在当前行的最后插入
- o : 在下面新建一行插入
- O : 在上面新建一行插入
------- 以下是命令行的形式插入文本 -----
- :r filename 在当前位置插入另一个文件的内容
- :{n}r filename 在第n行插入另一个文件的内容
- :r !date 在光标处插入当前时间与日期。
- :r !command 在光标处插入shell指令的结果
[lab]
"""
I have a dream.
Have a good day.
Nice to meet you.
How Are you.
尝试使用最少的按键将下文还原回上文
have dream.
Have a good
How you.
"""
2.4 改写插入
- c{n}w : 改写(删除)光标后1(n)个词。比如c3w表示”cut 3 words“,
这种语义化的快捷键组合在vim里面非常常见,而且是非常
常用的一种技巧,可以尝试把这种思维扩散到其它的快捷键
组合里面,往往会有出乎意料的效果。{n}cw也有同样的效果,
它表示n次cw操作。
想想c{n}W, c{n}b, c{n}B, c{n}e, c{n}E
- c{n}h : 删除光标前n个字符。注意cw删除的是词,ch删除的是字符,
这是因为w移动的单位是词,而h每次只移动一个字符。
同样试试c{n}j, c{n}k, c{n}l
- {n}cc : 删除当前[n]行
- {n}s : 删除光标之后1(n)个字符。因为删除字符的操作太常用了,
而c想删除字符还需要多按一个键 (cl删除字符),因此
vim专门有删除字符的指令s,等价于wl。
- {n}S : 删除1(n)行,此后进入插入模式。
### 上面的指令都被放在改写插入操作里,因为它们在执行完毕以后,原
### 内容得到了删除,同时也自动地由普通模式转为了插入模式,可以直接
### 进行编辑。但是如果想执行删除以后继续保持普通模式,就可以使用
### 指令x。
- {n}x : 删除光标处及其前面的1(n)个字符
- {n}X : 删除光标后面的1(n)个字符
[lab]
"""
删减下面的串从而得到上面串的效果(尽量使用最少按键)
abc aaa bbb
abc aaa bbb ccc ddd eee
abc aaa ccc ddd eee
abc aaa bbb ccc ddd eee
a aaa b ccc ddd e
abc aaa bbb ccc ddd eee
aba bb ddd eee
abc aaa bbb ccc ddd eee
"""
2.5 剪切和复制、粘贴
- d{n}w : 删除1(n)个单词。命令d与c很像,但是执行完d之后仍处于
普通模式,而执行完c指令后就进入了插入模式。同样d可以
和其它指令组合,达到不同的效果。如d{n}l, d{n}h等。
- d0 : 删除当前位置到行首的内容
- d$ : 删除当前位置到行尾的内容
- D : 删除当前位置到行尾的内容
- {n} dd : 删除1(n)行
### 命令行指令
- :m,n d<Enter> 删除m行到n行的内容
- x / X : 剪切
- p : 在光标之后粘贴(能把被d或c等指令删掉的内容粘贴回来)
- P : 在光标之前粘贴
- yy : 复制整行
- Y : 复制整行
- y{n}w, y{n}l, y0, y$ : 猜测一下这些指令的意思
- yG : 复制光标以下所有行
- ygg : 复制光标以上所有行
### 命令行指令
- :m, n y <Enter> 复制m行到n行的内容
[lab] 还原
"""
Have a good day.
He go to school.
I'm working at home.
How are you ?
I'm fine.
xxxxxxHave a good day.
xxxxxxxxxxxxxxx
He go apple to school .xxxxxxxxx
How are xxxxx xxxxxx xxxxxx you ?
"""
2.6 排版
- << : 向左缩进一个shiftwidth
- >> : 向右缩进
- gq : 对选中文字进行重排,即对过长的文字进行断行。(选中文字
指可视化模式下选择的高亮文本)
- gq{n}q : 重排当前行 / 重排n行
- gq{n}j : 重排当前行和下面n行
- gq{n}ap : 重排当前(n)段
- {n}J : 拼接当前行和下1(n)行
### 命令行指令
- :ce 本行文字居中
- :le 本行文字靠左
- :ri 本行文字靠右