書き込み権限のないファイルをvimで開き、それを変更する必要があると判断した場合は、vimを終了せずに変更を書き込むことができます。:w !sudo tee %
これがどのように機能するのか理解できません。これを分解できますか?
私はこの:w
部分を理解しています。すでに関連付けられているファイル名があるとし、現在のバッファをディスクに書き込みます。そうですか?また、コマンドが実行され、現在のバッファ内容を表すことが
わかります。そうですか?しかし、まだこれがどのように機能するのか理解していません。!
sudo tee
%
答え1
構造とは、:w !cmd
「現在バッファへの書き込み」を意味します。管路たとえば、これにより:w !cat
バッファをパイプできますcat
。
%
それはファイル名バッファに関連付けられている
したがって、:w !sudo tee %
バッファの内容はパイプで接続されますsudo tee FILENAME
。これにより、バッファの内容がファイルに効果的に書き込まれます。
答え2
%
内容ではなく、現在のバッファーのファイル名を示します。
so:w !sudo tee %
は現在のバッファをsudo tee [currentfilename]
。
tee
ルートとして実行されているため、標準入力をファイルに保存する書き込み権限があります。
また、見ることができますhttps://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work
答え3
あまり正しくない!
!command
次のようにコマンドを実行します。フィルターからテキストを取得するコマンドは、stdin
いくつかの操作を実行してから出力しますstdout
。
を使用すると、w
ファイルの内容stdin
をsudo tee %
。%
現在のファイルの名前を格納するvimの特殊レジスタです。
したがって、ファイルの内容を現在のファイルにプッシュしますsudo tee FILENAME
。tee
stdin