封面来源:https://geekdaxue.co/uploads/projects/haoyuechangge-quevp@vp0fm1/5643ae8476b3b305a0aacb8c33c0378c.jpeg
引言
在 Windows 系统上,我们一般使用 Notepad(记事本)或者是 Microsoft Office 作为文本编辑器(当然,也有用写字板或者 Notepad-- 等类似编辑器的),而在 Linux 上,不同的发行版(或桌面环境)为我们提供了不同的文本编辑器。例如,在 GNOME 上,默认的是 GNOME Text Editor,而 KDE Plasma 提供了 KWrite 和 Kate,其他的就不一一列举了。但是,如果摆在我们面前的是一个命令行界面,那上面的几个就完全没法运行(因为缺少图形界面配置)。这个时候也许有人会问:不是有 nano 吗?是的,但 nano 毕竟面向新手,尽管操作简单,其功能非常有限,默认也没有集成我们运维一行需要的代码高亮功能。因此,另一个选择,就是我们今天要讲的文本编辑器—— Vim.
关于 Vim
说起 Vim,就不得不提它的前辈—— Vi.
Vi 是 Unix 系统上最早的屏幕文本编辑器之一,由比尔·乔伊在 1976 年开发。它以简洁高效著称,尤其在低带宽终端环境下表现出色,仅仅在 Emacs 推出的前几年就成为当时程序员和系统管理员的首选工具。
Vi, Vim 和 Emacs 的爱恨情仇
正如开头所说,在命令行文本编辑器的世界里,Vim 并非唯一的选择。谈及它的历史,就不可避免地要提到另一个同样历史悠久且影响深远的编辑器——Emacs.
Vi 和 Emacs 的设计哲学截然不同,这也导致了它们之间长达数十年的“编辑器圣战”。Vi(以及后来的 Vim)秉承的是“模态编辑”理念,将插入文本和执行命令的模式分开,力求让手指不离键盘就能完成所有操作,效率极高。而 Emacs 则追求“用编辑器实现一切”,它本身就是一个可高度定化的运行时环境,通过 Elisp 语言,用户不仅可以编辑文本,还能集成邮件、新闻、调试器等功能,其目标是成为一个强大的工作平台。
尽管两者在理念上竞争,但它们共同定义了命令行文本编辑的黄金标准。Vim 以其无处不在(几乎所有类 Unix 系统都预装 Vi 兼容编辑器)和高效快捷著称;而 Emacs 则以其无与伦比的可扩展性和强大的功能集成见长。这场“圣战”没有真正的赢家,因为它们各自吸引着秉承不同哲学的信徒,共同推动了编辑器技术的不断发展,并为全世界的开发者和系统管理员提供了两种近乎完美的工具选择。
然而,随着计算机技术的发展,Vi 的功能逐渐显得局限。为适应更现代的编辑需求,布拉姆·米勒纳在 1991 年(也就是 Linux 内核第一个版本发布的同一年)基于 Vi 推出了增强版本——Vim(Vi Improved)。Vim 在完全兼容 Vi 的基础上,增加了多级撤销、语法高亮、插件扩展等强大功能。
如今,Vim 已成长为最受开发者喜爱的文本编辑器之一,有着诸如 NeoVim 和 LunarVim 在内的多个分支。其独特的模态编辑思想,将命令与输入分离,尽管学习曲线陡峭,一旦熟练掌握却能极大提升编辑效率。无论是在服务器运维、程序开发还是日常文本处理中,Vim 都展现着历久弥新的价值。
安装与模式介绍
在 2025 年的今天,安装 Vim 是一件非常容易的事——因为各大发行版的软件包仓库内都有提供。在不同的发行版上安装 Vim 的命令如下:
# Debian/Ubuntu
sudo apt install vim
# Fedora/RHEL/CentOS
sudo dnf install vim
# Arch Linux/Manjaro
sudo pacman -S vim
# openSUSE
sudo zypper install vim
# NixOS
sudo nix-env -iA nixos.vim或者,也可以搜索应用商店安装(如可能)。
下面来讲一讲 Vim 的几个模式:
命令模式(Command Mode):也叫作“一般模式”,这是进入
Vim后首先看到的模式。请注意,不像nano,在此模式下无法对文本内容进行编辑,必须切换到特定的“编辑模式”才能继续。编辑模式(Insert Mode):这是我们编辑文本时所处的模式。此时,我们可以对文本内容做任意改动。
命令行模式(Command Line Mode):也叫“扩展命令模式”“底线命令行模式”或“末行模式”。在该模式下,我们可以保存并退出编辑器,也可以丢弃更改,直接退出。这个模式下可用的命令是非常多的,一般在最后一行的开头有一个":"标识。
可视模式(Visual Mode):这个模式允许我们在编辑器内选定一些文本并执行相关的命令。它的上手难度略微有些大,且现在鲜少有人使用。
基本命令
编辑一个文件
直接输入 vim FILENAME 即可开始编辑文件 FILENAME. 请注意,如果目标文件不存在,Vim 会自动创建一个同名的文件。
切换模式
默认进入的模式是命令模式:

