Написать VIM-файл от имени суперпользователя?


10

Это проблема юзабилити, которая часто случается со мной:

Я открываю системный файл только для чтения с помощью vim, даже редактирую его, потому что я недостаточно внимателен или потому, что vim в системе плохо настроен. После того, как мои изменения сделаны, я застрял при необходимости записать их во временный файл или потерять их, потому что: w! не сработает

Есть ли команда vim (: W !!!), которая позволяет вам записать текущий буфер как суперпользователь? (Vim запросит ваш sudo или su пароль, естественно)


связанные вопросы (не совсем точные дубликаты): superuser.com/questions/23428/vim-sudo-vim-bad-idea .. superuser.com/questions/106865/… .. и от SO, stackoverflow.com/questions/1005 /…
шарлатанство

1
SO определенно является обманом, однако два вопроса SU касаются отдельной проблемы, решаемой с помощью sudoeditкоманды. Этот вопрос более сфокусирован на том, чтобы забыть набрать его в первую очередь и повысить после запуска редактора.
тяжело

Ответы:


15
:w !sudo tee % >/dev/null`

Пояснение: С помощью !вы можете выполнять программы. Приставив к нему префикс: w, содержимое файла (то, что у вас есть в vim, а не исходный файл, а точнее - буфер) будет передано команде при стандартном вводе. %заменяется именем файла и >/dev/nullпозволяет избежать повторного вывода содержимого на экран (что является обычным поведением tee).

Я нашел еще более короткий путь. ddне печатает на стандартный вывод, поэтому вы можете сохранить нулевую вещь.

:w !sudo dd of=%

​‍

То же самое для :r, который вставляет выходные данные данной команды, так что вы можете, например, вставить текущую дату в ваш файл, используя:r !date


Большое спасибо, вы сделали мою жизнь намного лучше! (Брайан тоже)
Зимбатм

Я только что добавил второй метод.
Мариан

Это действительно здорово!
Энтони Джорджио

не работает с unofiles
Кристиан Брабандт

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