Humanity

Edit the world by your favorite way

modifiableとreadonlyの違い

'modifiable' or not when :edit with backtick-expantion ? - KBDANOID - やぬすさん別荘 - vimグループ
あーなるほど。理解しました。

あれーでも :set modifiable? すると "modifiable" て返ってくるしうーん ? となっちゃったわけです。 Windows でも andLinux でも file 自体が readonly 属性だから 'readonly' は on になるけど 'nomodifiable' にはならない、という状況。

どこか見落としてるのかな…。

modifiableとreadonlyについてなんですが実は2つは独立したオプションです。
片方を変更するともう片方も変更されるということはありません
具体的にどう違うのか、ということについてはほんとちょうど一昨日くらいに
ちゃんと調べようと思って後回しにしてたことに今気が付きました。
いい機会なので調べようと思います。

'modifiable' 'ma'	切替	(既定ではオン)
			バッファについてローカル
			{Vi にはない}		*E21*
	オフのときは、<b>バッファの内容が変更できなくなる。</b>オプション
	'fileformat''fileencoding' も変更できなくなる。
	コマンドライン引数 |-M| でオフに設定できる。
'readonly' 'ro'		切替	(既定ではオフ)
			バッファについてローカル
	オンのときは、書き込みコマンドは '!' を付けないと使えない。
	これは<b>間違ってファイルを上書きしてしまうことを防ぐためのものである。</b>
	Vimが読み込み専用モードで起動された ("vim -R") ときと、
	実行ファイルの名前が "view" のときにはオンが既定値になる。
	'cpoptions' にフラグ 'Z' が入っていない場合、":w!" を使うとカレントバッ
	ファの 'readonly' がオフになる。
	{Vi には、以下のコマンドはない}  コマンド ":view" を使って開かれたバッ
	ファでは、オプション 'readonly' はオンになる。

一応全部引用しちゃいましたが太字にした部分に注目です。
modifiableは「バッファの内容を変更できなくする」、
つまりプラグインとかが編集してほしくないバッファに対してよく設定するもの。*1
readonlyは普通に対話的に編集していて「間違ってファイルを上書きしてしまうことを防ぐためのもの」、
つまり:w!でないと書き込めなくするもの。*2

modifiableはバッファの変更、readonlyはファイルの書き込み、
をそれぞれ抑制するもので目的が違うということですね。

あれでもこれ edit なわけだから編集できちゃうよなとか思っておもむろに iTwitter 早く復活するといいね<Esc> とかやると readonly だよばかやろーとは言われるけど確かにできる。

まぁ

iありがとうでもmattnさんにアカウント剥奪されそう...<Esc>

とかやると確かにバッファを変更できちゃうのは確かなのだけど
結局権限がなければ書き込めないわけだし、問題ないと思う。

readonlyは:w!すれば書き込めちゃういわゆるセーフティモードのようなものということかな。

*1:どうりでこっちのが見たことが多いと思った

*2:なぜかhelpにはないけど権限のないファイルを開いてもオンになりますね