Измените редактор по умолчанию на vim для _ sudo systemctl edit [unit-file] _

Вопрос или проблема

[4.13.12-1-ARCH с gnome3 и gdm на Xorg]

Я уже установил свои переменные окружения VISUAL и EDITOR на vim. Аналогично я попытался установить SYSTEMD_EDITOR="vim"; export SYSTEMD_EDITOR в моем ~/.bashrc, но безрезультатно.

Когда я модифицирую юнит-файлы в Arch (systemd) через

 $ sudo systemctl edit _unit_ 

Я оказывается смотрю на nano. Жизнь слишком коротка, и я хочу использовать vim во что бы то ни стало. Как мне это сделать?

Первый метод: вы можете добавить эту строку в ~/.bashrc:

export SYSTEMD_EDITOR=vim

А затем выполните sudo visudo и добавьте эту строку:

Defaults  env_keep += "SYSTEMD_EDITOR"

Начните новую сессию bash, чтобы изменения вступили в силу, затем выполните sudo systemctl edit <foo> как обычно.

Второй метод — использовать update-alternatives:

Установите желаемый editor, например vim.gtk3:

$ which editor
editor is /usr/bin/editor
$ sudo update-alternatives --install "$(which editor)" editor "$(which vim.gtk3)" 15

Затем выберите желаемый editor:

$ sudo update-alternatives --config editor
Существует 7 вариантов альтернативного редактора (предоставляющего /usr/bin/editor).

  Выбор    Путь                Приоритет   Статус
------------------------------------------------------------
  0            /usr/bin/vim.gtk3    50        авто режим
  1            /bin/ed             -100       ручной режим
* 2            /bin/nano            40        ручной режим
  3            /usr/bin/code        0         ручной режим
  4            /usr/bin/gedit       5         ручной режим
  5            /usr/bin/vim.basic   30        ручной режим
  6            /usr/bin/vim.gtk3    50        ручной режим
  7            /usr/bin/vim.tiny    15        ручной режим

Нажмите <enter> чтобы оставить текущий выбор[*], или введите номер выбора: 6
update-alternatives: использование /usr/bin/vim.gtk3 для предоставления /usr/bin/editor (editor) в ручном режиме

Третий метод — установить EDITOR во время выполнения:

sudo EDITOR=vim systemctl edit <foo>

Приоритет: первый метод > третий метод > второй метод.

Не пытайтесь установить “GUI” редактор, такой как gedit, потому что Почему gksu/gksudo или запуск графического приложения с sudo не работают с Wayland? и
Gedit использует 100% ЦП во время редактирования файлов

Вы устанавливаете переменные для своего пользователя, но выполняете команду systemctl от имени root (sudo). Поэтому переменные, которые вы установили для своего пользователя, не имеют значения.

Чтобы это исправить, вы можете либо (но лучше выбрать 1):

  1. Запустите sudo с -E, чтобы он экспортировал текущую среду:

    sudo -E systemctl edit _unit_
    
  2. Добавьте переменную (вам нужна только SYSTEMD_EDITOR для этого) в ~/.profile пользователя root:

    export SYSTEMD_EDITOR="/bin/vi" 
    

    Затем выполните

    sudo -i systemctl edit _unit_ 
    

Наконец, обратите внимание, что вам нужно указывать полный путь к вашему редактору, а не только его имя. То есть /bin/vi, а не vim.

Я использую алиас оболочки:

sc="sudo SYSTEMD_EDITOR=/bin/vi /usr/bin/systemctl"

Тогда просто:

sc edit service-name

Это также полезно для избежания ввода 7 из 9 символов systemctl в таких случаях, как restart и т. д.

Единственные способы, которые сработали для меня, это:

  • Корневая оболочка (su или sudo -i), установка SYSTEMD_EDITOR=/usr/bin/vim, затем systemctl edit <unit>
  • Установка SYSTEMD_EDITOR, затем sudo -E systemctl edit <unit>
  • sudo SYSTEMD_EDITOR=/usr/bin/vim systemctl edit <unit>

