2010-01-18 118 views
48

我已經在Stack Overflow和其他地方搜索了一個小時左右。唉!請幫忙。 Vim的omnicompletion只是不起作用Vim與Python的Omnicompletion不起作用

  1. 我有用Python支持編譯的Vim 7.2。

  2. filetype plugin on在我的.vimrc

  3. .py文件打開時,:echo &omnifunc打印pythoncomplete#Complete

  4. 我正在處理一個大型項目,並使用exhuberant-ctags生成了一個tags文件。它在Vim的ctags路徑中。我可以在一個符號上輸入^]來測試它,然後我將它帶入符號的定義。

  5. 更新1:我所有的項目代碼都在python-in-Vim的路徑中。我可以:python import myproject成功。

現在,無論我嘗試C-X C-O,我得到的是:

-- Omni completion (^O^N^P) Pattern not found 

我在做什麼錯?

更新2:當我在模塊級型號C-X C-O C-N,Vim會顯示從我的項目中其他模塊的幾個模塊級別的常量完成彈出。但它只是常量(符號大寫字母),並且完成在其他任何地方都不起作用。

更新3:我發現C-X C-O在文件的頂部開始某種omnicompletion,並完成了pprint.可以調出菜單和pprint模塊中一切的快速參考。但是,我自己的模塊的導入都沒有完成。

更新4,一年後:我放棄並學習了Emacs。我去過黑暗的一面,神祕的陰謀和香料之地,我對你說,我找到了路。

更新5,兩年後:我回到了Vim。 Emacs很漂亮,但即使經過了1.5年的Emacs,我仍然能夠更快地完成Vim中的工作。但現在我停止編寫Python,並且無法測試這些建議的效果。

+0

如果您還未嘗試過,請嘗試以下操作:http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/ – 2010-02-06 10:06:43

+0

@jellybean - Good link,thanks !我已經使用了'minibufexpl.vim'和'Taglist.vim',但是'TODO'列表的東西將是一個很好的補充。 – 2010-02-12 00:41:02

+3

從來沒有找到答案:( – 2011-03-05 18:40:27

回答

12

什麼模塊包含您正在嘗試完成的符號?它在python stdlib中嗎?或者它是第三方模塊?

確保模塊/軟件包位於PYTHONPATH中。

在Vim中,這樣做:

:python import sys 
:python print sys.path 

要添加模塊的目錄:

:python sys.path.append("/path/to/directory/") 
+0

好的建議,謝謝。這些都是我項目代碼中的符號是的,路徑是在Vim的Python路徑中的,我更新了問題描述 – 2010-01-18 22:15:17

+0

那麼,在你自己的庫中是不是可以自動完成的? – rednaw 2014-02-03 11:39:11

+0

是的,這是可能的,只要確保模塊和軟件包在某個地方在Python的模塊搜索路徑中 – codeape 2014-02-04 19:14:47

9

既然你謹慎,取得了一定的代碼是由PYTHONPATH可達每codeape的建議,有沒有你有可能遇到import bug for Vim Python omni-complete?這個bug在Vim 7.2.245中仍然存在。

實質上,如果任何導入語句在您工作的文件中失敗,無論它是否包含在Try-Except子句中,它將完全中斷全向完成。檢查這件事應該相當容易,因爲大多數導入都是在文件的開頭。

如果你決定,這個錯誤是你的煩惱的原因,你的選擇包括:

  • 確保您導入模塊是系統路徑,而不僅僅是項目文件
  • 評論任何import語句失敗
  • 使用ropevim爲使用不同的編輯器,你的完成方法
  • 修復bug
  • ; NetBeans IDE中有Python的支持,而jVi plugin是,如果你是一個Vim癮君子像我這樣相當不錯的(不要讓上世紀90年代看主頁的糊弄你)
+1

我也遇到過這個問題,完全是我的全部完整。我認爲即使是「警告」模塊已經從項目的不同位置導入,當您試圖全方位地完成它時,也會導致vim會話崩潰。 – Bodhi 2012-04-08 18:46:09

+0

菩提,看看ropevim。 (見鏈接在我的編輯答案以上)。 – gotgenes 2012-04-09 13:47:01

0

您是否嘗試過使用<C_x><C-]>

