有些人喜欢 Vim 作为文本编辑器,而另一些人则喜欢 Emacs。拥有如此不同的观点是 UNIX 世界的常态。
我彻头彻尾是一个 Emacs 用户。当然,在 UNIX 早期,我也花了几年时间使用 Vim,但一旦我正确地学会了 Emacs,就再也回不去了。关于 Vi(m) 的一点是,它几乎存在于每个 UNIX 系统上,因为它已经存在很久了,而且它非常小巧。对于人们在紧急情况下可以使用的默认编辑器来说,这是一个显而易见的选择。
如果不考虑有意的优化和精心选择的配置选项,Vim 和 Emacs 之间“自然”的大小差异大约为 1 比 7(几年来,我维护了一个用于 live Linux 发行版 Slax 的 Emacs 模块,其中 Emacs 为 37MB,而 Vim 为 5MB。同样,在我的 NetBSD 系统上,Emacs 的最小构建版本为 14MB,而 Vim 约为 2MB)。
公平地说,GNU Nano 也很小,并且作为一个相当不错且最近很受欢迎的默认文本编辑器。然而,Nano 和 Vim 的问题在于,它们都不是 Emacs。Emacs 的问题在于它真的非常大。
深入 Emacs
Emacs 最初是一组用于名为 TECO 的现有文本编辑器的宏。这个想法非常简单:TECO 有时会有一些功能需要六个步骤,如果编写脚本并将其变成一个步骤,就会更容易。最终,人们意识到这些宏非常合理,以至于他们将它们收集起来并捆绑在一起,作为一个独立的交互式编辑器。
对大多数人来说,“Emacs”暗示了两个不同的原则
- 一种具有特定功能风格(键盘命令围绕
ctrl
和alt
组合)和整体“感觉”和风格的文本编辑器。这是 Emacs 的“手动还是自动?”部分。 - 一个强大且可无限扩展和破解的 Lisp 解释器。这不是大多数人第一次尝试 Emacs 时所想到的——它是隐藏在幕后的东西。
Emacs 二进制文件的大部分重量都可以在 Emacs 的这两个方面结合的地方找到。Emacs 本身(文本编辑部分)不是很重。加上它可以做的所有酷炫技巧(查看 PDF 和 docx 文件,加载额外的菜单,使用 GUI 前端等等),应用程序变得更加庞大。再加上一个复杂的配置文件,事情变得更加复杂。
Jonathan 自己的 Emacs 版本
Jonathan Payne 编写了他自己的 Emacs 编辑器版本,并将其命名为 Jove。今天,它在某种程度上是一个小众应用程序,很少被提及,但它是一个出奇的小巧而有效的 Emacs 克隆版本。当您使用 Jove 时,您几乎意识不到您没有在使用 Emacs。事实上,Jove 非常像 GNU Emacs,以至于它的内置教程 teachjove 是 Emacs 教程,只有轻微的修改。这意味着您可以获得 GNU Emacs 最常用的好处,但占用的空间很小,依赖项列表也很简单:libtinfo
,用于 ncurses
风格的元素,以及 libc
。
它有多小?Jove 可执行文件大约为 150K。
Jove 默认随 Slackware 一起发布,所以我什至懒得安装 Vim。因为很多应用程序似乎都想默认使用 Vim,所以我甚至将 Vi 别名为 Jove。
Fedora 和 Debian 都提供了 Jove 软件包。
如果您的发行版没有提供 Jove 软件包,您或许可以从源软件包为您的发行版重新构建一个软件包。例如,RHEL 和 CentOS 没有 Jove 软件包,但 Fedora 有。只要您安装了 RPM 开发工具链
# yum grouplist -v
# yum groupinstall fedora-packager
下载 Jove 的源 RPM(其文件名中应包含 src.rpm
),然后重新构建 SRPM
$ rpmbuild --rebuild jove-4.16.0.73-10.fc24.src.rpm
在您用户的 ~/rpmbuild/RPMs/
目录中的相应架构中找到重新构建的 RPM。像往常一样安装它。例如
$ sudo dnf install ~/rpmbuild/RPMs/jove-4.16.0.73-10-el7.rpm
如果一切都失败了,Jove 的源代码维护在 多伦多大学。
探索 Jove
Jove 遗漏的 GNU Emacs 体验部分是 Lisp。对于 Emacs 的硬核用户来说,这使得 Jove 无法成为 Emacs 的替代品,但作为 Vim 的替代品,缺少 Lisp 仅仅意味着您获得了一个轻量级、不可扩展的编辑器,其外观和感觉与 GNU Emacs 相同。找到 Emacs 和 Jove 之间差异的最佳方法是使用 Jove。您最终会遇到这些差异,但有一些技巧可以帮助您适应。
Env 设置
如果您真的想删除 Vim 软件包,您可以这样做,但在某些发行版上,这样做比它本身的价值更高。例如,在 RHEL 服务器上,cvs 和 sudo 都“需要”Vim。当然,可执行文件实际上并不需要 Vim,但它们的 RPM 软件包已被告知它们需要,所以 yum 或 dnf 会报告这一点。
更简单和更安全的方法是设置正确的 EDITOR
环境变量。要做到这一点,请使用
$ echo "EDITOR=/usr/bin/jove" >> ~/.bash_profile
$ sudo !$
$ source ~/.bash_profile
$ sudo !$
大多数应用程序都遵循 EDITOR
环境变量(甚至包括 visudo
,考虑到这个名称,您可能不会期望它这样做)。我见过一些奇怪的情况,它们忽略了它,仍然固执地加载 Vim,但在我的经验中,这些情况很少见。
如果您绝对必须这样做,您可以将 Jove 符号链接到 Vi,只要您保留实际的 Vi 可执行文件以备不时之需。因为 Vi 安装在 /bin
中,所以它是您在系统救援事件中拥有的唯一文本编辑器,此时 /bin
是唯一挂载的分区(除非您手动将其他内容安装到 /bin
)。一个安全的选择是
$ sudo mv /bin/vi /bin/vi.bin
$ sudo ln /usr/bin/jove -s /bin/vi
您只有在知道自己在做什么并了解它将如何影响救援环境时才应该这样做。
teachjove
如果您还不是 Emacs 或 Jove 用户,您应该首先启动 teachjove 以获得循序渐进的介绍。请注意,如果您目前是一个快乐的 Vim 用户,这可能会改变您的世界观。如果您是 Nano 用户,这将让您了解您错过了什么。
https://open-source.net.cn/sites/default/files/jove_teachjove_700p.jpg" title="teachjove 和免费学习 Emacs" typeof="foaf:Image" width="700" height="358">
joverc
Jove 附带了几个 .jove.rc.* 文件,其中包含 Emacs 用户可能期望的所有常用默认设置。
$ cat /path/to/jove/jove.rc.xterm > ~/.joverc
这既可以作为习惯 Jove 的安全起点,也可以作为自定义可能性的示例。最常见的更改当然是 Forward-Delete 键的行为,由于历史原因,它被设置为充当退格键
# DEL key
bind-to-key delete-next-character ^[[3~
# Backspace key
bind-to-key delete-previous-character ^?
apropos
与 GNU Emacs 一样,命令 M-x apropos foo
(或简写 M-x apr foo
)在所有可能的命令中搜索术语 foo
。如果您在 Jove 中遇到一些与您习惯的 GNU Emacs 不同的东西,请 apropos
一个关键字来查找 Jove 的替代方案。
https://open-source.net.cn/sites/default/files/jove_apr_700p.jpg" title="M-x apropos" typeof="foaf:Image" width="700" height="358">
通常,函数“缺失”在 Jove 中有两个原因。要么它不存在(没有 org-mode
,并且再多的 apropos org-mode
也不会改变这一点),要么它只是有不同的调用方式,因为您不再使用 Lisp。
例如,在 GNU Emacs 中,global-linum-mode
函数会切换每个缓冲区的左边框上的行号。Jove 没有这样的函数,但 apropos number
揭示了 number-lines-in-window
,它的作用完全相同。
如果您遇到您认为缺少的功能,请使用 M-x apropos
并进行调整。如果您的功能确实缺失了,请提醒自己,至少它不是 Vim。
Emacs vs. Vim vs. Jove
您可能会争辩说 Jove 是不必要的,因为 Emacs 可以以不同的方式调用,从而避免您的 init 文件或充当轻量级工具。或者您可能会争辩说,如果正确管理 EDITOR
环境变量(并被所有应用程序遵循,但事实并非如此),则 Vim 不需要替换。所有这些都是有效的观点,最终,Jove 只是另一个文本编辑器。它是一个小型实用程序,与 ed
相比,它可以使编辑文本稍微容易一些。
如果您正在市场上寻找快速、无痛的 Vim 替代品,并且您喜欢 Emacs 和 Bash 的用户风格,那么 Jove 可能是您的备用 Emacs。
14 条评论