VIM的omnicomplete自動完成功能並不像預期的那樣工作。如何在INSERT模式下觸發omnicomplete/auto-completion鍵擊?
有沒有辦法讓它變得更聰明?就像監視環繞文字的上下文一樣? (例如,如果在評論或引用內不觸發)
我問,因爲與自動完成/ IDE中的IntelliSense(如Visual Studio,IntelliJ,Sublime和Atom)中的IntelliSense相比,切換到Vim後無法獲得愉快的地方(過去我已經將這些用於開發)。
的基本目標,這個問題:
- 可以Omnicomplete在INSERT模式A-ZA-Z按鍵被觸發?我已經通過「。」觸發了它。點符號。
- 如何獲取Omnicomplete插入func的參數?
我是Vim新幾個月,拼命試圖獲得順暢的工作流程。但是如果沒有一個很好的自動完成選項,雖然迫使我在學習我嘗試使用的代碼時更加警惕,但它比我過去使用的其他IDE慢得多。
Atom + Go-Plus
讓我們用Atom + Go-Plus檢查我的期望。
我有一個名爲func generate(entropy chan<- uint64)
的func位於同一包中另一個Go文件的其他地方。
當我在第22行中鍵入字母g
,我立即得到一個提示與相剋開始的一切:
正如你可以看到,有3個選項,立即彈出(在前兩個我認爲只是代碼片段)。我可以使用箭頭鍵向下滾動到任一選項。
如果我選擇第三選項(或者,如果我繼續鍵入gen
領域範圍縮小到只有1個選項),press enter
的Atom/Visual Studio中/崇高所有填寫方法的細節對我來說:
我沒有輸入任何上述內容。它被插入,我可以覆蓋細節,修改它們,或者僅僅關閉並繼續輸入。
的Vim + VIM-圍棋(真的Omnicomplete)
我們來比較一下與omnicomplete
我目前(也許壞了嗎?)配置。我有這個在我的.vimrc:
set completeopt=longest,menuone
在VIM,如果我輸入gen
,我得到的是什麼似乎是我的,我在這個緩衝輸入別處以前輸入的文本(只有在該緩衝區,而不是其他緩衝區)。如果我碰巧拼錯了某些東西,我會得到我之前輸入的用於打開vim的生活的拼寫錯誤版本。這告訴我有在工作中沒有智能感知/自動完成 - 只是一些監視我讓擊鍵:
正如你所看到的,自動完成不工作,因爲我打字。儘管如此,在其他地方也可以使用評論和字符串,我很喜歡vim如何記住我輸入的自由文本。
不確定Vim選項是否啓用此功能;但是,它不是自動完成的。現在
,我可以按CTRL-X + CTRL-O
強制自動完成,並得到generate()
展現出來:
這是更好的;但是,我希望它會在我輸入時向我顯示自動完成選項:不需要3次額外的擊鍵來實現它。這是整個編程幾個小時內發生的大量C-x C-o事件。
有沒有辦法讓Vim在INSERT模式下監視我的按鍵,並在有匹配的ctag或函數時顯示自動完成?這可能是此功能的答案。
自動完成功能與參數
有與omnicomplete
自動完成,我可以忽略上述的CX共同需求,如果這工作了第二個問題:一旦我做選擇我要自動完成的方法,它不會插入我的參數/字段。
讓我們再回到上面的截圖中,如果我選擇的方法,這就是我得到:
注意它不會插入的FUNC的paramters。它與上面發佈的第二張圖片不匹配,Atom,Sublime和Visual Studio中的自動完成全部通過參數顯示完成該方法。
我已閱讀vim維基,並試過set completeopt
的各種選項,沒有任何可行的選擇。
例如,set completeopt+=preview
讓我選擇後的預覽窗口:
爲什麼讓我在預覽中的參數,它仍然無法自動完成我的代碼line 22
通常是一種分心(我通常會禁用它,因爲我輸入的速度比不停地「查找」的速度快得多)。
它花了很多的配置文件的調整,以獲得下面的工作;但是,我能夠使「點」自動完成工作。因此,有某種形式的自動完成的工作的:
但同樣,它不填入參數,一旦我選擇一個功能,這是非常惱人必須鍵入ESC + back arrow + back arrow + : + GoDoc
只是爲了看看它是什麼:這是10個字符筆畫,看看它是什麼。
當然,原子,崇高和VS是更漂亮時,「點自動填充」:
(它也更好地類型排序的,但我確實有vim的設置要記得上次使用在頂部,這有助於)。但我不關心漂亮 - 我只是希望我的參數在用'點'選擇時顯示出來。
任何有關如何調整vim-go和相關插件的建議都會非常受歡迎,因爲我寧願在Vim中使用任何IDE。謝謝。
編輯:
我看到the author of vim-go
對參數完成部分工作,並得到了它的工作:
雖然,我似乎無法得到它的工作我的安裝(仍在調試它),我想向其他人展示確實可以通過填充參數來實現自動完成。
1的Vim是一個文本編輯器,而不是一個IDE。如果您需要/需要IDE功能,請使用IDE。 2. Vim只做*手動*完成,而不是*自動*完成。 – romainl
2017年秋季,仍然是故事的寓意是停止嘗試讓vim像IDE一樣工作。 Vim是一個很棒的文本編輯器,但是很遺憾我們需要IDE來高效地工作。在經過THAT STEEP學習曲線並嘗試了幾十個插件之後,會得到一個Vim,它會突出顯示包含幾百個LOC的文件(閱讀:真實生活代碼)。完成和intellisense似乎只能在精心策劃的演示中工作:( – Ejaz