2011-09-29 33 views
9

我一直在使用bpython一段時間來滿足我所有的Python解釋需求。這很令人愉快,尤其是當您使用不熟悉的新庫或具有多種功能的庫時。在任何情況下,我都很高興有一個bpython解釋器與我正在做的事情一起運行,但如果我同時具有類似自動完成功能和參數描述,那麼它會更好,因爲bpython的做法是 I在Emacs中編輯代碼。我完全瘋了嗎?有沒有人有關於如何做到這一點的想法?Emacs Python模式中的bpython-like autocomplete和參數描述?

感謝, 布拉德利權力

回答

10

你不是完全瘋了。

python-mode可以與eldoc-mode集成以顯示您要調用的函數的arg規範。當你在python文件中打開它時,只需執行M-x eldoc-mode,它應該開始工作。它會與較低級的python緩衝區進行交互以直接檢查這些函數,因此它應該總是非常準確。您可以在emacs啓動文件中自動打開的所有新python-mode緩衝區。現在,在這一點上,我不得不說,我不做任何常規的Python編程,並且當我嘗試它時,它不起作用。我花了幾分鐘時間在源代碼中探索,一切似乎都已到位,但它在低級進程中運行的代碼只是返回一個空字符串。也許這只是我的設置,或者我正在閱讀錯誤的源文件;這很難說。

Emacs提供了幾種不同類型的擴展/自動完成。默認情況下,您可以通過點擊M-/訪問dabbrev-expand。這是一種相當簡單的完成形式;它只是用來處理你正在編輯的任何舊文件。更復雜的是hippie-expand,但即使這並沒有做任何python特定的。該文件表示,它可以與hippie-expand整合,以確切完成,但這可能是一個謊言;我無法弄清楚它是如何工作的。稍微戳一下就會發現幾個相關的解決方案,所有這些都依賴於pymacs。如果我打算做很多python編程,並且沒有設置相當複雜的emacs,我可能會先安裝emacs-for-python。它看起來是一個非常完整的設置,甚至聲稱有實時的警告/錯誤檢測。

本着幫助別人幫助自己的精神,我想指出我是如何處理所有這些信息的。我的第一步是在python-mode中打開一個文件。實際上我沒有任何python代碼可用,所以我只是到我的暫存緩衝區並將其設置爲一個python緩衝區(M-x python-mode)。然後我向這個奇怪的新模式尋求幫助(C-h m),看看它可以做什麼。它的作者已經很好地概括了模式可以做什麼,其中提到了eldoc-mode,Imenu,outline-modehippie-expand,rlcompleter,縮略表和其他一些東西。從那裏我開始查看源代碼。例如,要與eldoc-mode集成,它定義了一個名爲python-eldoc-function的函數,並將其提供給eldoc模塊以用於python緩衝區。讀取代碼顯示了它如何與劣質緩衝區交互,等等。

我希望這有助於。

+0

非常感謝你。最初的實驗表明,這是有效的,當我進入實驗室時,我會在emacs-for-python中探索。 –

+0

不客氣:) – db48x

+0

@ db48x另一個很好的答案。我喜歡你的gib的剪輯。 –