vi是Linux世界里一位“老前辈”,几乎所有和Unix血统相关的系统中,都能看到它的身影。 刚开始接触vi,你可能会觉得它有点奇怪,甚至不太好上手。这很正常,就像初次学习乐器,你总需要时间来熟悉指法和乐理。 一位熟练的vi用户,双手几乎不需要离开键盘,就能像弹奏钢琴一样,行云流水地编辑代码和文本,那种高效的体验是图形化编辑器难以比拟的。

那么,在有这么多现代化编辑器的今天,我们为什么还要学习vi呢?当你通过终端远程连接一台服务器,或者当你的桌面环境出了问题,只剩下黑乎乎的命令行时,那些漂亮的图形化编辑器都消失了。 这时,vi几乎是你唯一可以信赖的伙伴。它轻巧、快速,无论系统资源多么有限,它总能被瞬间唤醒,随时待命。
更重要的是,POSIX标准(一个保证不同Unix系统兼容性的约定)要求每个系统都必须包含vi。这意味着,只要你学会了vi,就等于掌握了一项能在所有Linux/Unix环境中通用的“生存技能”。
vi不仅仅是一个编辑器,它是Unix/Linux系统管理的基础技能。在服务器管理、系统维护、紧急修复等场景中,vi往往是唯一可用的文本编辑工具。
在我们深入学习vi之前,我们需要了解一些背景知识。vi这个名字其实是“visual”的缩写,意为“可视化”。在vi诞生的那个年代,它为用户提供了一种全新的体验:用户可以在屏幕上看到整个文件的内容,并且可以自由地移动光标进行编辑。 在此之前,编辑器大多是“行编辑器”,用户只能逐行进行操作,这种方式效率非常低下。vi的出现,犹如在黑白电视时代引入了彩色电视,让人们第一次感受到编辑的流畅与便捷。
在当今的计算机世界中,我们所使用的编辑器大多是由Bram Moolenaar开发的vim。vim的全称是“vi improved”,也就是“vi的改进版”。 它不仅完全兼容vi的所有操作,还在此基础上增加了许多强大而实用的功能。实际上,当我们提到vi时,通常指的就是vim,因为它已经成为vi的一个更为现代化和功能丰富的版本。
|# 检查你的系统是否安装了vim $ which vim /usr/bin/vim # 或者检查vi命令实际指向什么 $ which vi /usr/bin/vi $ ls -l /usr/bin/vi lrwxrwxrwx 1 root root 20 Mar 20 10:30 /usr/bin/vi -> vim.tiny

