如何在 Linux 上配置 Vim 作为默认编辑器

Vim 是我最喜欢的编辑器。我对系统进行的这些更改使 Vim 可以在默认情况下使用其他编辑器的程序中使用。
32 位读者喜欢这个。
Person using a laptop

我使用 Linux 大约 25 年了,在此之前使用 Unix 几年。在此期间,我培养了对一些日常使用工具的偏好。我使用的最重要的工具之一是 Vim 编辑器。

我在 90 年代初学习 Solaris 时开始使用 Vi,因为我被告知它始终可以在任何系统上使用,我的经验证明这是真的。我尝试过其他编辑器,它们都可以完成工作。但是,我发现 Vim 最适合我,而且我经常使用它,以至于我的 Vim 肌肉记忆导致我即使在使用其他编辑器时也尝试使用它的命令键。

此外,我真的很喜欢 Vim。

许多配置文件使用 Vi 而不是 Vim,您可以运行 vi 命令。但是,vi 命令是指向 vim 的链接。

许多 Linux 工具使用模拟或直接调用 NanoEmacs 或 Vim 的编辑器。其他一些工具允许用户(比如那些有明确偏好的用户)链接到他们喜欢的编辑器。对我影响最大的两个例子是 Bash 命令行编辑(默认使用 Emacs)和 Alpine 文本模式电子邮件客户端(默认使用 Pico 编辑器)。事实上,Pico 编辑器是专门为 Pine 电子邮件客户端编写的,Pine 电子邮件客户端是 Alpine 的前身。

并非所有使用外部编辑器的程序都是可配置的。有些仅使用开发人员指定的编辑器。对于那些可配置的应用程序,有不同的方法来选择您首选的编辑器。

Linux 命令行编辑

除了实际编辑文本文件外,我使用的另一个需要最多编辑的工具是 Bash shell。默认的 Bash 编辑器是 Emacs。虽然我用过 Emacs,但我绝对更喜欢 Vim。所以很多年前,我将 Bash 命令行编辑的默认编辑风格从 Emacs 切换到 Vim,这让我感觉更舒服。

配置 Bash 有多种方法。您可以使用本地配置文件,例如 /home/yourhomedirectory/.bashrc,它只会更改您的用户帐户的默认设置,而不会更改同一系统上的其他用户。我更喜欢全局更改这些类型的更改,基本上意味着我的个人帐户和 root。在第二种情况下,您可以创建自己的配置文件并将其放在 /etc/profile.d 目录中。

我添加了一个名为 myBashConfig.sh 的文件到/etc/profile.d/etc/profile.d 目录中包含所有已安装的 shell 的文件。在启动终端会话期间,每个 shell 只会根据文件名扩展名读取为它指定的文件。例如,Bash shell 只读取扩展名为 .sh 的文件。

<SNIP>
alias vim='vim -c "colorscheme desert" '
# Set vi for bash editing mode
set -o vi
# Set vi as the default editor for all apps that check this
EDITOR=vi
<SNIP>

此全局 Bash 配置文件段中的行 set -o vi 将 Vi 设置为默认编辑器。此 set 命令上的 -o 选项将 vi 定义为编辑器。您需要关闭任何正在运行的 Bash 会话并打开新的会话才能使其生效。

此时,您现在可以使用所有熟悉的 Vim 编辑命令,包括光标移动。只需按 Escape 键进入 Vim 编辑模式。我特别喜欢多次使用 b 向后移动多个单词的光标的能力。

将 Vim 设置为其他程序的默认编辑器

一些 Linux 命令行工具和程序检查 $EDITOR 环境变量以确定要使用哪个编辑器。您可以使用以下命令检查此变量的当前值。我在我新安装的虚拟机上执行此操作以验证默认值实际上是什么。

# echo $EDITOR
/usr/bin/nano
#

默认情况下,检查 $EDITOR 环境变量的 Fedora 程序将使用 Nano 编辑器。如上面的代码片段所示,将行 EDITOR=vi 添加到 myBashConfig.sh 会将默认值更改为 Vi (Vim) 编辑器。并非所有使用外部编辑器的命令行程序都会检查此环境变量。

在 Alpine 中编辑电子邮件

