我最爱用的文书编辑器非「Vi/Vim」莫属。Vi/Vim 是一套历史悠久的程序与文书编辑器程序,内建在 Apple 的 OS X 与 Linux 作业系统中,并且支持 Microsoft Windows 系统,曾被称为电脑史上最强大的编辑器软件。不过我就只是喜欢他那简约的设计风格以及像是无所不包的延伸功能,适合作家写作与有怪僻的程序设计师使用。

延伸阅读:《VI/VIM 文书编辑软件的传奇历史》

由于 VI / VIM 几乎等于近代电脑的发展史,不意外的也有高手协助中文化,这也是让华人容易上手的原因之一(而且比起小作家好用千万倍)。例如《VimWiki:用Vim 撰写个人 WIKI 日志/电脑软件教学》这篇文章就是透过 VI / VIM 的扩充程序,设计出个人专用的 Wiki 日志。

Vi / Vim 代码与文书编辑器的最大特点之一,就是将一般编辑器仅有的编辑模式(Edit Mode),重新定义为基本模式(Basic Mode),并在基本模式下提供下列三种延伸应用:

  1. 常态模式(Normal mode),刚开启 Vi / Vim 软件时的初始化模式,只能透过「按键」进行已定义过的软件控制,不能对编辑区域进行修改或新增文字。
  2. 插入模式(Insert Mode),按「Insert」按钮后会进入插入模式(状态列显示「--插入--」),可以对编辑区域进行编辑(新增和修改文字)。在插入模式中按压「Esc」按钮,可回到常态模式。
  3. 命令列模式(Cmdline Mode or Command-Line Mode),在常态模式下按压「:」按钮,可进入命令列模式,并在视窗下方出现一个「:」符号。用户可在 : 符号后方接著输入各种控制指令,以达到诸多功能应用。在命令列模式下按压「Esc」按钮,可回到常态模式。

官方网站:《VI/VIM》

Vi / Vim 常用指令参考表

常态模式(透过「Insert」与「Esc」与插入模式交换)

  • 游标移动:h, k, l, j
  • 单一字元、字串的删除:x、X、dw
  • 整行删除、复制及贴上:dd、yy、P/p
  • 上下行合并:J
  • 搜寻、重复搜寻:/、n/N
  • 复原、重复:u、[ctrl]-r
  • 储存后离开:ZZ
  • 视窗分割::sp newfile、:vs
  • 跳到第一行、中间及最后一行第一个位元:H(gg)、M、G
  • 跳到下一个字串第一个字元:w / W

命令列模式(使用「:」键进入)

  • 储存与离开:「w」、「w!」、「q」、「q!」、「wq!」。
  • 设定:「:set」。
  • 字串取代:「:g/x/」。
  • 其他::「n1」、「n2s」、「:old」、「:new」。

存取文件 & 离开 VI 程序

  • :q:关闭VI,但不储存,但若修改过文件内容则须使用 :q! 指令强制离开
  • :w:储存目前所编辑的文件
  • :w:文件名称:将目前所编辑的文件另存新档至「文件名称」
  • :wq:储存目前所编辑的文件,并离开 VI 程序
  • :x:储存目前所编辑的文件,并离开 VI 程序,同 :wq

插入模式

在「常态模式」按压下列按键,可进入「插入模式」:

  • i:在游标左方进入输入模式。
  • I:在游标所在行的行首进入输入模式。
  • a:在游标右方进入输入模式。
  • A:在游标所在行的行尾进入输入模式。
  • o(小写英文字母 o):在游标下一行另起新行,并进入输入模式。
  • O(大写英文字母 o):在游标上一行另起新行,并进入输入模式。

移动游标

  • k:将游标向上移动一个字元,等同方向键「↑」
  • j:同上,等同方向键「↓」
  • h:同上,等同方向键「←」
  • l:同上,等同方向键「→」
  • H:将游标移至屏幕顶端
  • M:将游标移至屏幕中央
  • L:将游标移至屏幕底端
  • gg:将游标移至文件第一行
  • G:将游标移至文件最后一行
  • b:移动游标至单字的第一个字母,若该处已是第一个字母,则移至前一个单字的第一个字母
  • e:移动游标至单字的最后一个字母,若该处已是最后一个字母,则会移至下一个单字的最后一个字母
  • w:移动游标至下一个单字的第一个字母
  • ^:移动游标至该行第一个非空白字母
  • :数字:将游标移至文件第 数字 行,如输入 :45,即移动至文件第 45 行
  • :数字 G:将游标移至文件第 数字 行,如输入 45G,即移动至文件第 45 行

卷动视窗

  • +f:将视窗向下卷动一半。
  • +b:将视窗向上卷动一半。
  • +d:将视窗往下卷动一页。
  • +u:将视窗往上卷动一页。

搜寻文字

  • /字串、?字串:向下(向上)搜寻字串;同时,文件中所有相同字串的背景色会呈现高亮,在下达完搜寻指令之后,还可以透过「n」和「N」指令作进一步控制。 n 跳到下一个「字串」所在地
  • N 跳到上一个「字串」所在地

