質問: 「sudoで書く」というトリックはどのように機能しますか? sudoでvimを開くのを忘れた場合でも、root権限を必要とするファイルに書き込むことを可能にするコマンドを見たことがあるでしょう。:w !sudo tee % 重要なのは、ここで正確に起こっていることがわからないということです。私はすでにこれを考え出しました:wはこれのためです *:w_c* *:write_c* :[range]w[rite] [++opt] !{cmd} execute {cmd} with [range] lines as standard input (note the space in front of the '!'). {cmd} is executed like with ":!{cmd}", any '!' is replaced with the previous command |:!|. そのため、すべての行が標準入力として渡されます。!sudo teeパートは、管理者権限でteeを呼び出します。すべての理にかなって、%は(teeのパラメータとして)ファイル名を出力するべきですが、私はこの振る舞いのためのヘルプの参照を見つけることができません。 tl; dr 誰かが私を助けてくれるでしょうか?
回答: 実行されたコマンドラインでは、%は現在のファイル名を表します。これは :help cmdline-special に文書化されています。in ex commands, at places where a file name can be used, the following characters have a special meaning. % is replaced with the current file name. すでにご存知のとおり、:w !cmdは現在のバッファーの内容を別のコマンドにパイプします。 tee は標準入力を1つ以上のファイルにコピーし、さらに標準出力にもコピーします。したがって、:w !sudo tee % > /dev/nullは、現在のバッファの内容を現在のファイルrootの間に効率的に書き込みます。これに使用できる別のコマンドは dd です。:w !sudo dd of=% > /dev/null ショートカットとして、このマッピングを.vimrcに追加することができます。" force saving files that require root permission cnoremap w!! w !sudo tee > /dev/null % 上記で、あなたはrootとしてファイルを保存するために:w!!<enter>をタイプすることができます。