CygwinでVimを使っててたまに終了時にviminfoに書き込み出来ません
と言われる事があって、取り敢えず無視してましたが
WindowsとCygwinで生成されるファイルの初期のパーミッションだの調べてたら
なんとなく理由が分かったと思うのでその対処法。
Windowsによって作られるviminfo
色々作業しようとしてCygwinの中だけで済めばいいのですが、 ちょっとしたテキストファイルとかをExplorerから開きたいとき、 ただ見るだけでもVimが便利なのでWindows用のVimを別途インストールして使っています。
この際に同じホームディレクトリを使うので、設定ファイルも一緒です。 で、これが問題でした。
Cygwinの中だけでVimを使っている場合は、 最初に作られるviminfoファイルもユーザー所有になるので問題ありません。
ただ、WindowsにVimを別途インストールしていて、 そちらで作業してしまうと、viminfoファイルがCygwin外のソフトに書き換えられ 所有者も変更されてしまい、 (再生成される様な形になる?)、 この際に生成されるviminfoファイルはCygwinから見るとAdministrators所有になっていて 書き込み不可の状態になります。
ちょっと考えれば分かりそうなものですが、 Cygwinが立ち上がってる時はディレクトリ移動もコマンドラインのが楽なので 適当なファイルもCygwinから開いて、 Windows側のVimを使う機会が少なかったので、なんか突然変更されててよくわからない、 と今まで思ってましたが、殆ど大丈夫だったりするので、取り敢えず無視してました、、、
対処法
要するに、同じviminfoを使うからいけないわけで、 別々のviminfoに書き込むように設定するだけです。
$HOME
に.vimrc
と_vimrc
を作れば、Cygwinでは前者、WindowsのVimでは
後者を使う様に出来ますが、
同じ様なファイルを2つ作るのもあれなので、
今回はCygwin内ではVim、外ではGVimを使う様にして
GVimかどうかでviminfoを分けるようにしました。
Windows以外では共通にしておいた方が何かと便利なので、 WindowsでGUIの場合だけ違うファイルになるように
1 2 3 4 5 |
|
この様な感じで設定。
追記: 2013/12/07
久々に色々見返してたらものすごく馬鹿なことをしてたことをここに発見したので追記。。。
上みたいな面倒なことやらず、単に
1 2 3 4 5 |
|
で。win32unix
等がCygwin、win32
等がWindows側なのでWindows側の時だけviminfo_win
へ。
GUIかどうかで分けなくても良いし、余計な事を済まなくて済みます。
この頃には既にwin32unix
だけでCygwinだけのために設定してた物もあるので、
違いを知らなかった訳ではないと信じたいとこですが、なんか酷い話、自分のことですが。
従って下も全然必要の無いこと。
追記ここまで
GVimの方の設定を.gvimrc
の中で
viminfo
を上書きするような形で書いてもOK。
この場合、既にn...
のファイル指定を与えているので同じ様に+=
は使えず
次の様な感じにしなくてはいけません。
1
|
|
1 2 3 4 5 |
|
こんな感じで.gvimrc
の中で全てのオプションを設定し直すか
一度ファイル指定を除いてから再び加える必要があります。
ややこしいので最初の様に.vimrc
内で閉じてしまう方が分かりやすいかと。
has("gui_running")
を使うとVimを起動してから:gui
コマンドで
GVimになった時に設定が読み込まれない
1らしいのですが、
今回の件に限ってみれば問題ありません。
(むしろCygwin内でのVim
GVim
であればむしろ読み込んでほしくない設定でもあります。)