要切换到编辑模式,只需按下 i 键:

此时可以直接编辑文本。按 Esc 键可以回退到命令模式。
要进入命令行模式,应输入":":

同样,退出该模式也是使用 Esc 按键。
保存并退出更改
在命令行模式下,输入 w 命令以保存更改。后面有新文件名时,会将当前文件另存为新的文件。
如果在输入 w 的同时再敲入 q,则会在保存更改的同时退出编辑器。
请注意,q 命令的前提是需要保存更改。
强制退出
当你因为误操作不小心删除或更改了大片文本却不知道如何撤销,或者编辑器因某些原因卡死时,可以在命令行模式下直接使用 q! 命令强制退出。此时,你所做的一切改动都不会被保存(因为改动都在内存里面,这里利用的是内存的断电易失性)。
进阶命令
下面的命令需要确保你处于命令模式。
内容有些多,这里就用表格列出来。
里面只是一些常用的命令,疏漏在所难免。
更难的文本对象操作我们这里不会讲。
定位光标
上下左右移动(了解)
一般来说,我们可以直接使用方向键来移动光标。但实际上, Vim 也提供了其他方式让我们移动光标——不是 WSAD,而是 hjkl.
这是因为,以前的键盘是没有方向键的,并且在 Emacs 刚发明的那个年代,3D 游戏尚未兴起,人们没有用 WSAD 的惯例来控制方向。
定位到某个单词的开头结尾
行内定位
文件内跳转
查找与替换字符串
查找:
替换:
你可能会发现,下面的命令和 sed 所使用的很像。
请注意,这些命令必须在命令行模式下使用。
剪切,复制,粘贴或删除一行或多行内容
进入编辑模式的命令
显示/隐藏行号
不像 nano,Vim 默认是隐藏行号的。如果要显示行号:
:set nu要隐藏行号:
:set nonu要显示控制字符:
:set list总结
Vim 不仅仅是一个文本编辑器,它更代表了一种追求效率的哲学。从它的前身 Vi 在命令行时代的诞生,到它与 Emacs 在理念上的精彩博弈,再到自身通过模态编辑、组合命令和强大扩展性形成的独特生态,Vim 已经成为了程序员和系统管理员手中一件历久弥坚的利器。
它的学习曲线或许陡峭,初期会让人感到不适应。但一旦你突破了基础门槛,掌握了进阶命令,你就会发现一个全新的世界——在那里,编辑文本几乎成为一种无需思考的肌肉记忆,你的想法和意图能够几乎毫无延迟地转化为代码或文字。
总而言之,掌握 Vim 是一项一次投资、终身受益的技能。它让你无论在何种环境、何种设备上,都能拥有一个高效、强大且随心所欲的编辑环境。这正是 Vim 历经数十年技术变迁,依然屹立不倒、备受推崇的根本原因。