New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

input()の補完の種類をcustomlistにしたときに、補完に使う関数に渡される引数の値がおかしい #472

Open
LeafCage opened this Issue Sep 30, 2013 · 4 comments

Comments

Projects
None yet
3 participants
@LeafCage

LeafCage commented Sep 30, 2013

function! TestComp(ArgLead, CmdLine, CursorCol)
  let g:last_arglead = a:ArgLead
  let g:last_cmdline = a:CmdLine
  return filter(['abc', 'bcd', 'cde', 'def', 'efg'], 'v:val=~#"^". a:ArgLead')
endfunction
command! -nargs=* -complete=customlist,TestComp  Test    echo ''
command! -nargs=0  TestInput    call input('input > ', '', 'customlist,TestComp')

以上のスクリプトを:sourceしたとき、
:Testコマンドだと、1回目の補完を呼んだときに、abc bcd cde def efgの候補が示されます。
仮にabcを選択して、<space>を打った後、2つ目の引数のために再び補完を呼ぶと、問題なく再びabc bcd cde def efgの候補が現れます。

一方、:TestInputコマンドからのinput()での補完は、1回目は:Testコマンドと同様にabc bcd cde def efgの候補が示されますが、仮にabcを選択して<space>の後、2つ目の引数のために補完を呼ぼうとしても補完が呼ばれません。

ここでg:last_argleadを見てみると、:Testコマンドの時には<space>が打たれたらそこを区切りとしてそれ以降の文字列をa:ArgLeadとして見ます。
それなのに、input()のときには、abcと後ろの空白までがa:ArgLeadになっています。空白を区切りに2つ目の引数と見なすなんてことはなく空白までもが引数と見なされ、2つ目の引数を補完することは出来ません。
もしかすると、input()の補完の関数のArgLead引数に入れられる値が、ArgLeadではなくて、CmdLineのものになっているのではないでしょうか?

@Shougo

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Sep 30, 2013

Member

input()の補完とコマンドラインの引数の補完は目的が微妙に違うので、挙動が違うのは分かるような気がします。

input()でファイル名を補完させたとして、その挙動がコマンドライン補完のようにスペース区切りで複数のファイルが補完できたらなんかおかしいですよね?
普通、input()はひとつの引数を補完させるからです。

(それにしても、似たような話題がどこかにあったような……)

Member

Shougo commented Sep 30, 2013

input()の補完とコマンドラインの引数の補完は目的が微妙に違うので、挙動が違うのは分かるような気がします。

input()でファイル名を補完させたとして、その挙動がコマンドライン補完のようにスペース区切りで複数のファイルが補完できたらなんかおかしいですよね?
普通、input()はひとつの引数を補完させるからです。

(それにしても、似たような話題がどこかにあったような……)

@Shougo

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Sep 30, 2013

Member

#243

似た話題。おそらく、問題は同じでinput()の補完が引数一個のみを対象にしているからでしょう。

Member

Shougo commented Sep 30, 2013

#243

似た話題。おそらく、問題は同じでinput()の補完が引数一個のみを対象にしているからでしょう。

@LeafCage

This comment has been minimized.

Show comment
Hide comment
@LeafCage

LeafCage Sep 30, 2013

customやcustomlistを用いた関数での補完は、関数の作り方によって補完する引数を1つのみにすることも出来るのだし、
もう少し自由であっても良いと思います。

LeafCage commented Sep 30, 2013

customやcustomlistを用いた関数での補完は、関数の作り方によって補完する引数を1つのみにすることも出来るのだし、
もう少し自由であっても良いと思います。

@rapan931

This comment has been minimized.

Show comment
Hide comment
@rapan931

rapan931 Mar 12, 2018

customlistを指定した場合のinput()の補完とEx commandでの補完の違いに遭遇し、このissueにたどりつきました。(kaoriya gvim 8.0.0596で遭遇)

仕様ということでも良いのですが、Ex commandとは異なる補完をすることについてinput()のヘルプに記載がないことが気になりました。

同じようにはまるユーザがいそうな気がしますので、ヘルプへの記載を検討していただけないでしょうか?
プルリクなど出さず意見だけのコメントになってしまい申し訳ございませんが、ご確認の程宜しくお願いいたします。

rapan931 commented Mar 12, 2018

customlistを指定した場合のinput()の補完とEx commandでの補完の違いに遭遇し、このissueにたどりつきました。(kaoriya gvim 8.0.0596で遭遇)

仕様ということでも良いのですが、Ex commandとは異なる補完をすることについてinput()のヘルプに記載がないことが気になりました。

同じようにはまるユーザがいそうな気がしますので、ヘルプへの記載を検討していただけないでしょうか?
プルリクなど出さず意見だけのコメントになってしまい申し訳ございませんが、ご確認の程宜しくお願いいたします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment