在 CentOS 7 中,默认的 vi 通常指向 vim-minimal,功能较为精简;正确做法是通过 update-alternatives 注册并切换 vi 到 vim-enhanced,同时把 EDITOR 环境变量设置为/usr/bin/vim,这两个步骤都必须完成,缺一不可。

CentOS 7 默认的 vi 命令实际指向的是 vim-minimal,因此功能不完整,常见表现包括不支持语法高亮、鼠标操作受限、方向键异常等。想把 CentOS 7 默认编辑器改成 vim,最稳妥、最实用的方法就是切换到完整版 vim。不过要特别注意:修改 vi 的指向,并不等同于修改系统默认编辑器,这两者影响范围不同,不能混为一谈。
确认当前 vi 指向哪个二进制文件
首先要确认,在 CentOS 7 里执行 vi 时,系统实际启动的是哪个程序:
ls -l /usr/bin/vi
常见输出通常是:/usr/bin/vi -> /etc/alternatives/vi,接着继续往下查看:
ls -l /etc/alternatives/vi
很多情况下,它最终会指向 /usr/bin/vim.minimal。这才是 CentOS 7 默认 vi 功能受限的根本原因——并不是系统没有安装 vim,而是系统通过 alternatives 机制把默认行为固定到了精简版。
因此,不要急着去改 alias,而是应该先从这个底层映射关系入手解决问题。
用 update-alternatives 切换 vi 的实际指向
这是在 CentOS 7 中把默认 vi 修改为 vim 的推荐方法,属于系统级配置,会影响所有用户以及依赖默认编辑器的系统命令,例如 systemctl edit、visudo 等:
- 执行
update-alternatives --config vi - 如果提示 “no alternatives for vi”,说明系统还没有注册
vim-enhanced,此时先执行:update-alternatives --install /usr/bin/vi vi /usr/bin/vim-enhanced 1 - 然后再次运行
--config vi,选择对应的/usr/bin/vim-enhanced编号 - 最后验证:
vi --version应显示 “VIM - Vi IMproved”,而不是 “tiny” 或 “minimal”
⚠️ 注意:要想在 CentOS 7 中成功把 vi 切换为完整版 vim,必须先安装 vim-enhanced(yum install vim-enhanced)。仅安装 vim-minimal 是远远不够的。
设置 EDITOR 环境变量(影响 crontab、git、sudo -e 等)
很多程序和命令,例如 crontab -e、git commit、sudo -e,读取的并不是 vi 命令本身,而是环境变量 $EDITOR。所以如果你想真正把 CentOS 7 默认编辑器设置为 vim,这一步同样不能省略:
- 临时生效:
export EDITOR=/usr/bin/vim - 永久生效(仅当前用户):
echo 'export EDITOR=/usr/bin/vim' >> ~/.bashrc && source ~/.bashrc - 全局生效(需要 root 权限):
echo 'export EDITOR=/usr/bin/vim' >> /etc/profile.d/editor.sh
⚠️ 不要写成 export EDITOR=vim,因为不带完整路径时,某些环境下可能会出现找不到命令的问题;另外也不要忘记执行 source,否则当前会话或新终端中的配置可能不会立即生效。
别 alias vi 到 vim(除非你明确知道后果)
网上常见的做法是执行 echo "alias vi=vim" >> /etc/profile,看起来简单直接,但实际上存在明显问题:
- 它只对交互式 bash 有效,像
sudo vi、su -c vi、脚本里调用的vi都不会走 alias - 如果系统中的
vim命令本身仍然指向vim-minimal(某些精简镜像中确实会出现这种情况),那么即使做了 alias,体验依旧没有改善 - 如果把
>>误写成>,还会直接清空整个/etc/profile,严重时甚至可能导致系统登录异常
真正正确的思路,不是简单把 vi 映射成一个 alias,而是让 vi 这个命令背后真正调用的是完整版 vim。要做到这一点,依靠 update-alternatives 才是更可靠、更标准的方式。
这里最容易被忽视、但也是 CentOS 7 修改默认编辑器为 vim 时最关键的一点就是:update-alternatives --config vi 和 export EDITOR=... 这两个步骤必须配合完成。前者决定你在终端直接输入 vi 时,系统到底调用哪个编辑器;后者决定各种子系统、工具和程序在需要打开默认编辑器时优先使用谁。只做其中一步,看似已经把 CentOS 7 默认编辑器改成了 vim,但在某些实际场景下,仍然可能突然弹出 nano、vim-tiny 或其他不符合预期的编辑器。
