Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

この記事の内容

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上にこの情報ほとんど載ってなかった
    • マニュアルを見たらちゃんと書いてあった
    • みんなやっぱりちゃんとマニュアル読んでるのかな…(不安)

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>