一、移动光标
字符级
命令 | 功能 |
---|---|
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 模式。
删除(并将删除的内容保存至 vim 剪贴板)
命令 | 功能 |
---|---|
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
命令
:%s/s.t/SET
:%s/s.t/SET/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> | 删除需要关闭的缓冲区文件 |
after :bn
三、其他技巧
缩进
-
>>
向右缩进当前行 -
<<
向左缩进当前行 -
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
键可随时退出底线命令模式。
网友评论