我正在嘗試爲某些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]項目。
問題是,我無法弄清楚如何獲得用戶從完成彈出式菜單中選擇和接受的項目。有沒有一種乾淨的方式來實現它?有趣的是,我記住了整個用戶案例情景,但在我開始之前就陷入了困境。不知道用戶從列表中選擇了什麼,很難實現這種「自學習/自適應」代碼完成系統。
非常感謝您的回答!我不知道新的CompleteDone事件。乍一看,它看起來是最好的選擇,除了它是非常新的,並且據我所知,界面還沒有完全定義。 CursorMovedI方法可能有效,但我仍然無法確定用戶是選擇了「p1 [o2]」還是「p1 [o3]」。尾部的[o1],[o2]作爲完成項目詞典的「kind」屬性提供。 – talek
我自己使用'CursorMovedI'。你是對的,這種「善良」財產已經喪失;完成菜單並不意味着這樣的事情。你必須實現你自己的完成查詢(用':echo'和'input()')。 –
這就是我所害怕的。我向Bram發佈了一條建議,也許所選項目的索引號可以作爲此新CompleteDone活動的一部分提供:https://groups.google.com/forum/?fromgroups = #!topic/vim_dev/XDFDQ8rkBII – talek