1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vimで「パーミッションを超えて上書き」を無効にする

Last updated at Posted at 2018-03-11

この記事の内容

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.txtnowriteで開く) がオススメです。

余談

  • 読み取り専用を上書きできてしまう、という設定がデフォルトなのはかなり疑問
    • 「書き換えたけど破棄して終了」が :q! なので、!をつけることはかなり多いのに…
    • 上記の設定をして、無理矢理上書きするときだけ設定する方が自然
  • Web上にこの情報ほとんど載ってなかった
    • マニュアルを見たらちゃんと書いてあった
    • みんなやっぱりちゃんとマニュアル読んでるのかな…(不安)
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?