有沒有相當於python的粘液?如何在Python中使用emacs使用meta-dot(M-。)?
例如,如果我將光標放在foo()上並執行M-。 (跳轉到),我想看看函數foo的源定義
這應該不管富是在一些
1)本地項目目錄
2)工作的〜/ .virtualenvs /酒吧/ lib中/在其他Python路徑
4)虛擬ENV在使用中(即,它應該在我目前的virtualenv)
站點包3)
pymacs/ropemacs組合是否可以做到這一點?
有沒有相當於python的粘液?如何在Python中使用emacs使用meta-dot(M-。)?
例如,如果我將光標放在foo()上並執行M-。 (跳轉到),我想看看函數foo的源定義
這應該不管富是在一些
1)本地項目目錄
2)工作的〜/ .virtualenvs /酒吧/ lib中/在其他Python路徑
4)虛擬ENV在使用中(即,它應該在我目前的virtualenv)
站點包3)
pymacs/ropemacs組合是否可以做到這一點?
爲了避免您可以使用ETag -e和有找到你遞歸添加PY文件:
find . -type f -name '*.py' | xargs etags
M-。通常運行「find-tag
」功能。 您應該創建一個Python源文件的TAGS文件。然後你在做M-之前「visit-tags-table
」。這樣,Emacs將跳轉到標籤的所有定義。類型C-u M-。跳轉標籤的下一個定義。請參閱find-tag文檔以獲取幫助。請教Emacs幫助知道如何從python源文件創建一個TAGS文件。
例如,您可以使用Exuberant Ctags創建TAGS文件。
轉到您的Python文件的根目錄,然後執行以下操作:
ctags -e -R .
標籤文件是在項目的根目錄下創建的。
我建議在看http://www.emacswiki.org/emacs/EtagsSelect爲好,它提供了一個更好的接口,如果你綁定'M-.'到'的ETag選 - 查找 - tag' – phils 2010-08-17 22:13:27
隨着根的ETag的,並且幾個項目不會在相同包的不同安裝(多個站點包?)之間混淆。或者至少,每次它彈出一個緩衝區問我*哪一個源defn我想去? – nunb 2010-08-18 05:01:15
您在每個項目的各自根目錄(而不是系統的根目錄)中創建一個TAGS文件。然後你在每個你感興趣的TAGS文件上使用'visit-tags-table'。所有TAGS文件參考都附加到'tags-table-list'變量。然後,使用M-。 ,emacs在'tags-table-list'中引用的所有TAGS文件中搜索關鍵字。 – 2010-08-19 15:14:33
下將指數當前項目
find . -type f -name '*.py' | xargs etags
但是,如果你想索引你的導入庫。你首先激活你的virtualenv。然後使用which
python來檢測你的庫在哪裏,然後將它們傳送給etags。
workon my-project # if using virtualenvwrappwer
source bin/activate # if using virtualenv
find ${$(which python)/\/bin\/python/} -type f -name '*.py' | xargs etags
這裏提到的大多數答案都過時了。一個簡單的解決方案是使用elpy作爲M-.
而沒有etags(這需要額外的工作)。
M-x package-install elpy
,然後再安裝Python包
$ sudo pip install rope jedi
重新啓動emacs的,打開任何蟒蛇文件並運行M-.
Elpy是完全記錄,你可以閱讀about M-.
here。
接受的答案錯過了一個重要的觀點,如果您執行etags
就像find . -type f -name '*.py' | xargs etags
那麼每個文件每次都會生成每個TAGS文件。
做到這一點是如果你要包括從虛擬ENV現場包標識符將數據追加到與--append
現有的標籤文件像
rm -f TAGS
find . -type f -name '*.py' -print0 | xargs -0 etags --append
也是正確的方法目錄(例如:~/.virtualenvs/bar/lib/site-packages
):
SITEPACKAGES=$(cdvirtualenv;pwd)/lib/python3.6/site-packages/
find $SITEPACKAGES -type f -name '*.py' -print0 | xargs -0 etags -a
*調整python3.6
到當前的Python版本
嘗試的Emacs的anaconda-mode和company-anaconda包。更新配置:
(eval-after-load "company"
'(add-to-list 'company-backends 'company-anaconda))
(add-hook 'python-mode-hook 'anaconda-mode)
(add-hook 'python-mode-hook 'company-mode)
切換到virtualenv與pythonic-activate
,如果你有。
現在你已經得到M-.
,你可以按M-*
回去!
我寧願相當於粘液,也就是說,在代碼/語義層面上,而不僅僅是在文本級別上咕py python。 Ropemacs或pymacs可能是我想要的,但我不知道它是否有助於M-。以任何方式。 – nunb 2010-08-18 05:02:34