CentOS 7默认vi指向vim-minimal,功能受限;应通过update-alternatives注册并切换vi指向vim-enhanced,同时设置EDITOR环境变量为/usr/bin/vim,二者缺一不可。

CentOS 7 默认的 vi 命令指向的是 vim-minimal,功能受限(不支持语法高亮、鼠标、方向键异常等),直接改用 vim 是最实际的解法——但要注意:改 vi 别名 ≠ 改系统级默认编辑器,两者作用范围不同,必须分清楚。
确认当前 vi 指向哪个二进制文件
先查清楚你敲 vi 时到底启动了什么:
ls -l /usr/bin/vi
常见输出是:/usr/bin/vi -> /etc/alternatives/vi,再追一层:
ls -l /etc/alternatives/vi
很可能指向 /usr/bin/vim.minimal。这才是问题根源——不是没装 vim,而是系统通过 alternatives 机制锁死了默认行为。
别急着改 alias,先解决这个底层映射。
用 update-alternatives 切换 vi 的实际指向
这是 CentOS 7 最新推荐方式,影响所有用户和系统命令(比如 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”
⚠️ 注意:vim-enhanced 必须已安装(yum install vim-enhanced),只装 vim-minimal 不够。
设置 EDITOR 环境变量(影响 crontab、git、sudo -e 等)
很多工具(如 crontab -e、git commit)读取的是 $EDITOR,和 vi 命令无关:
- 临时生效:
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,直接导致登录失败
真正需要的不是 alias,而是让 vi 这个名字背后真正跑起来的是完整版 vim——这靠 update-alternatives 才能兜底。
这里最容易被忽略、但偏偏最要命的点就在于:update-alternatives --config vi 和 export EDITOR=... 这两步一定要配套完成,少了哪一个都不行。前者决定的是在命令行里直接输入 vi 时到底调用谁;后者影响的则是各种子系统和程序的默认编辑器选择。只做其中一步,表面上看似已经改好了,但一到某些场景,还是会冷不丁跳出 nano 或者 vim-tiny。