Vimでファイルを読み取り専用モードで開く(-R / view)
本番環境の設定ファイルを確認するだけのつもりが、うっかりキー入力してしまい変更してしまった。閲覧だけのつもりのときは、最初から読み取り専用モードで開いておけば、誤操作による変更を未然に防げる。
起動時に読み取り専用で開く
vim -R {ファイルパス}
-RはRead Onlyの略で、これを付けて起動すると読み取り専用モードでファイルが開く。まったく同じ結果を得られる別コマンドとしてviewもある。
view {ファイルパス}
gVimでも同じオプションが使える。
gvim -R {ファイルパス}
すでに開いているバッファを読み取り専用にする
:set readonly
:set ro " 省略形
普通に開いたあとでも、途中から読み取り専用に切り替えられる。逆に解除したい場合はこちらを使う。
:set noreadonly
:set noro " 省略形
読み取り専用でも強制的に保存したいとき
読み取り専用のまま変更を加えてしまった場合、通常の:wでは保存できず警告が出る。それでも保存したい場合は!を付けて強制する。
:w!
ただし、この強制保存はファイルシステム上の書き込み権限がある場合に限られる。権限が無いファイルであれば、読み取り専用の解除や強制保存を試みても失敗する。
既存バッファを開いたまま切り替えるコマンドとの違い
-Rオプションは起動時にだけ指定できるオプションで、すでに開いているバッファには使えない。作業の途中で急に読み取り専用にしたくなった場合は:set readonlyを使う、と役割が分かれている点を覚えておくと迷わない。
権限が無いファイルは自動的に読み取り専用になる
書き込み権限のないファイルを開くと、Vimは自動的に読み取り専用モードで開く。意図せずこの状態になった場合は、まずファイルの権限を確認するとよい。
vim -Rやviewで開く習慣をつけると、誤操作による事故を防げる。既存バッファでも:set roでいつでも切り替えられる。
本番サーバーの設定ファイルを確認するだけのつもりで、うっかり1文字入力して保存しかけたことがある。それ以来、確認だけの目的で開くときは反射的に-Rを付けるようになった。事故が起きてから対策するより、習慣として先に予防しておくほうが安心だと痛感した。チームメンバーにもこの癖を勧めるようになった。
Neovimでの違い
Neovimには-Rオプションに相当する起動時引数が用意されていない環境もある。その場合は起動後に:set readonlyで切り替えるか、viewコマンドが使えるか確認するとよい。CLIツールのバージョンによって細部の対応状況が異なるので、頻繁に使うなら自分の環境で一度動作を確かめておくと安心だ。ドキュメントを都度確認するより、最初に試しておくほうが結局は早い。
まとめ
読み取り専用モードは、誤操作から重要なファイルを守るための簡単で効果的な習慣だ。確認だけの作業では積極的に使うとよい。