终于,基于 X 的 vi

作者:Dan Wilder

许多重视小型、灵活、朴素的程序员编辑器的人都在使用(即使不总是喜爱)vi 编辑器及其同类产品。 键击有点神秘,但大多数情况下只是简洁。 vi 具有小而足够的命令集、基本的模式集,并且没有脚本语言可言,因此只能通过修改源代码来扩展。 但它启动速度极快。 它的键盘响应速度令人眼花缭乱。 提供了复杂的全局命令。 学习曲线在开始时很陡峭,但是一旦肌肉学会了命令而大脑忘记了它们,vi 既快速又轻松。

不幸的是,大多数 vi 克隆版本几乎没有 X Windows 支持。 在 xterm 中运行时,有些可以很好地调整大小,有些可以让您单击鼠标来定位光标。 但鼠标支持仅此而已。 没有滚动条。 X 选择风险自负。 鼠标几乎没有其他用途。

输入 vile-5.6,为 X11 编译为 xvile

虽然不完美,但基础是扎实的,并且此编辑器提供了

  • 垂直滚动条

  • 良好集成了主 X 选择

  • 基于鼠标的剪切和粘贴

  • 鼠标选择区域用于其他命令

  • 鼠标命令用于打开、调整大小和关闭子窗口(窗格)

vi 还允许以冒号开头的命令——所谓的“冒号命令”。 在 xvile 冒号命令中,我发现了一些不和谐的地方; 发行说明和帮助文件警告了这些。

虽然我不是 vi 狂热者,但我已经断断续续使用了 vi 七年了,所以我对命令集非常熟悉。 在 xvile 中,我发现标准 vi 命令几乎没有惊喜。 大多数情况下,它只是做了它应该做的事情。 Paul Fox(不是 Crisp 成名的 Paul D. Fox)、Tom Dickey、Kevin Buettner 和许多其他人一定在这个项目上投入了许多个漫长的夜晚。 MicroEMACS 是起点,但这看起来不太像 Emacs。 这不仅仅是 Emacs vi 模式,而是一个深入到代码的 vi 编辑器。 剥离后重约 280K,它比传统的 vi 大,但足够小,几乎一样快。

构建它

从 sunsite.unc.edu 镜像站点下载源代码后,我解压缩了它并按照 README.CFG 中的说明进行操作。 配置和构建都很顺利,xvile 在我第一次尝试时就运行了。

当我输入

xvile

弹出了一个新窗口。 我猜测,我输入了

:h

然后出现了主帮助屏幕。

功能,优点和缺点

帮助屏幕是普通的只读缓冲区,因此您可以使用标准的搜索和分页命令来浏览它们。 这比我在其他 vi 克隆版本中看到的帮助有所改进。 但是,没有介绍性信息,也没有超文本功能。 如果您已经使用 vi,这不会困扰您。 如果您不使用 vi 并且想尝试此编辑器,那么一本好书可能会有所帮助(请参阅第 13 页的“资源”)。

有一些扩展。 其中包括用于操作窗格、重新绑定键、对齐文本等的命令。 有一个复杂的宏功能,也许有一天我会使用它,但编辑器基本操作速度很快,部分原因是它根本不依赖于宏。

与 Emacs 一样,函数并非与键密不可分。 一些 Emacs 命令已经进入冒号命令模式的扩展中。 例如

:bind-key undo-changes-backward u
:bind-key format-til M-w

可以提供我首选的撤消绑定,并在 ALT-w 上添加右对齐文本对齐。 这些命令(不带冒号)也适用于 .vilerc 文件,其他冒号命令也是如此,因此如果您有一些标准设置命令,则不必每次都键入它们。

如果您认为“bind-key 看起来像 Emacs”,那么您是对的。“vile”代表“vi Like Emacs”。 正如 README 文件所说,这个笑话很老了,但不知何故这个名字一直沿用至今。

我对一些事情并不满意。 其中最主要的是冒号命令的弱点。 例如,我习惯于输入

:.w tmp

将当前行写入文件。 xvile 坚持使用更长的等效形式

:.,.w tmp

我的手指会忘记输入。

许多冒号命令起源于古老的 ed,通过 ex,它为您提供了强大的功能,可以很好地完成某些事情,例如使用正则表达式进行全局替换。 例如,要复制文件中第 50 行到第 100 行的全部内容,并使用 at 符号 (@) 作为分隔符,您可以键入

:50,100s/..*/@&@&@/

和看起来像这样的行

framos.bin

现在看起来像这样

@framos.bin@framos.bin@

