2011-02-26 36 views
6

我剛開始學習Python並使用Emacs作爲我的編輯器。目前,Emacs對普通字符串(單引號)和文檔字符串(三引號)使用相同的顏色。我希望文檔字符串具有不同的顏色,因此我使用'選項 - >自定義Emacs'菜單選項將'font-lock-doc-face'更改爲新顏色並保存更改。但是,Emacs繼續保持docstrings與普通字符串相同的顏色。更改普通字符串的顏色也會將更改應用於文檔字符串。如何更改Python docstrings的Emacs字體?

Emacs似乎將docstrings和正常字符串視爲相同。有沒有辦法讓Emacs正確地查找Python文檔並將其與正常字符串分開着色?

編輯:我使用Emacs 23.1.1(Kubuntu 10.10包)與默認的Python模式設置。我也使用午夜主題的顏色主題包。

+5

我不知道答案,只是爲了澄清:docstrings和三重引​​用的字符串是單獨的東西(儘管三重引號通常用於docstrings)。緊跟在「def」或「class」行之後的字符串是文檔字符串。三重引號可讓您輕鬆地將字符串分散到多行。 – 2011-02-26 23:35:16

+0

很高興知道。我對Python很陌生,所以認爲三引號字符串隱含文檔。那麼,看起來問題在於Emacs無法區分所描述的文檔字符串和Python文件中的任何其他三引號字符串。 – 2011-02-27 05:31:56

+0

另請參閱http://stackoverflow.com/questions/27317396/how-to-distinguish-python-strings-and-docstrings-in-an-emacs-buffer – 2014-12-07 15:16:05

回答

1

有趣。我是說,由於emacs語法表的工作方式,emacs認爲"""'''表示由新字符串的開頭folowed空字符串。

你可以在你的Emacs的拷貝粘貼下面的代碼到一個Python緩衝區容易驗證這一點:

class MrsRobinson(object): 
    ''' 
    What's that you say? 
    ''' 
    pass 

在Emacs 23.1.1 [更新:,顯然對stackoveflow]這個完全打破文件其餘部分的語法突出顯示。

我總是用"""專門以避免文檔字符串撇號的問題,所以我沒有注意到,直到正確的這一分鐘是在Emacs 23.2.1,這是不知何故最終確定...

(是的,有一個在python.el中稱爲python-quote-syntax的新函數)

所以:在您的emacs版本中,這是不可能的,因爲字符串沒有正確解析。如果你升級到最新的emacs,你可以可以通過修改python.el中的那個函數來處理它們。

+0

我將你的小例子複製到Emacs中,它實際上可以正常工作。也就是說,整個文檔字符串被突出顯示爲一個字符串,'pass'作爲關鍵字正確突出顯示。但我不知道,如果有一種方法可以讓Emacs區分文檔字符串和代碼中出現的任何其他三引號('''或'「」)字符串,我想必須有一些方法來Emacs提供了一些正則表達式告訴它什麼樣的文檔字符串,你知道怎麼做嗎? – 2011-02-27 05:28:28

+0

哦,我可能會在舊的emacs上運行「其他」python模式,無論如何,你仍然需要修改相同的函數。它爲* all * python字符串提供了語法高亮顯示,您只需確定該字符串(不管引用了多少引號)立即出現在文件,類或函數的頂部(忽略註釋和空白)。也許你可以修改詞法分析器來設置一個標誌,當它遇到'class'或'def'時,當它碰到':'時設置另一個標誌,當它碰到任何東西而不是註釋時都會取消設置,如果兩者都是設置和它擊中的是一個字符串。 – tangentstorm 2011-02-27 06:01:12

+0

我看了一下python.el文件,這確實是我需要改變的地方去做我想做的事情。目前這確實在我的頭上,但我必須在某個時候玩弄。感謝讓我更加接近地理解這一點。 – 2011-03-18 03:57:48