2

一部のPLSQL関数/プロシージャ引数にスマートオムニ補完を実装しようとしています。そのような関数はすべてオーバーロードされる可能性があるため、最初に、オーバーロードされたすべてのバージョンのすべての引数を提供します。たとえば、これがあると仮定します。

    procedure test(param1 varchar2, param2 varchar2);  <= overload 1
    procedure test(p1 integer, p2 integer);    <= overload 2
    procedure test(p1 date, p2 date, p3 date); <= overload 3

入力時に提供するリストexec test(|<=cursor hereは次のとおりです。

param1 [o1]
param2 [o1]
p1 [o2]
p2 [o2]
p1 [o3]
p2 [o3]
p3 [o3]

ユーザーが"p1 [o2]"完了ポップアップメニューから選択した場合、選択内容を覚えておき、次の完了試行のために、[o2]パラメーターのみでフィルター処理されたリストを提供するか、別の方法で並べ替えて、[o2]アイテムを最初に表示するようにします。 。

問題は、ユーザーが完了ポップアップメニューから選択して受け入れたアイテムを取得する方法がわからないことです。それを達成するためのクリーンな方法はありますか?ユーザーケースのシナリオ全体を念頭に置いているのはちょっとおかしいですが、始める前に行き詰まってしまいました。ユーザーがリストから何を選択したかを知らなければ、この種の「自己学習/適応型」コード補完システムを実装することは困難です。

4

2 に答える 2

1

最近の Vim パッチ 7.3.598 でこのイベントが導入されましたが、補完候補が挿入された後に発生するイベントをCompleteDone使用することもできます。CursorMovedI

カーソルの前のキーワード ( matchstr(strpart(getline('.'), 0, col('.') - 1), '\k\+$')) は、挿入された補完です。それを変数に保存し、次の完了時にこれを考慮してください。getpos()(別の場所でまったく新しい無関係な完了がいつ発生するかを考慮しないようにするために、( を介して) カーソル位置も保存する必要があるでしょう。

于 2012-12-27T11:26:23.590 に答える