因经常需要在 Ubuntu 和 Mac OS 端进行转换,编辑器中快捷键不对应,甚至说一些快捷键找不到好的替代,故编辑器界面改用 Vim,以两端使用同一快捷键。此文整理常用 Vim 命令,不定时更新。
光标操作
移动光标键
h | j | k | l |
---|---|---|---|
左 | 下 | 上 | 右 |
命令模式下
当前行移动光标
命令 | 解释 |
---|---|
0 |
移动到行头 |
$ |
移动到行尾 |
^ |
移动到本行第一个不是 black 的字符位置 |
g_ |
移动到本行最后一个不是 black 的字符位置 |
w |
移动到下一个单词的开头 |
e |
移动到下一个单词的结尾 |
fa |
移动到本行下一个为 a 的字符处,a 可以为任意字符 |
nfa |
移动到本行下 n(1,2,3,4) 个字符为 a 的地方 |
Fa |
跟 fa 一样,反向相反 |
nFa |
很 nfa 一样,反向相反 |
ta |
移动到本行下一个光标为 a 字符的前一个位置 |
nta |
移动到本行下 n(1,2,34)个字符为 a 的前一个位置 |
Ta |
跟 ta 一样,反向相反 |
nTa |
很 nta 一样,反向相反 |
跨行移动光标
命令 | 解释 |
---|---|
nG |
光标定位到第 n 行的行首 |
gg |
光标定位到第一行的行首 |
G |
光标定位到最后一行的行首 |
% |
匹配括号移动,包括(,{,[ 需要把光标先移动到括号上 |
* |
匹配下一个光标当前所在的单词 |
# |
匹配上一个光标当前所在的单词 |
ctrl+f |
查看下一页 |
ctrl+b |
查看上一页 |
复制,粘贴,剪切(删除)
只要记住三个重要的按键y(复制)
,p(粘贴)
,d(剪切,删除)
,通常都会在配合一个按键使用。
- 复制
命令 | 解释 |
---|---|
yw |
复制一个单词 |
ynw |
复制 n 个单词 |
yfa |
复制光标处到下一个 a 的字符处 |
ynfa |
复制光标处到第 n 个 a 的字符处 |
yd |
复制一整行 |
nyy |
复制 n 行 |
y$ |
从光标处复制到本行末尾 |
yH |
复制屏幕显示的第一行文本到光标处所在的行 |
yG |
复制光标所在位置到文本结束位置所有的行 |
- 粘贴
命令 | 解释 |
---|---|
p |
在光标后粘贴 |
P |
大写的 P 的在光标前粘贴 |
- 删除
命令 | 解释 |
---|---|
dw |
删除一个单词 |
dnw |
删除 n 个单词 |
dfa |
删除光标处到下一个 a 的字符处 |
dnfa |
删除光标处到第 n 个 a 的字符处 |
dd |
删除一整行 |
ndd |
删除 n 行 |
d$ |
从光标处删除到本行末尾 |
dH |
删除屏幕显示的第一行文本到光标处所在的行 |
dG |
删除光标所在位置到文本结束位置所有的行 |
- 撤销
命令 | 解释 |
---|---|
u |
撤销刚才的操作 |
ctrl + r |
恢复撤销的操作 |
- 删除字符和替换
命令 | 解释 |
---|---|
x |
删除当前光标所在的字符 |
r |
替换当前光标所在的字符 |
R |
替换模式 |
- 复制、剪切和粘贴到系统剪切板
命令 | 解释 |
---|---|
:reg |
查看寄存器 |
" +(寄存器名) y/d/p |
复制,剪切,粘贴 |
一般系统的剪切板的寄存器名称为 +
。
命令用中文描述为:双引号 + 寄存器名 + 执行的命令(y、d、p)
如果仅仅针对系统剪切板则应该执行的命令是"+y
、"+d
、"+p
可视化模式
命令 | 解释 |
---|---|
v |
字符可视化 |
V |
行可视化 |
ctrl + v |
块可视化 |
可视化模式下操作
命令 | 解释 |
---|---|
y |
复制选中区域 |
d |
删除,剪切选中区域 |
p |
粘贴选中区域 |
r |
替换选中的文本 |
gu |
选中区域转小写 |
gU |
选中区域转大写 |
g~ |
选中区域大小写互转 |
> |
向右缩进一个单位 |
< |
向左缩进一个单位 |
可视化模式v的特殊操作
以下符号只包括””,’’,(),[],{}(双引号 ,单引号,小括号,中括号,大括号),不能匹配中文的对应符号。
命令 | 解释 |
---|---|
v + i + 符号 |
匹配对应符号包裹的内容,不包括符号 |
v + a + 符号 |
匹配对应符号包裹的内容,包括符号 |
块区域模式的特殊操作
使用 Ctrl + v 选中区域后,可使用如下命令插入数据
命令 | 解释 |
---|---|
I |
选中区域前面插入数据 |
A |
选中区域后面插入数据 |
打开文件
- 打开单个文件
1 |
vim file |
- 打开多个文件
1 |
vim file1 file2 ... |
使用这种方式打开文件,显示屏上默认只会出现 file1 这一个文件
切换到命令模式,使用 :ls
查看当前打开的所有文件,使用:bn
切换到第 n 个文件,比如切换到第二个文件就是b2
- 一个显示屏多开文件
1 |
# 打开几个文件就分屏几个文件 |
-
vim 分屏
- 按住 Ctrl + w,然后在按下 s:
ctrl + w s
,当前文件上下分割 - 按住 Ctrl + w,然后在按下 v:
ctrl + w v
,当前文件左右分割 :sp file
:新建文件上下分割:vsp file
:新建文件左右分割
- 按住 Ctrl + w,然后在按下 s:
-
移动光标
- 按住 Ctrl + w,然后加位移键(hjkl 或上下左右)移动到对应位置
-
关闭分屏
- 按住 Ctrl + w,然后按 c,关闭当前分屏
- 按住 Ctrl + w,然后按 q,关闭当前分屏,如果是最后一个则退出 Vim
文件I/O操作
以下均在命令模式下
命令 | 解释 |
---|---|
:w |
保存当前对文件,但是不退出文件 |
:w! |
强制保存当前的文件,但是不退出文件 |
:w file |
保存当前文件到 file 文件中,不打开 file |
:q |
退出文件 |
:q! |
强制退出文件,对文件的修改不保存 |
:qa! |
强制退出所有文件,对所有文件的修改不保存 |
:wq |
保存文件,并退出 |
:x |
保存文件,并退出 |
:e file |
打开 另一个文件 |
:e! |
放弃对文件的所有修改,恢复文件到上次保存的位置 |
:saveas file |
另存为 file,并打开 file |
:n flie |
新建一个文件,名字为 file |
ls 命令(vscode 中么有用)
ls
可以显示当前打开的所有文件,与终端中的 ls
意义类似,例如:
1 |
:ls |
- 第一列,代表文件的
id
,可根据此id
跳转到该文件 - 第二列,
%a
的%
当前光标所在文件,a
表示当前打开的文件,如果打开多个就会有多个a
,#
代表上一个打开的文件。 - 第三列,打开的文件名称,如果有
/
则表示路径。 - 第四列,光标所在的行数。
切换文件命令
命令 | 解释 |
---|---|
:bn |
切换下一个文件 |
:bp |
切换上一个文件 |
:b1 |
切换 id 为 1 的文件,其它 id 同理。 |
:b# |
切换上一个编辑的文件 |
编辑模式
命令 | 解释 |
---|---|
i |
在光标所在位置之前插入文本 |
I |
在光标所在行的行首插入文本 |
a |
在光标所在位置之后插入文本 |
A |
在光标所在行的行尾插入文本 |
o |
在光标所在位置的下一行插入新行,并插入文本 |
O |
在光标所在位置的上一行插入新行,并插入文本 |
s |
删除光标所在处的字符然后插入本文 |
S |
删除光标所在行,并在行首插入文本 |
cw |
删除光标所在处到单词结束的所有字符,并插入文本。 |
文本替换
vim中文本替换的规则如下:
:{作用范围}s/{目标}/{替换}/{替换的标志}
- 作用范围:当前行,全文,选区
- 替换的标志:g(全局替换标志),空替换标志,
i
大小写不敏感查找,I
大小写敏感查找,c
需要确认替换
🌰(例子):
- 将光标所在行的
demo
替换为temp
1 |
:s/demo/temp/g |
- 将全文中的所有
demo
替换为temp
1 |
:%s/demo/temp/g |
- 将行号 n1到 n2 的所有
demo
替换为temp
1 |
:n1,n2s/demo/temp/g |
- 选择区域,在可视模式下选择区域,然后输入
:
,vim 会自动补全'<,'>
1 |
:'<,'>s/demo/temp/g |
- 在全文中查找所有
demo
但是只替换第一个demo
为temp
1 |
:%s/demo/temp |
等等…用好常用的标识符即可,g
, 空
, i
, I
, c
。
其他常用命令
命令 | 解释 |
---|---|
:n |
定位到第 n 行 |
/匹配的字符串 |
关键字查找,n 查看下一个, N 查看上一个 |
:set ic(noic) |
设置不区分大小写(区分大小写),编辑器默认不区分大小写 |
:n1,n2d |
删除 n1 行到 n2 行的文本 |