摘要:最近在用,碰到了這么個問題,花了好一會才解決,在這里記錄一篇,也想請教各位有沒有其他更好的處理方法。這是幾個使用中的提示參數提示代碼補全不過使用虛擬環境時,會出現找不到的問題。最后,還存在使用版本的問題。
最近在用jedi-vim,碰到了這么個問題,花了好一會才解決,在這里記錄一篇,也想請教各位有沒有其他更好的處理方法。
jede是用python開發的庫,能實現python補全、提示、變量查找等等,這個在開發中特別有用,代碼補全可以減少輸入字符數,代碼提示則可以減少看文檔的時間,總之,jedi-vim實在是程序員居家旅行、殺人越貨的必備利器。
這是幾個使用中的screenshot:
import提示
參數提示
代碼補全
不過使用虛擬環境virtualenv時,會出現jedi找不到django的問題。
首先,jedi的查找范圍是sys.path,在vim中運行:
python << EOF print(sys.path) EOF
結果;
["/usr/lib/python2.7", "/usr/lib/python2.7/plat-linux2", "/usr/lib/python2.7/lib-tk", "/usr/lib/python2.7/lib-old", "/usr/lib/python2.7/lib-dynload", "/usr/local/lib/python2.7/dist-packages", "/usr/lib/python2.7/dist-packages", "/usr/lib/python2.7/dist-packages/PIL", "/usr/lib/python2.7/dist-packages/gst-0.10", "/usr/lib/python2.7/dist-packages/gtk-2.0", "/usr/lib/pymodules/python2.7", "/usr/lib/python2.7/dist-packages/ubuntu-sso-client", "/usr/lib/python2.7/dist-packages/ubuntuone-client", "/usr/lib/python2.7/dist-packages/ubuntuone-control-panel", "/usr/lib/python2.7/dist-packages/ubuntuone-couch", "/usr/lib/python2.7/dist-packages/ubuntuone-installer", "/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol", "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode"]
確實是沒有把django所在的目錄加進來。
其次。其實jedi現在也已經支持虛擬環境查找,在jedi的module.py中,實際上已經有這個函數了:
def get_sys_path(): def check_virtual_env(sys_path): """ Add virtualenv"s site-packages to the `sys.path`.""" venv = os.getenv("VIRTUAL_ENV") if not venv: return venv = os.path.abspath(venv) p = os.path.join( venv, "lib", "python%d.%d" % sys.version_info[:2], "site-packages") sys_path.insert(0, p) check_virtual_env(sys.path) return [p for p in sys.path if p != ""]
但是啟動virtualenv后,在啟動vim,觀察sys.path,沒有變化,所以get_sys_path函數沒有運行。
最后,還存在vim使用python版本的問題。vim在運行python代碼中,會使用安裝vim指定的python解釋器,在我的環境中是python2.7,但是我用的虛擬環境是python3.3,這行代碼:
p = os.path.join(venv, "lib", "python%d.%d" % sys.version_info[:2], "site-packages")
得到的路徑是:
/home/me/python3/lib/python2.7/site-packages
而實際上,虛擬環境的site-packages在:
/home/me/python3/lib/python2.7/site-packages
也就是說,即便vim啟動時執行了jedi的get_sys_path函數,得到的結果也是錯的。
最后,我參考了別人的.vimrc,弄了這個蹩腳的方法,在.vimrc中加入:
" Add the virtualenv"s site-packages to vim path if has("python") py << EOF import os.path import sys import vim if "VIRTUAL_ENV" in os.environ: project_base_dir = os.environ["VIRTUAL_ENV"] sys.path.insert(0, os.path.join(project_base_dir, "lib", "python%d.%d" % sys.version_info[:2], "site-packages")) EOF endif
其實就是把虛擬路徑地址硬編碼到sys.path中。
如果擁有系統權限,其實還有個方法,就是把django直接安裝到vim使用的python的庫中。
最后我還是想吐槽一下jedi-vim的不足,jedi-vim的補全一定要手工Ctrl+space。我原來用的補全是根據字符串匹配的,不能根據python語法做補全和提示,但能自動彈出,如果在代碼中寫了很多長變量,這時候自動彈出就省了不少力氣。要解決這個問題,可以試試youcompleteme,這個包含了jedi,并且引入了fuzzy匹配。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24768.html
摘要:以插件擴展系統為代表的可定制框架,是現代的另一個流行趨勢。這里收集了一些對開發者非常有幫助的,比較好的。眾所周知,是開發平臺產品的利器,是等應用開發的首選。開源,可以用下載到最新的源代碼,依賴。 工欲善其事,必先利其器,如果說編程是程序員的手藝,那么IDE就是程序員吃飯的家伙了。 一個優秀的IDE,最重要的就是在普通文本編輯之外,提供針對特定語言的各種快捷編輯功能,讓程序員盡可能快捷、...
摘要:分享一些超好用插件,打造一個不一樣的瀏覽器編輯器。一谷歌瀏覽器插件谷歌訪問助手強烈推薦一鍵安裝,無需其他配置,即可訪問谷歌。谷歌瀏覽器是很耗內存的,該插件會自動掛起長時間未使用的網頁,來釋放系統資源。 showImg(https://segmentfault.com/img/remote/1460000014011338); 分享一些超好用插件,打造一個不一樣的 GitHub、瀏覽器、...
摘要:添加補全源一般如果沒有安裝任何源,則自動補全只會根據當前文件已有的名字進行猜測。我們要的效果是根據語言的特性,補全引用自帶庫第三方庫的所有類函數等。 Nvim用的是Shougo開發的NCM,但是在VIM 8+就要用同一個作者開發的Deoplete. 參考官網:Shougo/deoplete.nvim 注意:這里只講怎么給vim8安裝。 安裝 第一步:安裝所有依賴 # 安裝VIM 8 #...
摘要:使用方法輸入狀態下,直接按,就會自動打出相關的預設片段。如何自定義直接在目錄下添加文件即可。注意以下幾點目錄是位于所有插件之外的,所以不會因插件更新而被刪除。 在~/.vimrc的Vundle插件管理函數中添加以下內容(插件本身和所依賴的插件): Plugin MarcWeber/vim-addon-mw-utils Plugin tomtom/tlib_vim ...
閱讀 859·2021-11-24 09:38
閱讀 1093·2021-10-08 10:05
閱讀 2583·2021-09-10 11:21
閱讀 2805·2019-08-30 15:53
閱讀 1832·2019-08-30 15:52
閱讀 1967·2019-08-29 12:17
閱讀 3421·2019-08-29 11:21
閱讀 1614·2019-08-26 12:17