您现在的位置是:网站首页>技术百科技术百科
Vim教程
小大寒2024-01-01[技术百科]博学多闻
Vim教程本文介绍了Vim中的宏操作、可视化选择和分屏功能。通过录制和重放宏,用户可以高效地重复操作;可视化模式下,支持批量编辑和缩进;分屏功能帮助用户在多个视图中同时工作。学习Vim需要不断实践和训练。《原文》
Vim教程
您想以最快的方式自学 vim(人类已知最好的文本编辑器)。这是我的学习方法:您可以先学习最基础的生存技能,然后慢慢地整合所有技巧。
Vim——六百万美元的编辑器
更好、更强、更快。
学习 vim,它将成为您最后一个文本编辑器。我不知道有比它更好的编辑器。学习它很难,但使用它令人难以置信。
我建议您按照以下四个步骤自学 Vim:
- 生存
- 感到舒适
- 变得更好、更强、更快
- 使用 vim 的超级能力
完成这段旅程后,您将成为一名 vim 的超级明星。
但在开始之前,有一个警告:学习 vim 起初会很痛苦。这需要时间。这很像学习一件乐器。不要期望在不到三天内使用 vim 比其他编辑器更高效。实际上,这肯定需要两周而不是三天。
第一阶段 – 生存
- 安装 vim
- 启动 vim
- 什么都不要做!先阅读。
在普通编辑器中,键盘输入就足以写点东西并在屏幕上显示。而这次不一样。Vim 是处于普通模式的。我们需要切换到插入模式。按下字母 i
。
您应该感觉好一些了。现在可以像普通编辑器一样输入字母了。要回到普通模式,只需按下 ESC
键。
现在,您已经知道如何在插入模式和普通模式之间切换。以下是在普通模式中生存所需的命令:
i
→ 进入插入模式。按下ESC
回到普通模式。x
→ 删除光标下的字符:wq
→ 保存并退出(:w
保存,:q
退出)dd
→ 删除(并复制)当前行p
→ 粘贴推荐:
hjkl
(强烈推荐,但非必需)→ 基本光标移动(←↓↑→)。提示:j
看起来像向下的箭头。:help <command>
→ 显示关于<command>
的帮助。您也可以直接使用:help
查看通用帮助。
仅需 5 个命令。这就是您开始的全部所需。当这些命令变得自然(可能一天左右),您就可以进入第二阶段了。
不过首先,关于普通模式的一个小备注。在普通编辑器中,要复制通常需要使用 Ctrl
键(通常是 Ctrl-c
)。实际上,当您按下 Ctrl
键时,所有键的意义似乎都发生了变化。而在 vim 的普通模式中,就像编辑器自动为您按下 Ctrl
键一样。
最后关于符号的说明:
- 代替写
Ctrl-λ
,我会写成<C-λ>
。 - 以
:
开头的命令需要以<enter>
结束。例如,当我写:q
时,我的意思是:q<enter>
。
第二阶段 – 感到舒适
你已经掌握了生存所需的命令。现在是时候学习更多命令了。这是我的建议:
-
插入模式的变体:
a
→ 在光标之后插入o
→ 在当前行之后插入新行O
→ 在当前行之前插入新行cw
→ 替换从光标到单词末尾的内容
-
基本移动命令:
0
→ 跳转到行首^
→ 跳转到行中第一个非空字符$
→ 跳转到行尾g_
→ 跳转到行中最后一个非空字符/pattern
→ 搜索pattern
-
复制/粘贴:
P
→ 在当前位置之前粘贴,注意p
是粘贴到当前位置之后。yy
→ 复制当前行,更简单但等同于ddP
-
撤销/重做:
u
→ 撤销<C-r>
→ 重做
-
加载/保存/退出/切换文件(缓冲区):
:e <path/to/file>
→ 打开文件:w
→ 保存:saveas <path/to/file>
→ 保存为<path/to/file>
:x
,ZZ
或:wq
→ 保存并退出(:x
仅在必要时保存):q!
→ 不保存直接退出,另外::qa!
可以退出即使有修改过的隐藏缓冲区。:bn
(或:bp
)→ 显示下一个(或上一个)文件(缓冲区)
花点时间学习这些命令。一旦掌握了这些命令,你应该能够完成其他编辑器中能够完成的所有操作。你可能仍然会觉得有点别扭,但跟随我进入下一个阶段,你会明白为什么 vim 值得额外付出努力。
第三阶段 – 更好、更强、更快
恭喜你走到这里!现在我们可以开始有趣的内容了。在第三阶段,我们只讨论与旧版 vi 编辑器兼容的命令。
更好
让我们看看 vim 如何帮助你重复操作:
.
→ (点号)将重复上一个命令。- N<command> → 将重复执行该命令 N 次。
一些示例,打开文件并输入:
2dd
→ 将删除 2 行。3p
→ 将粘贴文本 3 次。100idesu [ESC]
→ 将写入 “desu” 100 次。.
→ 紧接着上一个命令后输入,将再次写入 100 次 “desu”。3.
→ 将写入 3 次 “desu”(而不是 300,真是聪明)。
更强
掌握如何高效移动光标是使用 vim 的非常重要的一部分。不要跳过这一节。
- N
G
→ 跳转到第 N 行。 gg
→1G
的快捷方式 - 跳转到文件的开头。G
→ 跳转到文件的最后一行。单词移动:
w
→ 跳转到下一个单词的开头。e
→ 跳转到当前单词的结尾。
默认情况下,单词由字母和下划线字符组成。我们称 WORD 为以空白字符分隔的一组字母。如果你想以 WORD 为单位移动,只需使用大写字母:
W
→ 跳转到下一个 WORD 的开头。E
→ 跳转到当前 WORD 的结尾。
现在让我们谈谈非常高效的移动命令:
%
:跳转到对应的(
,{
,[
。*
(或#
):跳转到光标下单词的下一个(或上一个)匹配位置。
相信我,最后这几个命令非常有用。
更快
还记得 vi 移动的重要性吗?这就是原因所在。大多数命令都可以按照以下通用格式使用:
<起始位置><命令><结束位置>
例如:0y$
的含义是:
0
→ 跳转到当前行的开头。y
→ 从当前位置开始复制。$
→ 直到当前行的末尾。
我们还可以执行类似 ye
的操作,从当前位置复制到单词的结尾。还可以使用 y2/foo
,复制到第二次出现 “foo” 的位置。
但这一点不仅适用于 y
(复制),也适用于 d
(删除)、v
(可视选择)、gU
(转为大写)、gu
(转为小写)等命令。
第4级 – Vim 超能力
通过之前的所有命令,你应该已经能熟练使用 Vim。但现在,来看看这些杀手级功能吧。这些功能中的一些正是我开始使用 Vim 的原因。
在当前行移动:0
^
$
g_
f
F
t
T
,
;
0
→ 移动到第0列^
→ 移动到行首的第一个字符$
→ 移动到行尾的最后一列g_
→ 移动到行尾的最后一个字符fa
→ 移动到当前行下一个出现的字母a
。,
(上一个)和;
(下一个)用于查找下一个或上一个出现位置。t,
→ 移动到字符,
的前一个位置。3fa
→ 在当前行查找第3个出现的a
。F
和T
→ 类似于f
和t
,但方向相反。![]()
一个有用的小技巧是:dt"
→ 删除直到字符 "
之前的所有内容。
区域选择:<action>a<object>
或 <action>i<object>
这些命令只能在可视模式中用于操作符之后,但它们非常强大。其主要模式是:
<action>a<object>
和 <action>i<object>
其中,action
表示任何操作,例如 d
(删除),y
(复制),v
(在可视模式中选择)。object
可以是:w
表示一个单词,W
表示一个扩展单词,s
表示一个句子,p
表示一个段落,还可以是自然字符,例如 "
, '
, )
, }
, ]
。
假设光标在(map (+) ("foo"))
中的第一个o
上。
vi"
→ 选择foo
。va"
→ 选择"foo"
。vi)
→ 选择"foo"
。va)
→ 选择("foo")
。v2i)
→ 选择map (+) ("foo")
。v2a)
→ 选择(map (+) ("foo"))
。