Я пробовал устанавливать EDITOR и VISUAL и SYSTEMD_EDITOR для bash и zsh, для пользователя и root, но это работало только из корневой оболочки, устанавливая переменную после sudo, или используя sudo с -E.

Я также редактировал sudoers (sudo visudo), чтобы добавить:
Defaults env_keep += "SYSTEMD_EDITOR"
Тем не менее, я обнаружил, что переменная не отображалась в sudo systemctl show-environment, хотя sudo echo $SYSTEMD_EDITOR показывал vim.

Я установил переменную с помощью:
sudo systemctl set-environment SYSTEMD_EDITOR=/usr/bin/vim
И подтвердил с помощью sudo systemctl show-environment.

Даже после этого единственные способы, которые работают для меня, это те, что указаны вверху.

Что ж, самый быстрый способ, который я нашел, это в основном удалить nano (sudo yum remove nano >в rhel 9.4), а затем, когда я снова использовал sudo systemctl edit –full, он автоматически открывается в VIM.

Надеюсь, это поможет.

Ответ или решение

Чтобы изменить редактор по умолчанию на vim для команды sudo systemctl edit [unit-file] в системе Arch Linux, выполните следующие шаги:

1. Установка необходимых переменных окружения

Вы уже правильно настроили переменные окружения VISUAL и EDITOR. Однако для управления системными сервисами через systemctl вам нужно установить переменную среды SYSTEMD_EDITOR. Вы можете сделать это, добавив следующую строку в ваш файл ~/.bashrc:

export SYSTEMD_EDITOR="vim"

После этого не забудьте перезапустить оболочку или выполнить команду source ~/.bashrc, чтобы изменения вступили в силу.

2. Настройка sudo для передачи переменных окружения

Переменные окружения, установленные вашей учетной записью, не будут доступны в контексте sudo, если не указать это явно. Чтобы передать переменную SYSTEMD_EDITOR, выполните команду:

sudo visudo

Добавьте следующую строку в файл sudoers:

Defaults env_keep += "SYSTEMD_EDITOR"

Это обеспечит передачу переменной SYSTEMD_EDITOR, когда вы используете sudo.

3. Перезапуск сессии

После внесения изменений в ~/.bashrc и файл sudoers перезапустите терминал или начните новую сессию, чтобы убедиться, что настройки применены.

4. Запуск команды с использованием vim

Теперь вы можете использовать команду:

sudo systemctl edit <unit-file>

Для более прямого задания редактора можно также использовать следующее:

sudo EDITOR=vim systemctl edit <unit-file>

Этот метод заменит редактор только для текущей команды.

5. Альтернативные методы

Если предыдущие шаги не работают, вы можете воспользоваться следующими методами:

  • Установка альтернативного редактора. Вы можете установить vim как редактор по умолчанию, используя команду:
sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 100

Затем выберите vim как основной редактор с помощью:

sudo update-alternatives --config editor
  • Настройка переменной окружения для root. Если вы предпочитаете, вы можете добавить переменную SYSTEMD_EDITOR непосредственно в ~/.profile пользователя root. Для этого выполните:
sudo bash -c 'echo "export SYSTEMD_EDITOR=/usr/bin/vim" >> /root/.profile'

И затем выполните команду sudo -i для переключения в root-сессию.

6. Использование alias

Еще один практичный способ сократить ввод команды — это задать алиас. Добавьте следующую строку к своему ~/.bashrc:

alias sc='sudo SYSTEMD_EDITOR=/usr/bin/vim /usr/bin/systemctl'

Теперь вы можете просто использовать sc edit <unit-file>.

Заключение

Теперь вы должны иметь возможность использовать vim в качестве редактора по умолчанию для редактирования системных файлов с помощью systemctl. Если вы столкнулись с трудностями, проверьте правильность выставленных переменных и настройки sudo. Используйте указанные методы по необходимости, и выбирайте тот, который подходит именно вам.

Оцените материал
Добавить комментарий

Капча загружается...