我正在編寫一個Visual Studio擴展程序,它爲某種內容類型提供智能感知。 我現在面臨的問題是Visual Studio在用戶輸入字符時在空行上提供的「自動縮進」效果。完成(智能感知)會話時的智能縮進效果
在這裏完成會話開始在一個空行(超過虛擬空間):
通知的其他線路的標籤的符號和與在其上插入符的線沒有標籤。
現在,當使用開始打字,VS自動且正確地添加必要的製表符到該行:
現在的問題是那些添加了選項卡顯然成爲所述用戶輸入的一部分,並作爲一個結果CurrentSession.SelectedCompletionSet.SelectBestMatch()
或者Filter()
方法在這裏找不到以「C」開頭的當前項目(思考用戶輸入了\ t \ tC)。
如果我在其他任何不需要自動縮進的地方開始會話,一切正常。
有什麼想法?
編輯(詳細信息):我使用的代碼流非常相似:
在Lua和Clojure中你不會面臨這個問題,因爲他們從不在虛擬空間提供智能(這意味着他們唉ys從一組特定字符開始),並且如果在字符虛擬空間已經變成真實空間之後開始。
另一方面OOK有同樣的問題。
謝謝你的回答。調用StartSesion()實際上是在按鍵按下之後**發生的。我首先調用'Next.Exec(pguidCmdGroup,nCmdID,nCmdexecopt,pvaIn,pvaOut)',然後檢查'VSConstants.VSStd2KCmdID.AUTOCOMPLETE',但它再次發生。 VS會在會話開始後和第一次按下按鈕(在Next.Exec(...)之後再次添加這些額外的選項卡) –
另外'AugmentCompletionSession()'在會話開始時只被調用一次。當時的插頁就在虛擬空間上。搜索單詞範圍沒有意義。 –
另:另請參閱我在編輯 –