回答:
トリックは、外部呼び出しを使用することsudo
です:
:w !sudo tee %
仕組み:
:w !<command>
<command>
バッファの内容を標準入力として実行します。tee
stdinをファイルとstdoutに複製します。%
現在のファイル名に展開します。sudo
ルート許可のためにこれに接頭辞を付けます。あなたがいない実際のVimでファイルを保存し、むしろ、あなたが編集しているファイルの内容を上書きする外部プログラムを呼び出しています。これがVimから警告を受け取る理由です:
W12: Warning: File "xxx" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File:
これを関数に変えることができます:
fun! SuperWrite()
write !sudo tee %
" Or with :silent (but that doesn't seem to work for everyone)
"silent write !sudo tee %
edit!
endfun
キーバインド:
nnoremap <Leader>w! :call SuperWrite()<CR>
ではsu
、rootユーザーのみが使用することができ-c
、すぐにコマンドを実行します。あなたがsu
これを行うために使用できるとは思わないが、おそらく私が知らないトリックがある...
silent
うまくいくようですか?
w ! tee % > /dev/null
これはコマンドの結果(1行)をエコーしますが、バッファーの内容全体はエコーしません。
tee
出力を使用してから捨てるのではなくcat
、ファイルを印刷したくない場合にも機能しませんか?
SuperWrite
動作しますが、ファイルがエコーされます。実行:silent
すると、パスワードが目に見えないように入力されます。