几周前,我决定 Pico 作为我的电子邮件编辑器对我来说不太好用。我可以让它工作,并且在从 Thunderbird 切换到 Alpine 后一段时间内确实这样做了。我发现当我尝试使用 Vim 键序列时,Pico 会妨碍我,从而影响我的生产力。

我在 Alpine 帮助中读到,可以更改默认编辑器。我决定将其更改为 Vim。这实际上很容易做到。

在 Alpine 主菜单上,按 S 键进入设置,然后按 C 进行配置。在Composer Preferences(撰写器首选项)部分中,使用 X 选择 Enable Alternate Editor Command(启用备用编辑器命令)和 Enable Alternate Editor Implicitly(隐式启用备用编辑器)项。在 Advanced User Preferences(高级用户首选项)部分中的几个页面下,找到 Editor(编辑器)行。如果尚未更改,则应如下所示。

Editor    = <No Value Set>

使用光标条突出显示此 Editor(编辑器)行,然后按 Enter 键以编辑该行。将 <No Value Set> 更改为 vim,按 Enter,然后按 E 键退出并按 Y 保存您所做的更改。

要使用 Vim 编辑电子邮件,只需输入电子邮件正文,Vim 就会自动启动,就像 Pico 一样。我所有喜欢的编辑功能都在那里,因为它实际上使用的是 Vim。即使是退出 Vim 的 Esc :wq 序列也是相同的。

最后的想法

我非常喜欢 Vim 而不是其他编辑器,我对系统进行的这些更改使其可以在默认情况下使用其他编辑器的程序中使用。一些程序使用 $EDITOR 环境变量,因此您只需进行一次更改。其他程序(如 Alpine)具有用户配置选项,您必须为每个程序单独设置。

这种选择首选外部编辑器的能力非常符合 Unix 哲学宗旨,“每个程序应该只做一件事并做好”。当已经有几个非常好的编辑器时,为什么要编写另一个编辑器呢?它也符合 Linux 哲学宗旨,“使用你最喜欢的编辑器”。

当然,您可以将默认文本模式编辑器更改为 Nano、Pico、EMACS 或您喜欢的任何其他编辑器。

David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。他自 1996 年以来一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员的 Linux 哲学”的坚定支持者和传播者。

5 条评论

对于那些讨厌 Vim 的人,我建议尝试使用 -y 开关。它是一种简单的模式,使其更像常规文本编辑器,例如 nano 或 ed。

但是,您将必须使用 ctrl+o 调出命令模式,然后执行 :q 或任何情况需要退出它的操作。

请注意,通过将 "set editing-mode vi" 添加到 ~/.inputrc 而不是将 "set -o vi" 放入 ~/.bashrc 中,您可以将 vi 键绑定扩展到 bash 之外的 *任何* 使用 GNU readline 的程序。

您可以做更多有趣的事情来自定义您的 readline 行为(包括完成选项和在提示符中显示编辑模式),请参阅 https://gnu.ac.cn/software/bash/manual/html_node/Readline-Init-File-Syntax.html

你基本上改变了我的生活!

我在我的 ~/.bashrc 中尝试了“set -o vi”几周,但由于它不接受 ctrl-L 热键来清除屏幕,所以我不得不放弃(我的肌肉记忆非常习惯于执行 ctrl-L)。

现在您提出了一个接受该热键的解决方案。

我爱你!

当/如果您阅读此内容时,我希望您感受到我们通过知道我们让互联网上的一个随机的人感到快乐而感到的温暖。:)

回复 作者 Steven Bakker

一个提示。也许?我按照描述在 profile.d 中创建了 .sh 文件,只是将 "vi" 替换为 "vim"。当我重新启动计算机时,它不会从 gui 进度登录 - 每次尝试都只会将我返回到登录页面。我发现我可以从终端登录,在那里我收到来自 bash 的关于 -o vim 的投诉。我从 profile.d 中删除了该文件,并且图形登录已恢复。我尚未将命令更正为“vi”并再次尝试,但会这样做。只是想警告其他人这种可能性

似乎就是这样。也许是对读者不要自作聪明的警告。“vi” 是的。“vim” 不行。Manjaro Linux。

感谢这篇文章,也感谢 Maxim Stewart 和 Steven Bakker 的评论。

回复 作者 LS Letner

© . All rights reserved.