您瞧!它是 Vim 的轻量级替代品

441 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

有些人喜欢 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”暗示了两个不同的原则

  1. 具有特定功能样式的文本编辑器(键盘命令以 ctrlalt 组合为中心),以及整体的“感觉”和风格。这是 Emacs 的“手动还是自动?”部分。
  2. 一个强大且可无限扩展和破解的 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。

FedoraDebian 都提供 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 软件包已被告知它们需要 Vim,因此 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 用户,这会让您了解自己错过了什么。

teachjove and learn Emacs for freehttps://open-source.net.cn/sites/default/files/jove_teachjove_700p.jpg" title="teachjove and learn Emacs for free" 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 的替代品。

M-x aproposhttps://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。

Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时从事这两个行业。

14 条评论

在您使用 `source $file` 的地方尝试 `. $file`,它的作用相同,但也适用于其他 shell 以及 bash ;)

有趣。我在 tcsh 和 bash 中也使用 `source`。它在哪些 shell 中不起作用?互联网声称 ksh、fish 和 zsh 也使用 `source`。

回复 作者:Lewis Cowles (未验证)

可能是一些极简主义/旧/非常符合 POSIX 规范的 shell?

至少在我的 slack box 上,ash 和 csh 不识别 source 作为命令。

回复 作者:sethkenlon

多年来,我一直使用一个鲜为人知的 emacs 克隆版本 microemacs。在我的 dos 编程时代,我一直使用它作为我的首选编辑器。然后,当我无法在我的新版 linux 上安装 microemacs 时,我转而使用 jove。然后我尝试了 jove。但我怀念我的老 microemacs。我尝试过 jasspa 版本的 microemacs,但它破坏了我的宏和工作流程。我现在已经转用 nano 作为我的主要编辑器,但我仍然怀念 microemacs。

从未用过 microemacs,我无法分享您的痛苦。我想如果我遇到 microemacs,我会避开它;听起来非常容易上瘾!

回复 作者:patrick wilder (未验证)

我也使用 micro Emacs,但我在 xubuntu 和主要的 Fedora 上使用它。我必须安装 ncurses-devel 软件包才能编译它,但现在它可以正常工作了。

回复 作者:patrick wilder (未验证)

我用过 jove 和 microemacs,但到目前为止,我最喜欢的小型 emacs 是 Jed。它很小巧,编辑器二进制文件和支持库之间大约只有 1 megs,但最好的是它允许使用 S-Lang 进行脚本编写。因此,对于那些仍然想要一个具有脚本编写功能的小型编辑器的人来说,Jed 是一个非常好的选择。

我认为 jed 也默认随 Slackware 一起提供,所以我将查看一下。就我而言,我拥有的 emacsen 越多,我就越不需要使用 nano 或...另一个...所以我很高兴有更多选择。

谢谢!

回复 作者:Papo Anaya

关于程序不尊重 $EDITOR:您是否尝试过设置 VISUAL?
我发现它适用于某些忽略 EDITOR 的程序。

干杯!

我觉得我也尝试过设置 VISUAL,但我无法自信地引用数据,所以我肯定没有在 EDITOR 失败时始终如一地尝试它。下次遇到这种情况时我会尝试一下(尽管仍然不会使用 vim!)。谢谢!

回复 作者:Ricardo J. Barberis (未验证)

我不喜欢 vi,因为它必须不断切换模式很麻烦。

我不喜欢 emacs,因为它坚持以我不喜欢的方式重新格式化我的代码。避免这种情况需要要么在每个文件的顶部添加注释以强制文本模式,要么学习 elisp,找到配置文件,并重新编程 emacs 以执行我想要的操作。不值得麻烦。

所以我主要使用 gedit,它没有模式,只是按照我告诉它的方式执行操作。我只在极少数情况下使用 emacs,当我必须执行跨多行的搜索和替换操作或需要花哨的正则表达式时。

有了这样的标题,我本以为会看到一篇关于 Vim 而不是 Emacs 的文章。我认为更准确的标题应该反映出它是 Emacs 的轻量级替代品。无论如何,与 Vim 相比,它仍然会让你的手指打结。Vim 用户肯定不会为了 Emacs 克隆版本而移除 Vim,无论它有多小。:-P

我明白你的意思,但对我来说,它作为 vim 的替代品很有用。我也使用 Emacs;但对于快速配置编辑,我经常退回到 Jove。熟悉的绑定,而且无需与 Vim 混淆,我发现 Vim 对我使用的 Dvorak 键盘布局不太友好。

回复 作者:Idaho Joe (未验证)

很高兴看到 Jove 仍然生机勃勃。我记得在高中时坐在 Jonathan 旁边的计算机实验室里,当时他第一次创建了它,并向他询问了它。那是很久以前的事了。:-)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.