解決には至っていないが、VimScript がよく分かっていない者でも原因の特定が(たぶん)出来たので、その過程を忘れないように残しておく。いわゆるタイトル詐欺。
今後、似たような事が起き得る可能性は十分にあるので。
環境
$ uname -a
Linux desktop-arch 4.8.10-1-ARCH #1 SMP PREEMPT Mon Nov 21 11:55:43 CET 2016 x86_64 GNU/Linux
$ vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 15 2016 18:04:06)適用済パッチ: 1-86Compiled by Arch LinuxHuge 版 with GTK2 GUI.以下略
症状
例えば下記のようなコマンドで、ファイル名にコロンが含まれるファイルを新規作成する。
$ vim ~/tmp/ho:ge.md
編集後に :w
で保存しようとしたところ、うんともすんとも言わない。当然 :messeage
しても何もなく :write
が無効化されてしまったような印象を受ける。
普段、ファイル名にコロンが含まれる場合などそうそう無いので全く気が付かなった。
※「可搬性からファイル名にコロンを使用すべきではない」という話はひとまず置いておく。
※コロンに限った話では無いかもしれないが、コロン以外の記号は試していない。
※後で気が付いだが、vim 起動時の新規作成ファイル特有のメッセージなども表示されていなかった。
原因の探し方
vim 本体は正常か否か
まずは素の vim で試す。
$ vim -u NONE -i NONE -N ~/tmp/ho:ge.md
ちゃんと保存できる。vim 自体は正常。
素の vim については git用に素のvimを設定する - Humanityが参考になった。
次に自分の vimrc 系の設定ファイルを疑う
おそらく保存まわりの追加処理に副作用が生じているのだろう。autocmd
の BufWrite
系イベントを探る。
vimrc
の類は ~dot/vim/rc
に用途別に分割して設置しているので Silver Searcherを使って全文検索を行う。
$ ag --vim 'autocmd BufWrite' ~dot/vim/rc
副作用が生じていそうな箇所をコメントアウトし、vim を再起動させる。それを一通り繰り返す。
問題なし。
次にプラグインを疑う
プラグインは NeoBundleで管理しており、実ファイルは ~dot/vim/bundle
以下に設置している。
先程と同様に全文検索を行う。
$ ag --vim 'autocmd BufWrite' ~dot/vim/bundle
現在は利用していない(無効化している)プラグインの実ファイルも ~dot/vim/bundle
以下に残っているため、現在有効かつ副作用が生じていそうなプラグインを探し出すのは少々面倒だった。より効率的な方法があれば知りたい。
試行錯誤の結果、vim-metarwが原因らしいという事が分かった。実際に利用していたのはフォーク版の mattn/vim-metarw
どう解決するか (未処理)
vim-metarw
の問題の箇所を修正- そもそも
vim-metarw
は vim-metarw-redmineでしか使っていない(たぶん)- 無効化してもたいして困らない(はず)
- NeoBundle の遅延読込等で
vim-metarw-redmine
を常時有効にさせず、副作用を限定的にする
vim-metarw
自体メンテナンスされていないかも