vim-jp/issues — Issue #99: complete-functionが-1を返した時の動作を再検討する
Author: koron
Created: 2011-12-01 03:53:43+00:00
State: open
Labels: discuss, document

#97 からの派生問題。

補完関数がa:findstart==1で呼ばれ-1を返した場合のVimの動作が変である。
ヘルプによれば候補が無い場合は-1を返すとあるが、Vimのその後の挙動については一切言及されていない。
ちなみに現在は-1を受け取った場合、Vimは補完モードを継続しa:findstart==0で補完関数を呼び出している、っぽい。
(最後、村岡はソースコード上でのトレースのみなので、「っぽい」とした)

特にこれが問題になるのはalways指定の場合で、#97の事象はそれに関連しているっぽい。
(この下は村岡の推測なので誰か補強please)
恐らく補完関数がa:findstart==1で-1を返したあと、
a:findstart==0、a:base=="(空文字列)"で再度補完関数を呼び出すべきところを
a:base="(以前のleader)"になってるんだろう。
少なくともこのケースではa:baseは空で有るべきだろう。 #97のmattnさんによるパッチはそれを実現するもの。

ただし問題は-1が返った場合どうするかなので、

* どのように動作するか決定し
* 補完モードを終了する(現在と違う挙動)とする
* 補完モードを継続する(現在と同じ挙動)とする
* ドキュメントに追記する

という工程が必要だ。