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

OptionParser で引数の値にスペースを含められるようにしたい

Open deris opened this issue 9 years ago • 6 comments

OptionParserは、内部的にで取得した引数の文字列を、split関数で空白文字区切りで引数を分けているため、引数の値にスペースを含められないように見えます(何か方法ありますか?)。 なので、引数の値にスペースを含められるようにしたいです。 (実装的には、vital-ArgumentParserのように使わないと厳しい気がしています)

deris avatar Dec 29 '15 14:12 deris

スペースが2つ入ると再現できないので必須かと思います。 そのうえで unix like な引数分解をしたいのであれば gist-vim のこれが使えるかと思います。

https://github.com/mattn/gist-vim/blob/master/autoload/gist.vim#L115-L120

mattn avatar Dec 29 '15 15:12 mattn

コメントありがとうございます。

gist-vimのこのコードは、', "で囲ったときだけスペースOKにしてる、ってことですよね?(正規表現 易読化ツールが欲しい…

あと、以下はどこに対するコメントですか?

スペースが2つ入ると再現できないので 必須かと思います。

deris avatar Dec 29 '15 16:12 deris

gist-vimのこのコードは、', "で囲ったときだけスペースOKにしてる、ってことですよね?(正規表現 易読化ツールが欲しい…

はい。

あと、以下はどこに対するコメントですか?

function! s:foo(...)
    echo a:000
endfunction

command! -nargs=* Foo call <SID>foo(<f-args>)

これで

:Foo "foo  bar"

※スペース2個 とした場合、f-args だと幾ら join(a:000, ' ') したとしてもスペース2個(foo bar)は戻せないですよね。

mattn avatar Dec 29 '15 16:12 mattn

ありがとうございます。

なるほど、non-escapedなスペースを許容するのであれば、は必須ですね。 内部仕様をに変更して unix like な引数分解をするのであれば、 gist-vim のコードが使えると。

フムー

deris avatar Dec 29 '15 16:12 deris

以前も言ったことがあるんですが( https://github.com/vim-jp/vital.vim/pull/116#issuecomment-27630795 )、文字列→文字列リストへの部分は独立して提供できると良さそうです。 汎用的なものを組み込みで提供したり、ユーザーから関数などを渡せると便利そう。

thinca avatar Dec 30 '15 16:12 thinca

vital-ArgumentParser の f-args はドキュメントミスでした。こちらでも q-args を使います(mattn さんのご指摘通り、ちゃんとやるために q-args)

lambdalisue avatar Jan 04 '16 00:01 lambdalisue