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

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 目录中。

我在/etc/profile.d中添加了一个名为 myBashConfig.sh 的文件。. 在 /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 进入配置。在Composer Preferences 部分,使用 X 选择 Enable Alternate Editor CommandEnable 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 而不是其他编辑器,我对我的系统进行的这些更改使得 Vim 可以作为默认编辑器,在默认情况下使用其他编辑器的程序中也能使用 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.