Иногда я начинаю редактировать файлы конфигурации в /etc
Vim, но забываю использовать его sudo
для запуска Vim. Неизбежным результатом является то, что после завершения моих правок я сталкиваюсь с ужасным уведомлением о том, что у меня нет разрешения на сохранение файла.
В основном, изменения настолько малы, что я просто выхожу из Vim и делаю все заново как root. Конечно, я могу сохранить в папку, в которую я могу написать, а затем скопировать с правами root, но это также несколько раздражает.
Но я уверен, что есть более простой способ стать пользователем root или использовать его sudo
изнутри Vim, не отказываясь от изменений. Если бы метод не основывался на sudo
настройке для пользователя, это было бы еще лучше.
sudoedit
вместоvim
всего редактирования администратора. Это один из способов больше никогда не сталкиваться с этой проблемой :). +1 за ответ Жиля .Ответы:
sudo не может изменить действующего пользователя существующего процесса, он всегда создает новый процесс с повышенными привилегиями и исходная оболочка не изменяется. Это фундамент дизайна UNIX. Я чаще всего просто сохраняю файл в / tmp как обходной путь. Если вы действительно хотите сохранить его напрямую, вы можете попробовать использовать функцию Vim, которая может передавать файл другому процессу. Попробуйте сохранить с помощью этой команды:
Проверено и работает. Затем Vim попросит вас перезагрузить файл, но в этом нет необходимости: вы можете просто нажать, oчтобы избежать перезагрузки и потери истории отмен. Вы даже можете сохранить это в команде / функции Vim или даже связать с клавишей для легкого доступа, но я оставлю это как упражнение для читателя.
источник
%
, который в vim будет путем к файлу, который вы в данный момент редактируете.%
в кавычки в случае, если имя файла содержит пробел.'modified'
настройки; Вы можете сделать это вручную сset nomodified
.exec 'w !sudo dd of=' . shellescape(expand('%'))
в случае, если имя файла содержит кавычки, обратную косую черту, знаки доллара и т. Д.Сохранение файла как root:
источник
Звоните,
sudoedit
чтобы редактировать файлы как root.Думайте о неудобстве, когда вы звоните
vim
напрямую, как предупреждение, что вы слишком небрежны в выполнении чего-то потенциально опасного.источник
Вы можете положить это в свой
.vimrc
Вы запускаете его, выполняя
:w!!
- он проталкивает файлsudo tee
до текущего имени файла (%
).С https://stackoverflow.com/questions/95072/what-are-your-favorite-vim-tricks
источник
!sudo sponge %
вместо этого.Это также хорошо работает:
Это вдохновлено комментарием @Nathan Long в этом ответе .
ВНИМАНИЕ :
"
должен использоваться вместо того,'
потому что мы хотим%
быть расширенными перед передачей в оболочку.источник