如何在 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
#

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

在 Alpine 中编辑电子邮件

几周前,我决定 Pico 作为我的电子邮件编辑器对我来说效果不佳。我可以使其工作,并且在从 Thunderbird 切换到 Alpine 后,我使用了一段时间。我发现当我尝试使用 Vim 键序列时,Pico 会妨碍我,影响我的工作效率。

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

在 Alpine 主菜单上,按 S 键进入设置,然后按 C 进入配置。在作曲器首选项部分中,使用 X 选择启用备用编辑器命令隐式启用备用编辑器项。在高级用户首选项部分向下滚动几页,找到 编辑器 行。如果尚未更改,则应如下所示。

Editor    = <No Value Set>

使用光标栏突出显示此 编辑器 行,然后按 Enter 键编辑该行。将 <未设置值> 更改为 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

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