vital.vim
vital.vim copied to clipboard
good-bye `=`
~~Vimの仕様変更により、=
が使い物にならなくなってしまったので~~、=
はwildignoreを参照してしまうのでvital.vimから排除したいと思っています。
代用品としては fnameescape() くらいしかないですが、Vim 7.1.299 以上でしか使えない問題があります。
これについてはどうしましょうか。
Vimの仕様変更により、
=
が使い物にならなくなってしまったので、
これを把握していないのですが、具体的にどういうような仕様変更があったのでしょうか。
https://github.com/vim-jp/issues/issues/207
問題はこれです。=
をエスケープの意味で使っていましたが、引数がwildignoreにマッチすると開けなくなるのです。エラーになるかどうかは個人の設定と開くファイルに依存するので、厄介なバグを引き起こします。
解決法として、mattnさんが現在 :nowild
を提案しています。
例: https://github.com/Shougo/unite.vim/issues/671
http://d.hatena.ne.jp/thinca/20090312/1236792602
このページにあるように、fnameescape()も完璧ではありません。
しかし、現状 =
よりはマシです。
問題はこれです。
該当する issues 読んでみます。ありがとうございます。
もともとそういう仕様だったようなので、仕様変更ではないですね。 Bram氏への説得に失敗したということです。修正しておきます。
このページにあるように、fnameescape()も完璧ではありません。
これなんですが、vital.vim 側で問題に対応した fnameescape()
を提供するというのはどうでしょうか。
それもありだとは思います。問題は完璧な fnameescape() を提供することが簡単でない点ですが……。
問題は完璧な fnameescape() を提供することが簡単でない点ですが……。
とりあえず、完璧かどうかはおいておいて vital.vim 側でラッパーを提供しておけば今後問題が出てきても対処はしやすそうですね。
そういえば、今思ったのですがラッパー関数内で一時的に wildignore を空にし、
その上でコマンドを =
により実行することもできそうです。
fnameescape() の再実装よりは筋が良さそうですが……。
バージョンによって: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.
そのラッパー関数で呼び出される 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
そのラッパー関数で呼び出される backtick から =s:foo() の様に関数が呼び出され、それが wildignore を期待してるとアウト。
関数の引数で wildignore
を受け取るのはどうでしょうか
open("edit", arg, wildignore)
として、wildignore
が省略されると &wildignore
を使用し、意図的に wildignore
を無効にした場合は ""
を渡すとか。