補完時にa:baseがgetline('.')の結果に含まれないことがあるのでそれの対応 #150

Closed
tyru opened this Issue Jun 10, 2012 · 7 comments

Projects

None yet

3 participants

@tyru
Owner
tyru commented Jun 10, 2012

これ、Vimの仕様もちょっと気になるところ。(一応bugラベルにしておく)

修正箇所: https://github.com/tyru/eskk.vim/blob/e91bf368abde740a2cd72c72b422b908766cdea4/autoload/eskk/preedit.vim#L193

@mattn
Collaborator
mattn commented Jun 11, 2012

再現方法プリーズ

@Shougo
Collaborator
Shougo commented Jun 11, 2012

Vim 7.3.524の環境で確認。

https://gist.github.com/2908040

上記のファイルを:source %して、そのバッファで
vim<C-x><C-o>のキーマップを押してください。

私の環境では、getline(".") = , a:base = vimとなりました。
つまり、a:baseにはvimが含まれますが、getline()にはvimが消えてしまっています。
a:findstart = 1のときは、そういうことはないです。

これは私の予想ですが、Vimのあるバージョンよりa:findstart=0のときはa:baseをgetline()に含めないような変更がされたのではないでしょうか。たしかに、a:baseにある文字列は補完するまで確定されていないので、getline()に含めないのもそれなりの合理性があると思います。

私の記憶では、7.3で補完関数が辞書を返せるようになったタイミングくらいで動作が変わったような気がしています。7.3.319, 7.3.311, 7.3.289あたりでしょうか。

@mattn
Collaborator
mattn commented Jun 11, 2012

. レジスタが壊れる修正で、補完開始位置以降が補完候補扱いになったのだと思います。

a vim| b

これの|<c-x><c-o>するとgetline(".") = a b(1), a:base = vimになっている事から間違い無いかと。
まぁ僕としてはこっちの方が正しい動きな気がする。

@mattn
Collaborator
mattn commented Jun 11, 2012

この問題はvimの問題(かどうかは別として)だと思うのでissuesに転載します。

@Shougo
Collaborator
Shougo commented Jun 11, 2012

わかりました。これはもっと前に報告しておいたほうが良かったですね……。

@mattn
Collaborator
mattn commented Aug 7, 2012

深刻な問題は無いと判断したので vim-jp/issues#40 は閉じました。

@tyru
Owner
tyru commented Jan 11, 2016

かなり前のissueで特に補完時の挙動に問題は起きていないと思われるのでクローズ。

@tyru tyru closed this Jan 11, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment