crontab -e 仍弹 vi 是因工具各走各路:它优先读 ~/.selected_editor(无视 EDITOR),git 默认不认 EDITOR 需单独配,visudo 绕过 EDITOR 除非改用 sudoedit。

EDITOR 环境变量设错、update-alternatives 没注册、~/.selected_editor 被忽略——这三个地方任一出问题,crontab -e 或 git commit 就还是会弹 vi。
为什么改了 EDITOR 还是打开 vi
不是设置没生效,而是很多工具根本不看它:crontab -e 在 Debian/Ubuntu 上优先读 ~/.selected_editor;git 默认完全无视 EDITOR;visudo 直接绕过它,除非你用 sudoedit 替代。
-
crontab -e第一次运行时会强制调用select-editor并写入~/.selected_editor,之后就只认这个文件,export EDITOR=会被跳过 -
git必须单独配:git config --global core.editor "nano -w",-w防止换行符被破坏 -
visudo不读EDITOR,但sudoedit会读——所以日常建议用sudoedit /etc/sudoers而非visudo
select-editor 是最靠谱的用户级方案
它专为 crontab、sudoedit、git commit 这类命令设计,把选择结果存进 ~/.selected_editor,不改系统全局配置,也不依赖 shell 环境是否加载正确。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 直接运行
select-editor,选中你要的编辑器(如nano或/usr/bin/vim.basic) - 它会在
~/.selected_editor写入类似SELECTED_EDITOR="/usr/bin/nano"的内容 - 普通用户和 root 各自维护一份
~/.selected_editor,root 用户必须单独运行sudo select-editor - 删掉
~/.selected_editor后,crontab -e会再次弹选项;保留该文件,EDITOR变量就变成备胎
update-alternatives --config editor 影响的是谁
它改的是 /usr/bin/editor 这个符号链接,只对显式调用 editor 命令或依赖它的脚本生效(比如某些 GUI 工具“右键 → 编辑”),但对 crontab -e 多数无效,尤其在 Debian/Ubuntu。
- 先确认你的编辑器已注册:
sudo update-alternatives --list editor,如果没看到vim.basic,得手动加:sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim.basic 60 -
vim.tiny功能极简,连:wq都可能报错;优先用vim.basic或vim.gtk,路径可用which vim或ls /usr/bin/vim*查 - 这个设置是系统级的,所有用户都会受影响——但只要某用户有
~/.selected_editor,它仍优先于/usr/bin/editor
别漏掉 VISUAL 和路径细节
EDITOR 和 VISUAL 是两个独立变量,有些程序(如 sudoedit)只看 VISUAL,有些则 fallback 到 EDITOR。同时,路径写错比变量名写错更常见。
- 务必同时设置:
export EDITOR=/usr/bin/nano和export VISUAL=/usr/bin/nano - 写进
~/.bashrc或~/.zshrc后,必须运行source ~/.bashrc才生效;如果用 zsh 登录却改了.bashrc,那就白改 -
which nano返回/bin/nano,但update-alternatives注册的可能是/usr/bin/nano——路径不一致会导致找不到编辑器 -
edquota报cannot exec /usr/bin/editor,说明它只认/usr/bin/editor这个路径,此时必须用update-alternatives配置,EDITOR变量无效
crontab、git、sudoedit、edquota 四种方式打开,每种背后都有一套查找逻辑。~/.selected_editor 和 update-alternatives 的路径差异、root 与普通用户的配置隔离、vim.tiny 的功能缺失——这些点不一个个对上,就永远在弹 vi。

















