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

10

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

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

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

zimbatm
источник
связанные вопросы (не совсем точные дубликаты): 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
Кристиан Брабандт