Сохранить файл как root после редактирования как не root - PullRequest
18 голосов
/ 19 декабря 2010

Хорошо, так это происходит со мной все время.Должно быть лучшее решение.Допустим, вы делаете vim /etc/somefile.conf, а затем вы i, но понимаете, что вы не sudo, и вы не можете писать.Тогда я теряю свои изменения, выполняя :q затем sudo !! и снова внося свои изменения.Есть ли лучший способ сделать это?

Ответы [ 7 ]

32 голосов
/ 19 декабря 2010

Попробуйте

:w !sudo tee %

w ! берет весь файл и передает его в команду оболочки. Команда оболочки - sudo tee, которая запускает tee от имени суперпользователя. % заменяется текущим именем файла.

1 голос
/ 19 декабря 2010

Сохранить файл в другом месте (например, в вашей домашней папке), а затем sudo mv перезаписать оригинал?

0 голосов
/ 12 января 2014

Я использовал это:

function! SaveAsSudo()
    let v=winsaveview()
    let a=system("stat -c \%a " .  shellescape(expand('%')))
    let a=substitute(a,"\n","","g")
    let a=substitute(a,"\r","","g")
    call system("sudo chmod 666 " . shellescape(expand('%')))
    w
    call system("sudo chmod " . a . " " . shellescape(expand('%')))
    call winrestview(v)
endfunction

Я сопоставил <F2> с :w<CR>.& <F8> до :call SaveAsSudo()<CR>

Единственное преимущество этого ответа перед опцией sudo tee: vim не жалуется на несохраненный буфер или файл, измененный извне.

0 голосов
/ 19 декабря 2010

Я использую шаблоны zsh и завершение функций.

В частности это .Если у меня нет разрешения на запись, он запрашивает мой пароль sudo и автоматически запускает «sudo vim»… среди прочего.

0 голосов
/ 19 декабря 2010

В зависимости от степени ваших изменений может быть быстрее сохранить (:w) файл с другим именем, а затем использовать sudo и cat, чтобы перезаписать содержимое из Оригинальный файл:

sudo sh -c 'cat changed > file'

Обратите внимание, что и cp, и mv заменят исходный файл, и его атрибуты (владелец, разрешения, ACL) будут потеряны. Не используйте их , если вы не знаете, как впоследствии исправить разрешения.

0 голосов
/ 19 декабря 2010

Когда vim запускается, в строке состояния появляется сообщение [readonly], а при первой попытке редактирования появляется сообщение W10: Warning: Changing a readonly file и приостанавливается на целую секунду. Этого предостережения для меня, чтобы выйти и сказать sudoedit /etc/somefile.conf.

Вы можете применить это с помощью плагина: Сделать файл изменяемого состояния буфера соответствующим файлу только для чтения .

0 голосов
/ 19 декабря 2010

Сохраните изменения в другом файле и выполните замену файла.

...