o
|
i<--当前光标-->a
I<------------- | ------------------>A
O
上k 下j 左h 右l
w(小写) -> 词组正向跳转到下一个单词开始 (以空格和符号作为分隔)
W(大写) -> 词组正向跳转到下一个单词开始 (以空格作为分隔)
e(小写) -> 词组正向跳转到下一个单词结尾 (以空格和符号作为分隔)
E(大写) -> 词组正向跳转到下一个单词结尾 (以空格作为分隔)
b(小写) -> 词组反向跳转(以空格和符号作为分隔)
B(大写) -> 词组反向跳转(以空格作为分隔)
f(小写)+指定字符 -> 正向跳转至指定字符
F(大写)+指定字符 -> 反向跳转至指定字符
t(小写)+指定字符 -> 正向跳转指定字符的上一个位置(空格也算)
T(大写)+指定字符 -> 反向跳转指定字符的下一个位置(空格也算)
yy -> 复制当前行
p -> 在光标所在位置向下新开辟一行,粘贴
yyp -> 当前行复制并粘贴
10p -> 粘贴10次
v -> 选中当前光标(再通过上下左右kjhl进行区域选中)
V(大写) -> 选中当前光标所在行(再通过上下左右kjhl进行区域选中)
dd -> 删除当前行
5dd -> 删除当前行在内的以下的5行
d -> 删除选中的区域 例如vjjd进行区域的删除
u -> 撤销
ctrl+r -> 反撤销 idea内暂时不支持
x(小写) -> 正向按字符单位进行删除 向右删除
X(大写) -> 反向按字符单位进行删除 向做删除
df+指定字符 -> 从光标处删除至指定字符
di" -> 删除引号内的内容
da" -> 删除包括引号在内的内容
gg -> 跳转至文件头
G -> 跳转至文件尾
行号+G -> 跳转到指定行的开头(:N 到第N行,如 :137 到第137行)
:wq -> 存盘+退出 (:w 存盘, :q 退出)(:w 后可以跟文件名)
cw -> 替换从光标所在位置后到一个单词结尾的字符
0(数字0) -> 到行头
^ -> 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ -> 到本行行尾
g_ -> 到本行最后一个不是blank字符的位置。
/pattern -> 搜索 pattern的字符串(如果搜索出多个匹配,可按n键到下一个 N键到上一个)
:e <path/to/file> -> 打开一个文件
.(小数点) -> 可以重复上一次的命令
* -> 跳转至下一个与当前光标相同字符的位置(可以跨行跳转)
# -> 跳转至上一个与当前光标相同字符的位置(可以跨行跳转)
% -> 匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)
{ -> 按段移动,上移
} -> 按段移动,下移
D -> 删除光标后本行所有内容,包含光标所在字符
d0 -> 删除光标前本行所有内容,不包含光标所在字符
dw -> 删除光标开始位置的字,包含光标所在字符
>> -> 文本行右移
<< -> 文本行左移
r -> 替换当前字符
R -> 替换当前行光标后的字符
:%s/abc/123/g -> 末行模式下,将当前文件中的所有abc替换成123
:1, 10s/abc/123/g -> 末行模式下,将第一行至第10行之间的abc替换成123
- +或Enter: 把光标移至下一行第一个非空白字符。
- -: 把光标移至上一行第一个非空白字符。
一些按键
- gd: 跳转到局部变量的定义处;
- gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;
- g;: 上一个修改过的地方;
- g,: 下一个修改过的地方;
- [[: 跳转到上一个函数块开始,需要有单独一行的{。
- ]]: 跳转到下一个函数块开始,需要有单独一行的{。
- []: 跳转到上一个函数块结束,需要有单独一行的}。
- ][: 跳转到下一个函数块结束,需要有单独一行的}。
- [{: 跳转到当前块开始处;
- ]}: 跳转到当前块结束处;
- [/: 跳转到当前注释块开始处;
- ]/: 跳转到当前注释块结束处;
- %: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。
下面的括号匹配对编程很实用的。
- ci’, di’, yi’:修改、剪切或复制’之间的内容。
- ca’, da’, ya’:修改、剪切或复制’之间的内容,包含’。
- ci”, di”, yi”:修改、剪切或复制”之间的内容。
- ca”, da”, ya”:修改、剪切或复制”之间的内容,包含”。
- ci(, di(, yi(:修改、剪切或复制()之间的内容。
- ca(, da(, ya(:修改、剪切或复制()之间的内容,包含()。
- ci[, di[, yi[:修改、剪切或复制[]之间的内容。
- ca[, da[, ya[:修改、剪切或复制[]之间的内容,包含[]。
- ci{, di{, yi{:修改、剪切或复制{}之间的内容。
- ca{, da{, ya{:修改、剪切或复制{}之间的内容,包含{}。
- ci<, di<, yi<:修改、剪切或复制<>之间的内容。
- ca<, da<, ya<:修改、剪切或复制<>之间的内容,包含<>。
5. 插入文本
5.1 基本插入
- i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+<esc>就插入了36个+组成的分割线。
- I: 在当前行第一个非空字符前插入;
- gI: 在当前行第一列插入;
- a: 在光标后插入;
- A: 在当前行最后插入;
- o: 在下面新建一行插入;
- O: 在上面新建一行插入;
- :r filename在当前位置插入另一个文件的内容。
- :[n]r filename在第n行插入另一个文件的内容。
- :r !date 在光标处插入当前日期与时间。同理,:r !command可以将其它shell命令的输出插入当前文档。
5.2 改写插入
- c[n]w: 改写光标后1(n)个词。
- c[n]l: 改写光标后n个字母。
- c[n]h: 改写光标前n个字母。
- [n]cc: 修改当前[n]行。
- [n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
- [n]S: 删除指定数目的行,并以所输入文本代替之。
注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。
s - 删除光标所在字符并进入插入模式
S - 删除光标所在行并进入插入模式
c< 范围> - 删除光标所在位置周围某个范围的文本并进入插入模式。关于范围请看第5点,常用的组合有:caw - 删除一个单词包括它后面的空格并开始插入; ciw - 删除一个单词并开始插入; ci" - 删除一个字符串内部文本并开始插入; c$ - 从光标位置删除到行尾并开始插入; ct+字符 - 从光标位置删除本行某个字符之前(保留该字符)并开始插入;cf+字符 - 从光标位置删除本行某个字符之前(不保留该字符)并开始插入。等等。
C - 删除光标位置到行尾的内容并进入插入模式 (相当于c$)
r - 修改光标所在字符,然后返回普通模式
R - 进入覆盖模式
6. 剪切复制和寄存器
6.1 剪切和复制、粘贴
- [n]x: 剪切光标右边n个字符,相当于d[n]l。
- [n]X: 剪切光标左边n个字符,相当于d[n]h。
- y: 复制在可视模式下选中的文本。
- yy or Y: 复制整行文本。
- y[n]w: 复制一(n)个词。
- y[n]l: 复制光标右边1(n)个字符。
- y[n]h: 复制光标左边1(n)个字符。
- yor D: 删除(剪切)当前位置到行尾的内容。
- d[n]w: 删除(剪切)1(n)个单词
- d[n]l: 删除(剪切)光标右边1(n)个字符。
- d[n]h: 删除(剪切)光标左边1(n)个字符。
- d0: 删除(剪切)当前位置到行首的内容
- [n] dd: 删除(剪切)1(n)行。
- :m,nd<cr> 剪切m行到n行的内容。
- d1G或dgg: 剪切光标以上的所有行。
- dG: 剪切光标以下的所有行。
- daw和das:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
- d/f<cr>:这是一个比较高级的组合命令,它将删除当前位置 到下一个f之间的内容。
- p: 在光标之后粘贴。
- P: 在光标之前粘贴。
6.2 文本对象
- aw:一个词
- as:一句。
- ap:一段。
- ab:一块(包含在圆括号中的)。
y, d, c, v都可以跟文本对象。
6.3 寄存器
- a-z:都可以用作寄存器名。”ayy把当前行的内容放入a寄存器。
- A-Z:用大写字母索引寄存器,可以在寄存器中追加内容。 如”Ayy把当前行的内容追加到a寄存器中。
- :reg 显示所有寄存器的内容。
- “”:不加寄存器索引时,默认使用的寄存器。
- “*:当前选择缓冲区,”*yy把当前行的内容放入当前选择缓冲区。
- “+:系统剪贴板。”+yy把当前行的内容放入系统剪贴板。
13.8 多行缩进缩出
- 正常模式下,按两下>;光标所在行会缩进。
- 如果先按了n,再按两下>;,光标以下的n行会缩进。
- 对应的,按两下<;,光标所在行会缩出。
- 如果在编辑代码文件,可以用=进行调整。
- 在可视模式下,选择要调整的代码块,按=,代码会按书写规则缩排好。
- 或者n =,调整n行代码的缩排。
1.1 Vim的几种模式
- 正常模式:可以使用快捷键命令,或按:输入命令行。
- 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。
- 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。
- 替换模式:正常模式下,按R进入。
4.2 翻屏
- ctrl+f: 下翻一屏。
- ctrl+b: 上翻一屏。
- ctrl+d: 下翻半屏。
- ctrl+u: 上翻半屏。
- ctrl+e: 向下滚动一行。
- ctrl+y: 向上滚动一行。
- n%: 到文件n%的位置。
- zz: 将当前行移动到屏幕中央。
- zt: 将当前行移动到屏幕顶端。
- zb: 将当前行移动到屏幕底端。