更改默认的crontab编辑器

我正在尝试将默认编辑器从nano更改为vim

我已经运行了以下命令:

sudo update-alternatives --config editor

update-alternatives --config editor

现在它们都输出:

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
* 3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

我已经重新启动了我的ssh会话和sshd,但是crontab -e仍然在nano中打开。还需要做什么?

1我觉得这些答案实际上都没有回答到问题,对吧? - geotheory
这里有一个更详细的答案:https://askubuntu.com/questions/977538/16-04-crontab-e-editor-settings-python-syntax-highlighting-in-vim - SDsolar
10个回答

只需简单运行select-editor,这将让你选择任何你想要的编辑器。

10我认为这是一个比选择的答案更好的回答。不需要更改我的 bash 配置文件来设置编辑器。通过退出登录然后重新登录进行验证。 - Paul Carlton
3绝对应该被接受为答案!这帮了很多忙!:D - Fadi
3这是唯一对我有效的答案。 - cjohansson
3最佳答案。... - We are Borg
1继续是最佳选择!谢谢,@MostafaShahverdy! - dearN
选择编辑器提供什么功能? - Brunis
@Brunis 在控制台中运行 select-editor 命令。这是一个普通的 shell 命令。 - JamesHoux
在Amazon Linux 2上,选择编辑器无法正常工作。 - Tomas Gonzalez
我想使用微型设备,但它不在列表上... - Calmarius
在这种情况下,如果您知道您的编辑器路径,您可以编辑 ~/.selected_editor 并输入类似于 SELECTED_EDITOR="/usr/bin/vim" 的内容。 - Mostafa Shahverdy
zsh: 找不到命令: select-editor - xgqfrms
有没有办法使用自定义编辑器,比如Sublime Text 4? - Gabriel Staples
在OpenSUSE Tumbleweed中,select-editor也不存在,并且它甚至不在可安装的软件包列表中显示。看起来你唯一的选择是为这些情况设置环境变量。 - Andyc

尝试使用ssh会话,然后执行以下操作。
export EDITOR=vim

或者可能
export EDITOR=/usr/bin/vim.basic

设置EDITOR变量的格式取决于您使用的shell。

在Ubuntu中,您可以通过将上述内容添加到~/.profile来在登录时设置EDITOR环境变量。

您的SSH会话将读取远程主机上类似的文件(如果存在),该文件名为~/.ssh/environment。这必须由ssh守护程序配置明确定义。请参阅man sshd_config并查找PermitUserEnvironment以获取更多详细信息。


1这在CentOS上也适用。 - machineaddict
你不想在这里使用.bashrc的原因是什么?对我来说,它似乎可以工作,或者是.profile更好一些吗? - Nate
4下面的选择编辑答案是一个更好的答案。 - mcarans
编辑器是 export EDITOR="emacsclient -c",但它仍然以图形用户界面(GUI)方式打开。 - alper

如果你只想暂时选择编辑器,可以按照以下步骤进行操作。
EDITOR=nano crontab -e

如果您想以root用户身份执行此操作,则:
sudo EDITOR=nano crontab -e

这将为命令设置EDITOR环境变量。

谢谢。这帮助我在不需要更改root用户的编辑器或其他内容的情况下编辑sudo/root的crontab(在共享虚拟机上,其他人可能想要使用不同的编辑器)。 - Max Starkenburg
这个也对我有很大帮助,但是如何永久更改crontab编辑器呢?我将其更改为sudoedit作为文本编辑器,但它仍然使用vim来编辑crontab(除非我使用这个答案)。然而,我不想每次都输入sudo EDITOR=nano。是的,我知道很多人不同意,但我确实更喜欢nano,抱歉。 - Andyc

我个人的偏好...
cd /bin
mv nano nano_must_die
ln -s /usr/bin/vim nano

我喜欢它,在更新替代方案无效后,它对我来说运行得足够好。 - Cole Busby
12对于那些不认为学习vi命令只是为了调整一些配置文件而有价值的管理员来说,我不知道nano有什么问题。 - Max
6我猜你可以在你自己的个人电脑上做任何你喜欢的事情。但是对于与其他人共享的机器而言,这个建议本质上会禁用所有用户的 nano,以至于当用户明确要求使用 nano 时,他们会得到 vim。这样做有什么意义呢?如果他们想要 vim,他们会直接要求它的。如果问题在于系统在某种情况下自动调用 nano,而你个人更喜欢 vim,那么请更改配置。 - gwideman
1我猜这是一个对Vi粉丝来说具有讽刺/讽刺意味的笑话,但并不是每个人都能理解笑话,我猜。 - Mladen B.
你为什么要杀掉 nano - alper
负评。我明白这是个玩笑,但玩笑并不是有用的回答。而且,我永远不想在一个有人实际上改名 nano 而不是正确配置事情的地方工作。 - Clonkex

从“man crontab”:
   The -e option is used to edit the  current  crontab  using  the  editor
   specified  by  the  VISUAL  or EDITOR environment variables.  After you
   exit from the editor, the modified crontab will be installed  automati‐
   cally.  If  neither  of  the environment variables is defined, then the
   default editor /usr/bin/editor is used.

也许你将EDITOR环境变量设置为nano了吧?

在我的Ubuntu 12.04电脑上,crontab使用~/.selected_editor文件,该文件包含所选编辑器的路径。请进行编辑:
nano ~/.selected_editor

我直接编辑了它,或者使用了select-editor,这是一个执行相同操作的脚本。请编辑以下行:
SELECTED_EDITOR="/usr/bin/vim.basic" 

我个人认为,人们不应该在/etc或/bin中更改任何内容来完成这个任务。这是一个用户级别的事情,而不是系统范围的任务。

对于gedit:SELECTED_EDITOR="/usr/bin/gedit" - xinthose

我遇到了相同的问题 - crontab -e 依赖于 select-editor,visudo 依赖于 "alternatives" 的配置

我的解决方法:

以 root 身份运行这两个命令

# update-alternatives --install /usr/bin/editor editor /usr/bin/sensible-editor 50

# select-editor 

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/sensible-editor
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [1]: 3

作为root用户?最好使用sudo(例如,请参阅sudo相对于su的优势)。 - Marc Vanhoomissen

我在使用select-editor和update-alternatives时遇到了困难,我的解决办法是简单地编辑链接:
  1. sudo rm /etc/alternatives/editor
  2. sudo ln -s /usr/bin/vim /etc/alternatives/editor
现在,editor打开的是Vim。

尝试了上面的答案后,对我来说(在Debian strech中)唯一有效的方法是通过运行以下命令删除~/.selected_editor
rm ~/.selected_editor

然后在下次运行crontab -e时选择新的编辑器。

这在我的GCE Linux Ubuntu上运行成功。谢谢。 - jason m

除了检查环境变量EDITOR是否设置正确外,您还应该检查变量VISUAL是否也设置正确。 VISUAL将覆盖EDITOR 根据文档:

使用VISUAL或EDITOR环境变量指定的编辑器,使用-e选项来编辑当前的crontab。

例如,如果您设置了
$ export EDITOR=vim
$ export VISUAL=nano

然后命令crontab -e 仍然会在 nano 中打开。
你应该将两者都设置为首选编辑器,就像对我来说是 vim:
$ export EDITOR=vim
$ export VISUAL=vim

然后输入命令crontab -e将会在vim中打开。

有没有相应的命令可以为root(sudo)导出一个变量,并且可能使更改永久生效(在重启后保留)? - Andyc