Назад | Перейти на главную страницу

Отредактируйте удаленный файл в Vim с помощью sudo, когда вход в систему ssh root отключен

Я пытаюсь определить способ редактирования удаленных файлов в Vim, для которых требуется sudo, но все еще использую мою локальную конфигурацию vim и плагины.

В настоящее время я могу открыть vim и :e scp://me@server//some/root/file и вносить изменения, но когда я пытаюсь написать это, я, конечно, получаю «разрешение отклонено».

Если я попробую команду «Я забыл sudo» (:w !sudo tee %) он пытается вернуть файл обратно как root, что отключено. Я также пробовал ssh -t user@host sudo vim /some/file, но это не источник локальной конфигурации.

Есть ли у кого-нибудь предложение метода, который я, возможно, пропустил? Заранее спасибо.

В конечном итоге вы можете сделать это из vim, если у вас есть доступ sudo на удаленном сервере:

function! WriteRemote()
  let pat = '^scp://\(.\{-}\)/'
  let l = matchlist( bufname('%'), pat)
  if len(l) < 2
    echom "could not get remote host"
    return
  end
  let remote = l[1]
  let temp_file = expand('%:t')
  let dest_file = substitute( bufname('%'), pat, '', '')

  execute "write! scp://" . remote . "//tmp/" . temp_file
  execute "!ssh -t " . remote .
    \ " 'sudo tee >/dev/null -- " . dest_file .
    \ " </tmp/".temp_file .
    \ " ; rm -- /tmp/".temp_file . "'"
endfunction

Вы можете просто сохранить удаленный локальный буфер, используя :execute WriteRemote()

Имейте в виду, что эта функция не тестировалась. Но идея у вас есть.

Разве вы не можете просто скопировать конфигурацию Vim на удаленный сервер и отредактировать ее там? При условии, конечно, что установлены Vim и X.

Команда «rsync» отлично справляется с задачей сохранения согласованности, поэтому вы можете копировать настройки Vim где угодно. В идеале вы должны войти на удаленный сервер и установить свою конфигурацию Vim также как root. :-)

Пример:

rsync -avzp ~/.vimrc ~/.vim you@remote-server:~

ssh you@remote-server
sudo rsync -avzp ~you/.vimrc ~you/.vim ~root