Vim 是一个高度可配置的文本编辑器,旨在实现高效的文本编辑。它是大多数 UNIX 系统中分发的 vi 编辑器的改进版本。
Vim 通常被称为“程序员的编辑器”,对于编程非常有用,以至于许多人认为它是一个完整的 IDE。但这不仅仅适用于程序员。Vim 非常适合各种文本编辑,从撰写电子邮件到编辑配置文件。
安装
你可以在Linux终端中输入下面的命令来查看是否安装了
vim --version
如果出现一大串版本信息,说明 Vim 已经在了。
如果提示 Command 'vim' not found,就安装一下:
sudo apt update && sudo apt install vim -y
安装完后再用 vim --version 确认即可。
基本操作
创建并打开文件
我们创建一个叫hello.txt的文件来练习:
vim hello.txt
回车后,你的终端会变成 Vim 的界面,大概长这样:
~
~
~
"hello.txt" [New File]
此刻你处于普通模式(Normal Mode),这是 Vim 的“默认状态”,所有按键都被理解成命令,而不是输入文字。
编辑文件
想往文件里写内容,必须先进入插入模式(Insert Mode)。按一下键盘上的 i 键(小写字母 i)。你会看到屏幕底部出现 -- INSERT -- 字样,说明现在可以像普通记事本一样打字了。试试输入下面这段文字(可以随意改内容):
Hello, Vim!
This is my first step.
I'm not afraid anymore.
随意换行,就像平常一样。写完内容后,按一下 Esc 键(键盘左上角那个键)。你会发现底部的 -- INSERT -- 消失了,这就回到了普通模式。在普通模式下,键盘上的字母又变回了命令。
核心认知:在 Vim 里,你要么在“打字模式”,要么在“命令模式”,大脑要时刻清楚自己在哪种模式里。这是新手最难适应但最重要的一点。
保存文件
然后需要保存文件。保存文件需要在普通模式下输入 : 进入“命令行模式”,然后输入 w(代表 write)并回车。
操作序列:
确认你已经在普通模式(看不到
--INSERT--)。按
:键(冒号,需要组合Shift + ;)。屏幕底部会出现一个
:提示符。接着输入
w。按
Enter回车。
你会看到底部显示类似:
"hello.txt" [New] 3L, 60B written
这表示文件已保存(写入了 3 行,60 字节)。
退出文件
保存之后,我们想退出。还是在普通模式下:
输入
:(冒号)输入
q(代表quit)按
Enter
Vim界面消失,回到终端提示符,说明你已经安全退出。输入
cat hello.txt
查看我们刚刚编辑的文件,如果看到刚刚输入的文字,说明编辑成功。
假设我们修改了文件内容,但是又不想保存,直接退出,再打开文件
vim hello.txt
这次按 i 进入插入模式,胡乱加一些内容,然后按 Esc 回到普通模式,输入 :q 回车。Vim会报错:
E37: No write since last change (add ! to override)
意思是文件被修改过,但没保存,我们输入 :q! 回车强制退出,不保存。你会直接退回终端,刚才的修改不会保存。
命令总结
我们可以在普通模式下输入 :wq 回车,意思是保存并离开
移动的艺术
请先用 vim 打开一个文件,我们边看边练:
vim practice.txt
然后按 i 进入插入模式,把下面这段示例文本一字不差地打进去(或复制粘贴也行,但要确认粘贴成功)。这段文本是我们全章的练习场:
The quick brown fox
jumps over the lazy dog.
It was the best of times,
it was the worst of times.
Hello, Vim World!
按 Esc 回到普通模式,我们开始移动。
常见移动方式
基础移动 h j k l
h—— 向左(←)j—— 向下(↓)k—— 向上(↑)l—— 向右(→)
词间移动 w b e
w—— 跳到下一个单词的开头(word)b—— 跳到上一个单词的开头(back)e—— 跳到当前(或下一个)单词的末尾(end)
行内精准移动 0 ^ $
0—— 跳到这一行的绝对开头(第 0 列)^—— 跳到这一行第一个非空白字符$—— 跳到这一行的末尾
文件级跳跃 gg G
gg—— 跳转到文件的第一行G—— 跳转到文件的最后一行
数字 + G可以跳到指定行,比如3G跳转到第 3 行。
屏幕级滚动 Ctrl-u Ctrl-d Ctrl-f Ctrl-b
Ctrl + u—— 向上翻半页(up)Ctrl + d—— 向下翻半页(down)Ctrl + f—— 向前翻一整页(forward)Ctrl + b—— 向后翻一整页(backward)
为了验证效果,我们可以把刚刚的内容多复制几遍,尽量超过一页
命令总结
操作符与动作组合
操作符 (Operator) 是“做啥”:
d删除,c修改,y复制动作 (Motion) 是“对哪做”:
w一个词,$到行尾,gg到文件头
把它们组合起来,就是一句话。比如 “删除一个单词” 就是 d + w = dw。
常见操作
删除操作符 d
dw—— 删除一个单词d$—— 删除到行尾dd—— 删除整行dG—— 删除到文件尾
修改操作符 c—— 删除并进入插入模式
c 和 d 的动作范围一模一样,但它多做了一个动作:删完后自动按了 i,让你进入插入模式开始写新东西。
cw—— 修改一个单词(从当前位置删除一个词,并进入插入模式)c$—— 修改到行尾(从当前位置一直删除到行尾,并进入插入模式)cc—— 修改整行(删除整行并进入插入模式)
复制操作符 y
yw—— 复制一个单词yiw—— 复制光标下整个词,iw是个文本对象,代表 “inner word”,它会精准选中光标下的整个单词,不论光标在词的首尾还是中间。yy—— 复制整行y$—— 复制到行尾
粘贴操作符 p / P
p—— 粘贴到光标后(下方)P—— 粘贴到光标前(上方)
撤销操作符 u
u—— 撤回上一步
搜索、替换与撤销
创建一个练习文件:
vim chapter4.txt
进入插入模式,输入以下文本:
The quick brown fox.
jumping jackrabbits jump joyfully.
This fox is very fast.
The fox and the dog are friends.
Foxes are everywhere.
A quick fox jumps over the quick fox.
The QUICK brown Fox.
quick quick QUICK QuIcK
搜索
在 Vim 里搜索不需要先按冒号,在普通模式直接按 / 或 ? 即可。
/—— 正向搜索(从光标位置向文件尾方向找)?—— 反向搜索(从光标位置向文件头方向找)
按 gg 回到文件开头。按 /,你会看到屏幕左下角出现一个 / 提示符。输入 fox,然后按 Enter 回车。光标立刻跳到第一个 fox 上。现在按 n —— 跳到下一个匹配项(next)。再按 n 几次,一直跳到文件末尾的 fox。现在按 N(大写,即 Shift+n)—— 跳回上一个匹配项。用 n 和 N 在匹配项之间来回穿梭几趟。
按 ?,输入 fox,回车。Vim 会从光标位置向上搜索。按 n 和 N 的跳跃方向也会随之反转。
Vim 默认是区分大小写的。搜索 /fox 不会匹配到 Fox。如果你想忽略大小写搜索,可以临时加 \c,比如 /fox\c 会匹配 fox、Fox、FOX 等。\C 则强制区分大小写。
搜索完后,所有匹配的词可能都被高亮了。如果这些高亮干扰了阅读,可以暂时关掉:输入 :nohlsearch 或简写 :noh,回车。高亮就消失了。下次你再搜索时,高亮会自动恢复。
替换
Vim 的替换命令是经典的 :s 命令,格式为:
:[range]s/pattern/replacement/[flags]
替换当前行第一个匹配项
把光标移动到第二行 Jumping jackrabbits jump joyfully.
输入
:s/jump/leap/然后回车。你会发现这行里第一个 jump 变成了 leap,但后面的 jump 没变。
替换当前行所有匹配项
按
u撤销上一步。输入
:s/jump/leap/g然后回车。这次整行里所有的 jump 都变成了 leap。末尾的 g 是 global 的意思,代表整行范围。
指定行的替换
如果你想对第 3 行到第 6 行做替换:输入 :3,6s/fox/cat/g 回车。观察文件:只有第 3 行到第 6 行的 fox 变成了 cat,其他行不受影响。
全文件替换
输入 :%s/fox/cat/g 回车。% 代表整个文件,这条命令会把文件里所有的 fox 替换成 cat。做完后请按 u 撤销回来,我们还要练下面的。
确认式替换
批量替换有时很危险,你不想全自动改,而是想看一个、决定一个。加 c 确认标志即可。输入 :%s/fox/cat/gc 回车。光标会跳到第一个 fox,底部出现提示:
replace with cat (y/n/a/q/l/^E/^Y)?
y—— 改这一个n—— 不改,跳到下一个a—— 全改(all),放弃确认q—— 不改了,直接退出替换l—— 改完这一个就直接退出
撤销与重做
u—— 撤销(undo)Ctrl + r—— 重做(redo)
Vim 的撤销不像普通编辑器那样“Ctrl+Z 再 Ctrl+Y 就没了”,它有一个撤销树,我们暂时只感受线性部分:
任意删除一行(
dd)。修改一个词(
cw输入新词后Esc)。粘贴一行(
p)。现在连续按
u几次,观察文件一步步退回之前的状态。再连续按
Ctrl + r,一步一步把撤销掉的操作重新“做”回来。
命令总结
Vim使用教程-1
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法