Вопрос или проблема
[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):
-
Запустите
sudo
с-E
, чтобы он экспортировал текущую среду:sudo -E systemctl edit _unit_
-
Добавьте переменную (вам нужна только
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. Используйте указанные методы по необходимости, и выбирайте тот, который подходит именно вам.