2
2

More than 5 years have passed since last update.

オムニ補完時の col('.') の値

Posted at

<C-x><C-o> で Vim 標準の方法でオムニ補完をした場合、!a:findstart 時の col('.') は補完の開始位置、つまり a:findstart 時に返した場所になる。

しかし、neocomplete.vimYouCompleteMe の場合、各自のエンジンが補完関数を呼んでいるため、col('.') の値は普通に補完時のカーソル位置になる。なので col('.') の値に依存した omnifunc を書くと neocomplete.vim や YouCompleteMe では動かなくなる。
neocomplete.vim の場合、gather_candidate の中で a:context.complete_pos が補完開始位置になっているので、この値を使うようにする。
YouCompleteMe の場合、そもそも a:findstart 時に返した補完開始位置を無視するので (つらい……)、本当の補完開始位置を知るためには再度 a:findstart 時の処理を行う必要がある、と思う。

neco-ghc では汎用的に書く方法を思い付けず、col('.') のこの挙動等によって Vim の補完なのか neocomplete.vim の補完なのか YouCompleteMe の補完なのかを判定して分岐させている……

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2