時々、Vimを使用して/etc
の構成ファイルの編集を開始しますが、Sudo
を使用してVimを開始するのを忘れています。その場合、避けられない結果として、編集を終えた後、ファイルを保存する権限がないという恐ろしい通知に遭遇します。
ほとんどの場合、編集は十分に小さいので、Vimを終了し、すべてをrootとして再度実行します。もちろん、書き込み可能な場所に保存してからrootとしてコピーすることもできますが、これもやや面倒です。
しかし、変更を破棄せずに、Vim内からrootになるかSudo
を使用する簡単な方法があると確信しています。メソッドがSudo
に依存していない場合は、ユーザーのために設定されているほうがさらに便利です。
Sudoは既存のプロセスの有効なユーザーを変更できません。常に、昇格された特権を持つ新しいプロセスを作成し、元のシェルは影響を受けません。これはUNIX設計の基本です。ほとんどの場合、回避策としてファイルを/ tmpに保存します。本当に直接保存したい場合は、Vimの機能を使用して、ファイルを別のプロセスにパイプすることができます。次のコマンドで保存してみてください:
:w !Sudo dd of=%
テストされ、動作します。 Vimはファイルをリロードするように求めてきますが、それは不要です。 o 元に戻す履歴を再読み込みして失わないようにするためです。これをVimコマンド/関数に保存したり、キーにバインドして簡単にアクセスしたりすることもできますが、それは読者への演習として残しておきます。
ルートとしてファイルを保存します。
:w!須藤ティー%
ルートとしてファイルを編集するには、sudoedit
を呼び出します。
vim
を直接呼び出すときの不便さは、潜在的に危険なことをするのにあまりにもカジュアルすぎるという警告として考えてください。
これを.vimrc
に入れることができます
cmap w!! %!Sudo tee > /dev/null %
:w!!
を実行してトリガーします。ファイルはSudo tee
を介して現在のファイル名(%
)にプッシュされます。
https://stackoverflow.com/questions/95072/what-are-your-favorite-vim-tricks ;で削除された投稿から参照: https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim
これもうまくいきます:
:w !Sudo sh -c "cat > %"
これは、この answer の@Nathan Longのコメントに触発されています。
[〜#〜]通知[〜#〜]:
"
の代わりに'
を使用する必要があります。シェルに渡す前に%
を展開する必要があるためです。