書き込み権限のないユーザでファイルを編集してしまったとき Can't open file for writing

vimでrootのもっているファイルをつい通常のユーザのままで開いて編集し、セーブするときになって気づくことがある。rootになって再度編集しなおしてもよいが、それが大変なときもある。
そんなときは以下のコマンドでOK(sudo可能なユーザであること前提)

:w !sudo tee %

別プロセスでrootユーザにてteeを実行して指定したファイルへ書き込んでいる

コマンドの意味

  • :w !{cmd}で現在のバッファの内容をcmdの標準入力に送る
  • sudo teeでrootユーザで指定したパスへの書き込み
  • % は現在読み込まれているバッファのファイルへのパス