10

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

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

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

2 ответа2

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

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

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

:w !sudo dd of=%

​‍

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

5

Пытаться:

:w !sudo tee % >/dev/null

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .