Изменить редактор по умолчанию, когда sudo visudo

23

При этом sudo visudoпо умолчанию используется редактор nano.
Я хочу изменить это на viили vim.

Я уже сделал vimредактор по умолчанию, и использовать его в качестве замены для geditна открытом PHP, .txt, .c и .h файлов, поместив vim.desktopфайл в ~/.local/share/applications/и правильно редактирования либо ~/.local/share/applications/mimeapps.listили /etc/gnome/defaults.list. Однако, по-видимому, это не относится к nano.

Любая подсказка?

Cbhihe
источник
Ты проверил man visudo?
fkraiem
С тех пор, как я написал это, я узнал еще кое-что - надеюсь, что еще добавлю; В дистрибутивах Linux все по-другому.
Volker Siegel
Да, я установил для моего env-var VISUAL значение vim и «экспортировал» в .bashrc и .bash_profile, а затем получил оболочку, но безрезультатно. Даже вышел из системы и снова вошел в сеанс, чтобы убедиться.
Cbhihe
2
Я добавил sudo -E visudoпозже в ответ, ты пробовал это? -E заставляет sudoне удалять все переменные env. Это делает , потому что убунт имеет линию Defaults env_resetв/etc/sudoers
Фолькер Зигель
Кроме того, вы пробовали update-alternativesя тоже добавил?
Volker Siegel

Ответы:

19

Проблема не в том, что это не относится к nano, а в том, что это не относится к оболочке:

Просто установите VISUALпеременную среды:

export VISUAL=vim

Добавьте это тоже ~ / .bashrc, чтобы сделать его постоянным.

Поскольку вы, похоже, используете vim в целом, установите оба параметра VISUALи EDITOR:

export VISUAL="vim"
export EDITOR="$VISUAL"

или более POSIX-правильный

VISUAL="vim" ; export VISUAL
EDITOR="$VISUAL" ; export EDITOR

Я предполагаю, nanoбыло значение одной или обеих переменных.

Чтобы на самом деле использовать редактор в visudo, нам нужно обработать то, что sudoобычно не сохраняет переменные окружения. Опция -Eменяет это.

sudo -E visudo

Без -Eздесь вы бы в конечном итоге по умолчанию nanoснова


Две переменные, которые используются задолго до того, как файлы были названы *.desktopили mime*даже существуют.
(И впечатляет то, что они фактически использовались в качестве общего стандарта.)
В Ubuntu системное значение по умолчанию установлено с помощью sudo update-alternatives --config editor. Показывает меню для изменения текущей ассоциации.


Смотрите раздел ENVIRONMENTв man visudo:

  VISUAL           Invoked by visudo as the editor to use

  EDITOR           Used by visudo if VISUAL is not set
Volker Siegel
источник
1
Вы пробовали это? По умолчанию sudoудаляет большинство переменных среды из среды для выполняемой команды. VISUAL=vim sudo visudo(и варианты, которые вы предлагаете) не работает для меня и не следует ожидать, что будет работать. sudo VISUAL=vim visudoработает, хотя. (Я только что попробовал оба снова, чтобы быть уверенным.) Кстати, VISUALи EDITORпо умолчанию не установлены, не установлено nano. VISUALи EDITORне являются механизмом, посредством которого visudoвыбирается nanoв конфигурации по умолчанию (за исключением тех случаев, когда он консультируется с ними, находит, что они не заданы или не заполнены, и движется дальше).
Элия ​​Каган
3
Это работает с sudo -E visudo- что, безусловно, должно быть в ответе, верно.
Фолькер Сигел
+1 и я принимаю ваш отличный ответ, Фолькер. "Бестен Данк!" Я все еще получал сообщение об ошибке с флагом -E о том, что мне не разрешено передавать переменные среды, но затем я перешел от пользователя с ограниченным доступом к пользователю с привилегиями администратора и бинго! Все работает хорошо.
Cbhihe
О, я рад добавить еще одну вещь, которая может пойти не так / может помочь;) Не могли бы вы проверить параметры (строки с Default) в вашем / etc / sudoers? Я думаю, что есть опция, которая запрещает это, но ее нет в моем файле по умолчанию.
Volker Siegel
@VolkerSiegel: Я полагаю, что вы ссылаетесь на значение по умолчанию для env_reset в / etc / sudoers . Это установлено именно так в моем случае.
Cbhihe
8

Как описано в этом ответе , добавьте

Defaults editor=/path/to/editor

в файл sudoers .

Примечание: это будет работать, только если редактируемый файл содержит Defaults editor=/path/to/editorстроку или содержит файл, который ее содержит.

Например: по visudo -f /etc/sudoers.d/my_sudoers_extensionумолчанию будет Nano.

Мухамед Хусейнбашич
источник
2
+1: Хорошо, и я не заметил этого, когда впервые начал эту тему, спасибо.
Cbhihe
4

Если вы никогда не планируете использовать nano, вы также можете просто удалить его. Тогда система будет использовать vi / vim по умолчанию.

sudo apt-get purge nano

Я знаю, что это не официальный ответ, но это одна из первых команд для меня после установки Ubuntu.

Филипп Классен
источник
Это определенно квалифицируется как «некропостинг», но эй ... Ваш ответ интересен, поскольку он имеет дело с Ubuntu. В некоторых других дистрибутивах (среди них ArchLinux) есть только те редакторы, которые вы установили в первую очередь, поэтому у вас нет ни pbm, с которым я столкнулся в Ubuntu, ни необходимости прибегать к мерам, которые вы предлагаете. В данном случае (Ubuntu + Nano + VIM), я чувствую, что многие могут нуждаться в опциях с точки зрения редакторов. Это правда, что редко можно встретить симпатии emacsи vimактивно сосуществовать в профиле любого пользователя. Тем не менее, nanoи vimслучиться вместе в дикой природе ... Держите nano!
Cbhihe
1
безусловно, лучший ответ
botkop
1
emacsи vimдействительно счастливо сосуществуют и постоянно используются. nanoтак же, как вредитель, чем раньше он будет удален из системы, тем лучше. Я понимаю, что некоторые люди могут находить это удобным, но этот ответ совершенно действителен.
mementum