一、移动光标
字符级
命令 | 功能 |
---|---|
h |
向 左 移动一个字符单位 |
l |
向 右 移动一个字符单位 |
j |
向 下 移动一个字符单位 |
k |
向 上 移动一个字符单位 |
单词级
命令 | 功能 |
---|---|
w/W |
向 右 移动到下一单词开头 |
e/E |
向 右 移动到单词结尾 |
b/B |
向 左 移动到单词开头 |
PS:所谓“单词”,是按照英文的书写和使用习惯来定义的。用在中文上,一般就会以标点符号和空格作为“单词”的界限。所以常常是一句话一句话地跳转。
块级
命令 | 功能 |
---|---|
0 |
移动到当前行的第一个字符 |
^ |
移动到当前行第一个非空白字符 |
$ |
移动到当前行行尾 |
+ |
移动到下一行的首字母 |
- |
移动到上一行的首字母 |
gg |
移动到文档第一行 |
G |
移动到文档最后一行 |
H |
移动到当前屏幕的第一行 |
M |
移动到当前屏幕的中间一行 |
L |
移动到当前屏幕的最后一行 |
:<n> 或 <n>gg |
跳转到第 n 行 |
:+<n> 或 <n>j |
从当前位置向下跳 n 行 |
:-<n> 或 <n>k |
从当前位置向上跳 n 行 |
滚动屏幕
命令 | 功能 |
---|---|
Ctrl-d |
向下滚动半页 |
Ctrl-u |
向上滚动半页 |
Ctrl-f |
向下移滚动一页 |
Ctrl-b |
向上滚动一页 |
z<Enter> |
将当前行滚动到屏幕顶部 |
z. |
将当前行滚动到屏幕中间 |
z- |
将当前行滚动到屏幕底部 |
PS:绝大部分命令前都可以加一个数字 n ,通常表示对其后的命令连续执行 n 次。所以 3j
可以表示向下移动 3 个字符单位(即下移 3 行)。3l
表示向右移动 3 个字符单位。相当于连续执行了 l
命令 3 次。
而 9z.
则表示光标移动到第 9 行的同时,滚动屏幕并使得第 9 行位于屏幕中间。(这个 9
的含义不同于 3l
命令中的 3
)
前面带冒号的命令(如 :+<n>
,命令内容会显示在底部)是需要手动输入回车后才执行的。而不带冒号的命令(如 <n>gg
)需要在键盘上不间断地按下,之后命令会自动执行。
二、文档操作
插入
命令 | 功能 |
---|---|
i |
当前字符前插入 |
a |
当前字符后插入 |
I |
行首插入 |
A |
行尾插入 |
o |
在下一行插入 |
O |
在上一行插入 |
PS:以上命令会使 vim 进入 insert 模式(即编辑模式),此时输入的任何命令都会作为字符插入到文档中。
按 esc
键可退出 insert 模式。
删除
命令 | 功能 |
---|---|
x |
删除当前字符(等于 insert 模式下的 Delete) |
X |
删除前一个字符(等于 insert 模式下的 Backspace) |
dd |
删除当前行 |
d<x> |
删除指定内容 |
D |
删除当前光标位置到行尾的所有内容。等于 d$ |
cc |
替换整行内容。即将整行内容删除并进入 insert 模式 |
c<x> |
删除指定内容后,进入 insert 模式。相当于 d<x>a |
C |
替换当前光标位置到行尾的所有内容。等于 c$ |
<x>
部分用于指定删除的范围。
如 j
表示将光标向下移动一个字符单位(即下移一行),则 dj
表示删除当前行和下一行的内容。G
表示将光标移动到文档末尾,则在光标定位在文档首行时,使用 dG
命令可以清空整个文档的内容。
PS:使用以上命令删除的内容会自动保存到 vim 的剪贴板中,即所谓“删除”实际上是“剪切”,使用 p
命令即可粘贴删除的内容。而且该剪贴板限于 vim 内部,不是系统剪贴板。
复制与粘贴
命令 | 功能 |
---|---|
yy |
复制当前内容到 vim 剪贴板 |
y<x> |
复制指定内容到 vim 剪贴板 |
p |
在当前位置后粘贴 |
P |
在当前位置前粘贴 |
J |
将当前行与下一行内容合并为一行 |
y<x>
命令中的 <x>
同样用于指定复制的范围。
如 4j
表示将光标下移 4 行,则 y4j
表示将当前行及其后 4 行内容复制到 vim 剪贴板。8gg
表示将光标定位至第 8 行,则 y8gg
表示复制当前行到第 8 行的所有内容。
当 vim 剪贴板中的内容为整行时,则粘贴命令(p/P
)执行时,也会变成在当前行的前(后)一行粘贴。
查找
行内查找
命令 | 功能 |
---|---|
f<x> |
当前行向行尾方向查找并定位到字符 x |
F<x> |
当前行向行首方向查找并定位到字符 x |
t<x> |
当前行向行尾方向查找并定位到字符 x 之前 |
T<x> |
当前行向行首方向查找并定位到字符 x 之后 |
; |
继续向当前方向查找下一个字符 |
, |
向当前方向的相反方向查找下一个字符 |
文档内查找
命令 | 功能 |
---|---|
* |
向后查找光标当前所在单词 |
# |
向前查找光标当前所在单词 |
/<pattern> |
向后查找指定字符串或模式 |
?<pattern> |
向前查找指定字符串或模式 |
n |
继续查找下一个(依照原方向继续查找) |
N |
继续查找上一个(依照原方向进行反向查找) |
PS:vim 中可使用 %
对括号 ()[]{}
进行匹配查找,当光标位于其中一个符合上时,按下 %
会跳转到与之匹配的另外一个符合上。
替换
命令 | 功能 |
---|---|
r<x> |
将当前字符替换为字符 x |
s |
删除当前字符并进入 insert 模式 |
R |
进入 replace 模式,逐字对当前字符进行替换操作,可以移动光标定位需要替换的字符。直到按下 ESC 键退出该模式 |
~ |
对当前字符进行大小写切换(即大写转小写,小写转大写) |
gu<x> |
将指定的文本转换为小写 |
gU<x> |
将指定的文本转换为大写 |
g~<x> |
将指定文本进行大小写切换 |
:<n1>,<n2>s/<pattern>/<replace> |
以某个模式(pattern)检索整个文档,并将第 n1 行到第 n2 行中的匹配项替换为指定内容(replace) |
:%s/<pattern>/<replace> |
以某个模式(pattern)检索整个文档并将匹配项替换为指定内容(replace)。等同于 :1,$s/<pattern>/<replace> |
PS::%s/<pattern>/<replace>
命令中的 <pattern>
可以是正则表达式,且该命令只替换每行中的第一个匹配项。如需要全局匹配,可以使用 :%s/<pattern>/<replace>/g
命令
撤销、重做
命令 | 功能 |
---|---|
. |
重复执行上一次的命令 |
u |
撤销 |
U |
撤销对当前行的所有操作 |
Ctrl-r |
重做 |
打开、关闭文档
命令 | 功能 |
---|---|
:e <filename> |
打开名为 filename 的文件,如文件不存在则创建 |
:Ex |
在 vim 中打开目录树,光标选定后回车打开对应文件(- 命令进入上级目录) |
:w |
保存当前文件 |
:wa |
保存全部文件 |
:wq 或 ZZ |
保存文件并退出 vim |
:q! 或 ZQ |
强制退出 vim ,不保存文件 |
:r <filename> |
读入另一个文档(filename)的数据,并将其内容附加到当前文档光标所在行的后面 |
:saveas <new_filename> |
文件另存为 |
:w <new_name> |
另存为一份名为 new_name 的副本并继续编辑原文件 |
:<n1>,<n2>w <new_name> |
将 n1 行到 n2 行的所有内容保存到名为 new_name 的新文档中 |
buffer缓冲区
Buffer(缓冲区)指 vim 中打开的文件所占的内存空间,当未写入磁盘时,所有的修改都发生在内存中。vim 打开过的每个文件都会放到一个 Buffer 中,可以随意切换已打开的 Buffer。
命令 | 功能 |
---|---|
:ls 或 :buffers |
查看 buffer 列表 |
:bn |
打开缓冲区中下一个文件 |
:bp |
打开缓冲区中上一个文件 |
:b<n> |
打开缓冲区中第 n 个文件 |
:bdelete<n> |
删除需要关闭的缓冲区文件 |
三、其他技巧
缩进
>>
向右缩进当前行<<
向左缩进当前行4>>
向右缩进当前行的同时,缩进当前行下面的 3 行内容>G
向右缩进当前行到文档末尾的所有内容
自动排版
==
自动排版当前行gg=G
自动排版整个文档<n>==
对从当前行开始的 n 行进行自动排版=<n>j
对当前行以及下面的 n 行进行自动排版
执行 shell 命令
:!<command>
可以执行相应的 shell 命令,命令执行完成后按 Enter
回到 vim 界面。
如使用 :1,9!sort
命令可以将当前文件中第 1 行到第 9 行的内容重新排序。:r !<command>
可以将相应 shell 命令执行后的输出读取到当前文件中。
如使用 :r !date
命令可以将当前详细的时间日期插入到 vim 编辑的文件中。
四、分屏与标签页
窗口分屏
- 分屏方式
:split
或:sp
或Ctrl-w s
:上下分屏:vsplit
或:vs
或Ctrl-w v
:左右分屏:diffsplit
或:diffs
:diff 模式打开一个分屏,后面可以加<filename>
- 窗口跳转
Ctrl-w w
:激活下一个窗口Ctrl-w j
:激活下方窗口Ctrl-w k
:激活上方窗口Ctrl-w h
:激活左侧窗口Ctrl-w l
:激活右侧窗口
- 屏幕缩放
Ctrl-w =
:平均窗口尺寸Ctrl-w +
:增加当前窗口高度Ctrl-w -
:缩减窗口高度Ctrl-w _
:最大窗口高度Ctrl-w >
:增加窗口宽度Ctrl-w <
:缩减窗口宽度Ctrl-w |
:最大窗口宽度
标签页
- 创建标签页
:tabnew
或:tabedit
或:tabe
:打开新标签页
该命令包括上面的分屏命令(:sp
或:vs
等)后面都可以跟<filename>
选项,用以在新标签页(或窗口)中打开指定文件 - 切换标签页
gt
或:tabnext
或:tabn
:切换到下一个标签页(最后一个会循环到第一个)gT
或:tabprevious
或:tabp
:切换到上一个标签页:tabrewind
或:tabr
或:tabfir
:切换到第一个标签页:tablast
或:tabl
:切换到最后一个标签页
- 关闭标签页
:tabclose
或:tabc
:关闭当前标签页:-tabc
:关闭上一个标签页:+tabc
:关闭下一个标签页:tabonly
或:tabo
:关闭其他标签页
附录:vim 模式介绍
大致上 vim 分为三种模式,分别是命令模式(Command mode),编辑模式(Insert mode)和底线命令模式(Last line mode)。
1. 命令模式
vim 启动即进入命令模式。此时敲击键盘动作会被识别为命令,而不是作为字符插入到文档中。如:
i
切换到输入模式(在当前字符前插入):
切换到底线命令模式,此时输入的命令显示在最底下一行, : 符号后面
命令模式下只有一些最基本的命令,而底线命令模式下拥有更多的命令。
2. 编辑模式
在命令模式下键入 i
(或 a
、e
等)即进入编辑模式
在编辑模式下,可以像在记事本中那样,使用键盘输入或修改文档内容。注意编辑完成时,可使用 ESC
键退出编辑模式,回到命令模式。
3. 底线命令模式
在命令模式下按下 :
即进入底线命令模式
该模式下可以输入单个或多个字符的命令,以完成比命令模式下更复杂的操作(如 :wq
保存文件并退出)
按 ESC
键可随时退出底线命令模式。