vital.vim icon indicating copy to clipboard operation
vital.vim copied to clipboard

good-bye `=`

Open Shougo opened this issue 10 years ago • 12 comments

~~Vimの仕様変更により、=が使い物にならなくなってしまったので~~、=はwildignoreを参照してしまうのでvital.vimから排除したいと思っています。 代用品としては fnameescape() くらいしかないですが、Vim 7.1.299 以上でしか使えない問題があります。 これについてはどうしましょうか。

Shougo avatar Aug 06 '14 20:08 Shougo

Vimの仕様変更により、=が使い物にならなくなってしまったので、

これを把握していないのですが、具体的にどういうような仕様変更があったのでしょうか。

osyo-manga avatar Aug 06 '14 20:08 osyo-manga

https://github.com/vim-jp/issues/issues/207

問題はこれです。=をエスケープの意味で使っていましたが、引数がwildignoreにマッチすると開けなくなるのです。エラーになるかどうかは個人の設定と開くファイルに依存するので、厄介なバグを引き起こします。 解決法として、mattnさんが現在 :nowild を提案しています。

例: https://github.com/Shougo/unite.vim/issues/671

Shougo avatar Aug 06 '14 20:08 Shougo

http://d.hatena.ne.jp/thinca/20090312/1236792602

このページにあるように、fnameescape()も完璧ではありません。 しかし、現状 = よりはマシです。

Shougo avatar Aug 06 '14 20:08 Shougo

問題はこれです。

該当する issues 読んでみます。ありがとうございます。

osyo-manga avatar Aug 06 '14 20:08 osyo-manga

もともとそういう仕様だったようなので、仕様変更ではないですね。 Bram氏への説得に失敗したということです。修正しておきます。

Shougo avatar Aug 06 '14 20:08 Shougo

このページにあるように、fnameescape()も完璧ではありません。

これなんですが、vital.vim 側で問題に対応した fnameescape() を提供するというのはどうでしょうか。

osyo-manga avatar Aug 06 '14 21:08 osyo-manga

それもありだとは思います。問題は完璧な fnameescape() を提供することが簡単でない点ですが……。

Shougo avatar Aug 06 '14 21:08 Shougo

問題は完璧な fnameescape() を提供することが簡単でない点ですが……。

とりあえず、完璧かどうかはおいておいて vital.vim 側でラッパーを提供しておけば今後問題が出てきても対処はしやすそうですね。

osyo-manga avatar Aug 06 '14 21:08 osyo-manga

そういえば、今思ったのですがラッパー関数内で一時的に wildignore を空にし、 その上でコマンドを =により実行することもできそうです。 fnameescape() の再実装よりは筋が良さそうですが……。

Shougo avatar Aug 06 '14 22:08 Shougo

バージョンによって:edit + backtickかexe 'edit' fnameescape(...)かを使い分ける関数があれば良さそうですね。

Module.open('edit', arg)

的な。 2014/08/07 7:04 "Shougo" [email protected]:

そういえば、今思ったのですがラッパー関数内で一時的に wildignore を空にし、 その上でコマンドを =により実行することもできそうです。

— Reply to this email directly or view it on GitHub https://github.com/vim-jp/vital.vim/issues/186#issuecomment-51404120.

tyru avatar Aug 06 '14 22:08 tyru

そのラッパー関数で呼び出される backtick から =s:foo() の様に関数が呼び出され、それが wildignore を期待してるとアウト。

On 8/7/14, Shougo [email protected] wrote:

そういえば、今思ったのですがラッパー関数内で一時的に wildignore を空にし、 その上でコマンドを =により実行することもできそうです。


Reply to this email directly or view it on GitHub: https://github.com/vim-jp/vital.vim/issues/186#issuecomment-51404120

  • Yasuhiro Matsumoto

mattn avatar Aug 06 '14 22:08 mattn

そのラッパー関数で呼び出される backtick から =s:foo() の様に関数が呼び出され、それが wildignore を期待してるとアウト。

関数の引数で wildignore を受け取るのはどうでしょうか open("edit", arg, wildignore) として、wildignore が省略されると &wildignore を使用し、意図的に wildignore を無効にした場合は "" を渡すとか。

osyo-manga avatar Aug 06 '14 22:08 osyo-manga