最常见的 ex 冒号命令都在那里,并且几乎可以满足您的期望,尽管添加一些对话框可能会对新手用户有所帮助。 刚开始使用 xvile 的经验丰富的 vi 用户最初应该注意这个对话框,因为有时它会提出意想不到的问题,或者可能表明冒号命令没有达到预期的效果。 一旦您了解了这些怪癖,您就可以忽略该对话框。 但是,许多不太常见的 ex 冒号命令都丢失了,或者具有不兼容的实现。 我经常使用这些命令,我花了一段时间才习惯这些差异。

可以重新绑定击键,但不能重新绑定鼠标单击。 我很想将 CTL-ALT-BUTTON3-DOWN 之类的东西绑定到有用的操作。

复制策略尚不明确。 vile 派生自 MicroEMACS,后者受限制商业用途的许可证约束。 这些扩展在 GPL 下。 Paul Fox 告诉我,他曾尝试联系 MicroEMACS 作者以澄清这种情况,但未获成功。 README 建议您如果遇到原始作者,请他们喝啤酒。

xvile 的一些差异是对标准 vi 的重大改进。 例如,如果您使用 yank 命令的最简单形式来 yank 十行文本,如下所示

10yy

然后您可以更改为备用文件

:e

并仅用 p 粘贴相同的文本。 这与标准 vi 不同,在标准 vi 中,文本会在文件更改时消失。

标准 vi 的另一个烦恼消失了。 当您更改窗口时,您不必将缓冲区写入文件。 除非您 真的 信任您当地的电力公司,并且您的孩子永远不会踢电源开关,或者除非您不介意启用自动保存到磁盘,否则请勿滥用此功能。 但当您只想快速查看另一个或两三个或十个文件时,这是一个不错的功能。

与某些 vi 克隆版本不同,当您写入文件时,您不会在备用文件中丢失您的位置。 实际上,xvile 会在您打开的尽可能多的文件中保留您的位置。

垂直滚动条很方便,既可以用于在文件中移动,也可以用于告诉您您在哪里。 此外,鼠标单击滚动条可让您拆分或取消拆分窗口,以及调整窗格大小。

键盘 HOME、END、PAGE UP 和 PAGE DOWN 键都执行您希望它们执行的操作。 箭头键也是如此。 这又与某些 vi 克隆版本不同。

xvile 窗口示例

图 1 显示了一个 xvile 窗口示例。 下窗口中的阴影文本是鼠标选择,可以使用 ^s(我已将其重新绑定到 g)将任何这些光标移动“运算符”命令应用于该选择。 因此,在传统的 vi 中,要删除光标处开始的单词,您需要键入

dw

其中 d 是删除运算符,w 是单字光标移动命令。 在 xvile 中,您还可以使用鼠标选择一个单词(或三个,或几行或任何内容),然后键入

d^s

或者,您可以在删除的每一端单击鼠标左键,并在其间插入 d 命令,如下所示:以及所有其他运算符命令,例如 c(更改)、j(连接)等等。 这些命令的完整列表在 xvile 中通过以下命令引出

:list-operators

也可以粘贴 X 选择,方法是将鼠标光标移动到要粘贴的位置,单击鼠标左键将光标设置在那里,然后单击鼠标中键粘贴到光标处。 矩形选择是通过在进行选择时按住 Control 键来完成的。 不幸的是,它们在右侧受选择中包含的最短行的约束。

总结

我对基于 X 的 vi 的搜索结束了。 对我而言,xvile 符合要求。

如果您不是 vi 用户,但您喜欢偶尔尝试一下新编辑器,请尝试一下这个。 但是,不要期望它是自学的:您需要这本书。

如果您已经是 vi 用户,并且希望将鼠标用于不仅仅是镇纸,并且如果您不会因为不得不重新学习一些击键序列而感到非常沮丧,请查看 xvile。

资源

xvile 源代码可以通过匿名 ftp 从 sunsite.unc.edu 的 /pub/Linux/apps/editors/vi/vile-5.6.tar.gz 文件中检索。 尽可能使用 sunsite 的镜像。

学习 vi 的一本好书是 Linda Lamb 编写的 Learning the vi Editor,由 O'Reilly & Associates 出版,ISBN:0-937175-67-6,192 页,21.95 美元

vile 的作者是:Paul Fox, pgf@foxharp.boston.ma.usKevin Buettner, kev@primenet.comTom Dickey, dickey@clark.net

Dan Wilder 是西雅图的程序员和系统管理员。 可以通过 dan@gasboy.com 联系到他。

加载 Disqus 评论