0

c-x c-n工作得到一個對象的成員列表。

0

我用SUPERTAB(http://www.vim.org/scripts/script.php?script_id=1643)

由於CX有限公司是有點沮喪在.vimrc裏使用

let g:SuperTabDefaultCompletionType = "<c-x><c-o>" 

就用塔布的omnicompletion

+0

我加入固定一個問題: '讓G:SuperTabDefaultCompletionType =「」' 到我的.vimrc(SUPERTAB插件配置) – nexayq 2017-04-12 10:37:50

9

聽起來提問早已不見黑暗面*,但對於它的價值,我只是有此症狀,並在我的情況下,原因是我使用的模塊依賴於Python 2.7,但我的Vim版本是用Python 2.5編譯的。

爲了診斷我嘗試了:python import mymodule,該操作失敗並導致依賴模塊導入錯誤。然後:python import dependentmodule其中鏈下一步失敗。等到&等等,直到它失敗,試圖導入自Python 2.7以來新的系統模塊。發現問題。

要解決,我只是做了sudo port install vim +python27。但這是爲OSX。因人而異。 (*我在開玩笑,Emacs用戶是我們的朋友,這是人們在記事本中的編程,我們都必須保存......)

+0

這是最有前途的一個解決方案。謝謝! – 2011-08-01 18:01:20

+0

有趣..我有一種強烈的感覺,我也遇到了這個!我正在使用MacVim(Macports build)和python支持,並且它與(也是Macports)Python 2.5相關聯。我正在開發一個Python 2項目。7,我確定我們導入了一些只有2.7的模塊。當我的選項卡完成(Supertab插件)失敗時,它實際上是SEGV錯誤我的vim會話!我希望用python2.7重新安裝MacVim會解決它。乾杯! – Bodhi 2012-03-27 06:39:36

+1

感覺報告是值得的 - 我的Supertab插件和omnicompletion工作*多*現在好了,但*仍然*有時崩潰我的macvim會話有時:(這似乎是每當有什麼不好的進口順序完成正在尋找(比如說一個潛在的循環導入),不管怎樣,謝謝! – Bodhi 2012-03-27 07:17:09

2

更新到Fedora 16(但仍然從源代碼編譯vim),omni completion停止使用與上面相同的消息。我通過重新映射鍵來「修復」它。

inoremap <C-space> <C-x><C-o> 

~/.vimrc現在它再次工作。

2

我有一個類似的問題,omni完成無法正常工作。在我的情況下,事實證明,minibufexpl.vim插件干擾了omni完成。以下是我的發現:

正常的關鍵字完成工作。 Omni完全不適用於任何語言,不僅僅適用於Python。 omn​​ifunc設置正確。在我C-X C-O之後,沒有任何反應。我做「:py print globals()」,很明顯pythoncomplete沒有加載。我可以「:調用pythoncomplete#Complete(1,'')」並看到它被加載。對我來說,這排除了它是一個Vim問題。看起來有些事情正在干擾keymapping或以其他方式攔截全方位完成請求。所以我開始逐個禁用我的插件。事實證明,在我的情況下,罪魁禍首是「minibufexpl」。我有github的Holgado版本。

根據github上的問題跟蹤器,MBE看起來有很多未解決的問題,並且自2012年初以來還沒有取得任何進展。現在我只是禁用它,因此我可以使用自動完成。同時,我將在vimrc中添加以下內容,以便同時打開多個已修改的緩衝區,並使用簡單的按鍵順序循環它們(MBE更智能地選擇要循環的緩衝區,但對於一個簡單問題似乎過於沉重):

set hidden 
noremap <C-TAB> :bnext<CR> 
noremap <C-S-TAB> :bprev<CR> 
0

如果使用python2,請確保您

sudo apt-get install vim.nox-py2 

,並使用vim.nox-PY2而不是vim的。