Я пытаюсь определить способ редактирования удаленных файлов в 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