vim-jp / issues

有志で既知のバグや要望を検討・管理し、オフィシャルへの還元をしていきます。
https://vim-jp.org/
343 stars 11 forks source link

補完関数のrefresh=alwaysの挙動が不自然 #513

Open Shougo opened 10 years ago

Shougo commented 10 years ago

Vim 7.3より追加されたrefresh=alwaysの挙動が不自然です。

例をあげます。

set nocompatible
set completeopt=menuone
function MyComplete(findstart, base)
  if a:findstart
    return 0
  endif

  echomsg string(a:base)
  return {'refresh' : 'always', 'words' : ['foobar']}
endfunction

setlocal omnifunc=MyComplete

上記の .vimrc で補完させたとします。 この補完関数はどんなテキストでも 'foobar' を返します。refresh=alwaysを指定しているので、入力テキストが変化しても補完関数が呼び出され続けるはずです。

しかし、以下のような挙動となります。

  1. <C-h>を用いた時に補完関数が呼び出される。これは意図通りの挙動。
  2. 'foo'を入力した時に補完し、その後絞り込んで'foob'と入力しても補完関数は呼び出されない。Vimによって自動的に絞りこまれ、「Pattern Not found」となる。

絞り込みを補完関数にやらせるためにrefresh=alwaysを指定しているはずなので、この挙動は不自然だと思います。

Shougo commented 10 years ago

OmniSharpプラグインで、この挙動に困っているようです。さて、どうしたものか……。