选择矩形块:<C-v>
矩形块在注释多行代码时非常有用。通常的用法是:0<C-v><C-d>I-- [ESC]
^
→ 移动到行首的第一个非空字符<C-v>
→ 开始块选择<C-d>
→ 向下移动(也可以用jjj
或%
等)I-- [ESC]
→ 在每行前写入--
以注释

注意:在 Windows 系统中,如果剪贴板非空,可能需要使用<C-q>
替代<C-v>
。
补全:<C-n>
和 <C-p>
在插入模式下,只需输入单词的开头,然后按 <C-p>
,就会看到魔法效果…

宏操作 : qa
执行某操作 q
, @a
, @@
qa
在寄存器 a 中录制你的操作。然后 @a
会像你手动输入一样,重新执行保存到寄存器 a
中的宏。@@
是一个快捷方式,用来重新执行最后一次执行的宏。
示例
在只包含数字1的一行中,输入以下命令:
qaYp<C-a>q
→
qa
开始录制。Yp
复制这一行。<C-a>
增加数字。q
停止录制。@a
→ 在1下方写2。@@
→ 在2下方写3。- 现在执行
100@@
会创建一个递增的数字列表,直到103。

可视化选择: v
,V
,<C-v>
我们已经看到了使用 <C-v>
的示例。还有 v
和 V
。一旦进行了选择,你可以:
J
→ 将所有行合并为一行。<
(或>
)→ 将选中的内容向左(或右)缩进。=
→ 自动缩进。

在所有选中的行末尾添加内容:
<C-v>
- 移动到目标行(
jjj
或<C-d>
或/pattern
或%
等…) $
移动到行尾A
,输入文本,ESC
。

分屏: :split
和 vsplit
这些是最重要的命令,但你应该查看 :help split
。
:split
→ 创建一个水平分屏(:vsplit
创建一个垂直分屏)。<C-w><dir>
: 其中dir
是hjkl
或 ←↓↑→,用于切换分屏。<C-w>_
(或<C-w>|
): 最大化当前分屏(或垂直分屏)。<C-w>+
(或<C-w>-
): 增大(或缩小)分屏。

总结
这些是我每天使用的90%的命令。我建议你每天只学习一到两个新命令。两到三周后,你会开始感受到vim的强大。
学习Vim更多的是通过训练,而不仅仅是单纯的记忆。幸运的是,vim自带了一些非常好的工具和优秀的文档。运行vimtutor,直到你熟悉大多数基本命令。
然后,你将学到关于 !
、折叠、寄存器、插件和许多其他功能的知识。像学习钢琴一样学习vim,一切都会顺利的。
阅读完毕,很棒哦!