vi最核心也最独特的概念,就是它的“模式”。理 初次打开vi,你所处的并非一个可以随意打字的状态,而是命令模式(Command Mode)。把它想象成一个飞船的驾驶舱,你按下的每一个键,都不是为了输入文字,而是向飞船下达指令,比如“向上移动一行光标”、“删除这个词”、“复制这一段”。 键盘上的大部分按键,此刻都化身为一个个快捷指令。
这是vi的默认模式,也是最重要的模式。在这个模式下,所有的按键都被解释为命令,而不是文本输入。
当你需要真正开始写字时,就要切换到插入模式(Insert Mode)。你可以把它看作驾驶舱里的“通讯系统”,一旦进入这个模式,你敲击键盘的每个动作,都会如实地变成文字,显示在屏幕上。
要进入插入模式,最常用的指令是按下i键(insert)。当你写完东西,想再次回到可以发号施令的驾驶舱时,只需按下键盘左上角的Esc键,即可返回命令模式。
除了这两个基本模式,还有一个Ex模式(Ex Mode),也可以叫作“底行命令模式”。在命令模式下,当你按下冒号:时,光标会立刻跳到屏幕最下方,等待你输入更复杂的“管理指令”。
这些指令通常用于文件级别的操作,比如保存文件、退出编辑器、进行全局搜索和替换等等。
初学者最容易犯的错误,就是在命令模式下不停地敲键盘,期望能输入文字,结果却发现屏幕上的内容变得一团糟。请一定记住:先按i进入插入模式再打字,写完后按Esc回到命令模式发指令。这是使用vi的基本韵律。
现在,让我们实际操作一下,体验这个完整流程。打开你的终端,输入vi后面跟一个不存在的文件名,比如vi story.txt,这样vi就会为你创建一个新文件并打开它。
|$ vi story.txt
屏幕上会显示一些波浪线~,代表这些是空行。此时你正处于命令模式。
试着按下i键,你会发现屏幕左下角可能出现-- INSERT --字样,这标志着你已经成功进入插入模式。现在,你可以自由地输入一些文字了,比如:
|I love Linux.
写完后,按下Esc键。看,左下角的-- INSERT --消失了,你又回到了命令模式。
现在,如果你想保存你的杰作,就需要请出Ex模式了。按下冒号:,光标会跳到底部,接着输入w(write)并回车。
|:w # 按下回车
vi会告诉你文件已成功写入。如果你想退出,同样是先按冒号:,然后输入q(quit)并回车。
|:q # 按下回车
当然,你也可以把这两个命令合二为一,输入:wq就是保存并退出。
如果有时你把文件改乱了,不想保存就直接退出,可以使用:q!,这个感叹号代表“强制执行”,意思是“我确定要放弃所有改动,马上离开!”
在命令模式下,我们首先要学会如何自如地移动光标。vi的设计哲学是让你的手尽可能留在主键盘区,以达到最快的速度。
因此,它使用h、j、k、l四个键来分别代表左、下、上、右。这需要一点时间适应,但一旦成为肌肉记忆,你会发现比频繁地去按方向键要快得多。
|# 光标移动命令 h # 向左移动 j # 向下移动 k # 向上移动 l # 向右移动
当然,光标一个字符一个字符地移动显然不够高效。想象一下,如果你在一片广阔的草地上散步,每一步只能迈出一小步,那将是多么费时费力。 vi为我们提供了更为快捷的移动方式,就像给你配备了一辆自行车,让你可以轻松地在草地上快速穿行。通过这些高效的移动命令,我们可以迅速跳转到文本中的不同位置,大大提高编辑效率。
掌握了移动,我们再来看看如何编辑文本。在vi中,剪切、复制和粘贴的操作与众不同。删除文本的指令是d(delete)。它通常需要和一个“动作”指令结合使用。
有趣的是,所有被d指令删除的内容,都不会真正消失,而是被悄悄地放进了一个剪贴板里。你可以随时用p(paste)指令,将剪贴板里的内容粘贴到光标之后。
如果你只想复制而不想删除,可以使用y(yank)指令。它的用法和d完全一样。
如果你不小心操作失误,别担心,在命令模式下按下u(undo)键,就可以撤销上一步的操作。
|u # 撤销上一步操作 Ctrl+r # 重做(vim中)
当文件内容很多时,查找特定的文本就变得尤为重要。在命令模式下,按下斜杠/,然后输入你想查找的词语并回车,vi就会快速定位到第一个匹配项。如果你想继续查找下一个,只需按下n(next)键即可。
|/pattern # 向前搜索pattern ?pattern # 向后搜索pattern n # 重复上次搜索 N # 反向重复上次搜索
vi还拥有强大的全局搜索与替换功能,这需要借助Ex模式来完成。它的语法看起来可能有点复杂,但威力巨大。
|# 基本替换语法 :s/old/new/ # 替换当前行第一个匹配 :s/old/new/g # 替换当前行所有匹配 :%s/old/new/g # 替换整个文件中所有匹配
让我们来拆解一下这个命令::启动了Ex模式,%表示对所有行进行操作,s代表替换(substitute),/old/new/定义了把什么替换成什么,最后的g(global)则表示替换行内的每一个匹配项,而不仅仅是第一个。
|# 确认替换(每个替换前询问) :%s/old/new/gc # 忽略大小写 :%s/old/new/gi # 使用正则表达式 :%s/\<word\>/replacement/g
在使用vi编辑器时,我们有时需要同时处理多个文件。vi提供了一种便捷的方法来实现这一点。 你可以在启动vi时,直接指定多个文件的名称,这样就可以同时打开它们进行编辑。 这样做的好处是,你不需要一个一个地打开文件,而是可以在一个vi会话中轻松地在多个文件之间切换和编辑。
|$ vi file1.txt file2.txt
然后使用:n(next)和:N(previous)在文件之间来回切换。你还可以使用:ls或:buffers查看当前打开了哪些文件(它们被称为缓冲区),并用:buffer 2这样的指令直接跳转到指定的文件。
|:n # 切换到下一个文件 :N # 切换到上一个文件 :ls # 列出所有缓冲区 :buffer n # 切换到第n个缓冲区
当我们需要在多个文件之间传递信息时,vi编辑器提供了一种非常便捷的方法。假设我们正在编辑两个文件,并且需要将一个文件中的某一行复制到另一个文件中。
首先,我们可以在源文件中使用yy命令,这个命令会将光标所在的整行复制到剪贴板中。接下来,我们可以通过:n或:N命令切换到目标文件。
在目标文件中,我们只需使用p命令,就可以将刚才复制的内容粘贴到光标所在的位置。这种方法不仅简单,而且极大地提高了编辑效率。
|# 分割窗口编辑多个文件 :split file2.txt # 水平分割 :vsplit file2.txt # 垂直分割 Ctrl+w h/j/k/l # 在窗口间切换
vi编辑器的配置文件是一个非常重要的文件,它可以帮助我们自定义和优化编辑体验。对于vim编辑器来说,这个配置文件通常是位于用户主目录下的~/.vimrc文件,而对于传统的vi编辑器,则是~/.exrc文件。
通过编辑这些配置文件,我们可以设置各种选项,比如显示行号、自动缩进等,从而使编辑器更符合我们的使用习惯。
|# 创建vim配置文件 $ touch ~/.vimrc # 编辑配置文件 $ vi ~/.vimrc
下面是一些常用配置选项:
让我们来做一些练习,巩固vi的知识:
|# 1. 创建并编辑文件 $ vi practice.txt # 2. 练习基本操作 # - 进入插入模式,输入一些文本 # - 返回命令模式,练习光标移动 # - 练习删除、复制、粘贴操作 # 3. 练习搜索和替换 # - 在文件中搜索特定单词 # - 练习全局替换操作 # 4. 多文件编辑 $ vi file1.txt file2.txt # - 练习在文件间切换 # - 练习从一个文件复制到另一个文件 # 5. 查看帮助 # 在vi中输入 :help
vi的学习曲线确实比普通编辑器要陡峭,但它所回报的,是一种与机器深度融合、高效而精准的编辑艺术。 今天我们接触的,只是它强大功能的冰山一角。把它融入日常工作中,多加练习,你终将体会到它那独特的魅力。