另,把游标停在想要搜寻的字串上,使用「*」按键可以达到向下搜寻的效果。而把游标停在字串上,使用「#」则可以向上搜寻。

复制、移动、删除文字

  • yy:将该行文字复制,指令 Y 有相同的功能
  • p:将所剪下或复制的文字贴上
  • 行数1, 行2 co 行3:将 行数 1 到 2 之间所有的字元复制至 行数3(行数3 必须原本就存在)
  • (在输入模式下使用):将游标左边一个文字删除
  • dd:将该行文字删除,此项指令可与指令 p (贴上)配合使用,而变成是「剪下」的功能
  • dw;删除该单字
  • cc:将该行文字改变,当输入此指令时,游标所在该行会被删除,并自动进入「输入模式」
  • cw:改变该单字,当输入此指令时,该单字在游标之后的字元会被删除,并自动进入「输入模式」
  • D:将游标所在该行中右边的所有文字全部删除
  • +w(在输入模式下):将游标所在该单字中左边的所有字元全部删除
  • 行数1, 行2 m 行3:将行数 1 到 2 之间所有的字元,移动到行数 3(行数 3 必须原本就存在)
  • 行数1, 行2 d:将 行数1 到 2 之间所有的字元进行删除
  • :g/被替代的字串/s//新字串/g:用「新字串」取代「被替代的字串」

书签功能

书签功能有两种,小写的 a 至 z,用于同一份文件中的书签标示,及大写的 A 至 Z,用于跨文件间的书签功能。

  • m(a-z) or m(A-Z):设定书签
  • (a-z) or (A-Z):跳到书签所在位置
  • :marks:显示各书签信息

其他指令

  • u:动作还原,若不小心下错指令,可以利用这个指令还原。
  • +r:动作重做,若不小心还原错了,可以利用这个指令重做。
  • K:函式查询,若您在 VIM 中撰写 C/C++ 程序,可以在 C/C++ 标准函式厍提供的函式名字上按「K」,便可以呼叫出 man page 查询该函式的用法
  • =:自动程序缩排对齐,若您在 VIM 中撰写 C/C++ 程序,可以利用「gg」指令将游标移到视窗最上方、利用「v」切换到选取模式、再用「G」将游标移到文件尾端 (即达到全选的功能),最后按「=」,VIM 便会帮你的程序做自动对齐
  • :set all:显示所有参数,可透过此指令查询 VIM 支持的所有参数。
  • :set nu:显示行数
  • :set nonu:隐藏行数
  • :set autoindent:自动缩排功能。「:set noautoindent」缩排功能关闭
  • :set tabstop=数字:设定 tab 对齐的字元数,一般 VIM 设定中,tabstop 的默认值为 8,但在 windows 下,许多文字编辑软件的默认 tabstop 数为 4,可以需要进行设定。
  • :set background=模式:设定 keyword 字体颜色模式,使用「:set background=dark」指令可以让 VIM 中的 keyword 以较亮眼的颜色表现出来,适用于暗色系的背景。 使用「:set background=light」指令则可以较暗沉的颜色表现出来,适用于亮色系的背景。
  • :split [文件名称]:水平分割文字编辑视窗,可指定「文件名称」。另,在编辑视窗中可以利用 +w 配合方向键跳跃选取所要编辑的视窗,若想要关闭视窗,则在欲关闭视窗里的命令模式下,打入离开指令,如: :wq 即可关闭该视窗。
  • :vsplit [文件名称]:垂直分割文字编辑视窗,功能同上。

在 VI / VIM 中可以自行设定惯用的控制参数,倘若不希望在每次开启 VI / VIM 编辑器时都必须重新设定一次,可以在用户的「Home」目录下(若为 Windows 系统则是在 Program Files 里头的 VIM 资料夹下),建立一个名为 「.vimrc」的文件来存放个人 VIM 的设定。文件内容的格式可参考下列所示:

  1. set background=dark
  2. set autoindent
  3. set number
  4. …

结论

VI / VIM 这套文书编辑器会受人们喜欢不是没有原因的,一般像 Microsoft Windows 内建的基础编辑器:小作家,功能之乏善可陈先不提以外,无法读取大型文件是一大缺失(Windows 7 版本之后的新版小作家已修正)。而 VI / VIM 的跨系统平台的能力,不管是在 Windows、Ubuntu Linux 或任何作业系统都可使用,这也是我一直在强调的用户经验之通用设计是完全相同。

最重要的,Vi / Vim 是免费的(喂)。

原文发表于2010年12月25日,于 2015 年同月同日二修。

✦ 独立报道 · 读者支持 ✦

以实际行动支持独立观点,与我们一同走得更远

每一篇条理清晰的分析、每一次不随波逐流的观察,背后都是对真实与品质的坚持。我们拒绝内容农场与算法流量绑架,坚持自由独立的客观发声。

维持高品质的原创写作与独立运营,需要持续的实质力量。您可以选择一次性赞助或每月定期支持,通过 Google 安全结账,与我们一同守护这份深刻与清醒。

由 Google 安全处理付款 · 可随时在 Google 账户管理或取消