Записати файл 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не друкує до stdout, щоб ви могли зберегти нульову річ.

:w !sudo dd of=%

Те саме стосується того :r, який вставляє висновок даної команди, тому ви можете, наприклад, вставити поточну дату у свій файл, використовуючи:r !date


Велике спасибі, ти зробив моє життя набагато кращим! (Брайан теж)
zimbatm

Я щойно додав другий метод.
Маріан

Це справді акуратно!
Ентоні Джорджіо

не працює з скасуванням файлів
Christian Brabandt

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.