Help us understand the problem. What is going on with this article?

vim-metarw でファイル名にコロンが含まれる場合に保存ができない (未解決)

More than 3 years have passed since last update.

解決には至っていないが、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-86
Compiled by Arch Linux
Huge 版 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 系の設定ファイルを疑う

おそらく保存まわりの追加処理に副作用が生じているのだろう。autocmdBufWrite 系イベントを探る。

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

どう解決するか (未処理)

  1. vim-metarw の問題の箇所を修正
  2. そもそも vim-metarwvim-metarw-redmine でしか使っていない(たぶん)
    • 無効化してもたいして困らない(はず)
    • NeoBundle の遅延読込等で vim-metarw-redmine を常時有効にさせず、副作用を限定的にする

vim-metarw 自体メンテナンスされていないかも

koyudoon
人生積んだクズ人間の末路
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away