Запустите Vim как мой пользователь с привилегиями root


10

У меня есть мои собственные файлы Vim ~/.vimи настройки в ~/.vimrc. Тем не менее, иногда мне приходится редактировать некоторые файлы /etcи тому подобное.
Если я начну Vim, как это:

$ sudo vim /etc/rc.conf

Я теряю свой конфиг, так как Vim использует его по умолчанию. Итак: как я могу запустить Vim с правами root для редактирования файлов без потери настроек моего пользователя (которые находятся в моем домашнем каталоге)?
Я пытался:

$ su username -c "vim /usr/lib/python2.7/setuptools/dist.py"

но Баш дает мне Permission denied. Тем не менее, приведенная выше команда работает, например , для: /etc/acpi/handler.sh. Это почему?

Примечание: имя пользователя не root.

Ответы:


15

Вместо sudo vim /etc/rc.confиспользования sudoedit /etc/rc.confили sudo -e /etc/rc.conf. Вам может потребоваться установить переменную окружения EDITOR на vim. Он запустит vim как обычный пользователь, используя вашу обычную конфигурацию, для копии файла, которую он скопирует при выходе.


Отличное решение! Я тоже это проверю.
Рубик

Я попытался, sudoedit /etc/rc.confи sudo -e /etc/rc.confон открывает Vim, но мой ~ / .vimrc не загружается. Что я делаю не так?
аппарат

@apparat Попробуйте export EDITOR=vimсначала - возможно, он пытается запустить vi, что я не знаю, загружает ли он vimrc, даже если это vim.
Random832

Ну, я думаю, что это лучший ответ. Спасибо вам обоим.
Рубик

@ Random832 export EDITOR=vimсработало. Я думал, что vi не установлен в моей системе и является только символической ссылкой на vim. Спасибо
аппарат

6

Вы можете использовать -uvim, чтобы указать, какой rc-файл загрузить. например

sudo vim -u ~user/.vimrc /etc/rc.conf

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

alias sudovim='sudo vim -u ~user/.vimrc'

Обратите внимание, что это vim -uможет привести к сбою подключаемых модулей или вызываемых rc-файлов, если они загружают другие файлы, относящиеся к $ HOME - $ HOME теперь является домашним каталогом пользователя root, а не пользователем. Это может быть решено, например, с помощью символических ссылок в домашнем каталоге root или жестким кодированием абсолютных путей.


Это здорово, спасибо. Я решил так: alias svim="HOME=/home/user && sudo vim -u $HOME/.vimrc".
Рубик

1

sudo vim -S /home/user/.vimrc /etc/rc.conf

Это эквивалентно:

sudo vim /etc/rc.conf + :source /home/user/.vimrc

а также может быть псевдонимом:

alias svim='sudo vim -S /home/user/.vimrc'

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.