この記事の内容
Vimで :w!
ってやると、そのファイルが書き換え可能なパーミッションでなくても
無理矢理書き込むことができ(ることがあり)ますよね。
(上書きできてしまう条件についてはここでは省略)
もちろん、!
をつけないように気をつけることは大事なんですが、
Vimでの保存、終了の際には !
がある程度手癖になっている人もいると思います。
なので、これをシステム的に無効にする方法です。
方法
set cpoptions+=W
ちゃんとオプションが用意されていました!
さっそく .vimrc
に書いておきましょう。
なお、どうしてもパーミッションのないファイルを上書きしたかったら、set cpoptions-=W
すれば良い
解説
設定の意味
cpoptions
はviとの互換性を設定するパラメータW
は、「パーミッションを超えて上書き可能にするかどうか」という設定+=
は設定の追加なので、つまり「W
という設定をvi互換にする」という意味
ということは、この強制上書き機能はviにはなかった機能だったんですね。
その他詳しいことはマニュアルを見てください。
注意点
マニュアルには「読み込み専用ファイルを上書きしない」と書いてあるのですが、これは少し注意が必要です。
例えばVim起動時に vim -R hoge.txt
とした場合、このファイルは読み取り専用として開かれますが、
実はこれは set cpoptions+=W
していても、:w!
で保存ができてしまいます。
(最初これに気づかずに、「効かないなぁ」と悩んでいた…)
詳しくは調べていませんが、パーミッションでの制限と-R
での制限は別になっているようですので、
上記を設定していても、書き換えたくないファイルには vim -m hoge.txt
(nowrite
で開く) がオススメです。
余談
- 読み取り専用を上書きできてしまう、という設定がデフォルトなのはかなり疑問
- 「書き換えたけど破棄して終了」が
:q!
なので、!
をつけることはかなり多いのに… - 上記の設定をして、無理矢理上書きするときだけ設定する方が自然
- 「書き換えたけど破棄して終了」が
- Web上にこの情報ほとんど載ってなかった
- マニュアルを見たらちゃんと書いてあった
- みんなやっぱりちゃんとマニュアル読んでるのかな…(不安)