linux默认编辑器分三层:editor环境变量(用户级、最常用)、update-alternatives系统级配置、工具专属逻辑(如crontab依赖~/.selected_editor);改错一层,其他仍可能沿用旧设置。

Linux 终端里“默认编辑器”不是单一设置,而是分三层生效:环境变量 EDITOR、系统级替代链 update-alternatives、以及特定工具(如 crontab、git)自己的逻辑。改错一层,其他地方可能还是用原来的编辑器。
设置 EDITOR 环境变量(最常用、影响范围广)
多数命令行工具(crontab -e、git commit、sudovisudo 配合某些策略时)会优先读取 EDITOR。它只作用于当前用户,且对交互式 shell 有效。
- 临时生效(当前终端):
export EDITOR=nano或export EDITOR=/usr/bin/vim.basic - 永久生效:把上面那行加到
~/.bashrc(bash 用户)或~/.zshrc(zsh 用户)末尾,然后运行source ~/.bashrc - 注意路径:用
which vim或ls /usr/bin/vim*确认实际路径;vim.tiny不支持语法高亮和部分快捷键,vim.basic或vim.gtk更完整 - 别漏掉
visudo:它默认忽略EDITOR,但如果你用sudoedit替代visudo,就会尊重该变量
用 update-alternatives --config editor 切换系统级默认
这个命令修改的是 Debian/Ubuntu 系统中由 update-alternatives 管理的 editor 符号链接(比如 /usr/bin/editor),影响调用该链接的程序,例如某些脚本或桌面环境下的“编辑配置文件”动作。
- 执行
sudo update-alternatives --config editor,会出现编号列表,选对应/usr/bin/nano或/usr/bin/vim.basic的序号 - 该设置是系统级的,所有用户都会看到相同结果(除非被个人
EDITOR覆盖) - 如果列表里没有 vim,说明没注册进 alternatives:先运行
sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim.basic 60 - 这个方式对
crontab -e有时无效——它更信任EDITOR,而不是/usr/bin/editor
为什么 vi 还在弹出来?检查这些地方
即使设了 EDITOR 和 update-alternatives,有些场景仍固执地调用 vi,原因很具体:
-
crontab -e第一次运行时会强制让你选编辑器(通过select-editor),之后就记在~/.selected_editor里,EDITOR反而被忽略 -
git默认不看EDITOR,得单独配:git config --global core.editor "nano -w"(-w避免换行符问题) - 某些发行版(如 CentOS Stream)默认没装完整 vim,
vi实际指向vim.tiny,此时改EDITOR指向vim.tiny也没用——得先sudo dnf install vim-enhanced或sudo apt install vim - 终端复用会话(如 tmux、screen)可能继承旧环境变量,新设的
EDITOR不自动同步,需重新 attach 或手动 export
验证是否真生效了
别只信 echo $EDITOR,要实测关键命令:
- 运行
echo $EDITOR看输出是否符合预期 - 执行
crontab -e,观察打开的是哪个编辑器(首次运行后会记住~/.selected_editor) - 运行
git commit(先改一个文件),看弹出的是否是你设的编辑器 - 检查
~/.selected_editor文件内容,它可能覆盖你的环境变量设置
真正麻烦的从来不是改哪一行,而是不同工具各自维护一套“默认”逻辑,且不互相通知。动手前先确认你要改的是哪个具体命令的行为,再选对应层级的方案。











