2012-05-25 51 views
1

我有emacs 23.3.1,在Windows上運行。如何配置emacs在php模式下正確評論代碼?

PHP模式1.5從http://php-mode.sourceforge.net/, 修改:2008-11-04

認爲這個用來工作,但現在,當我嘗試註釋掉的代碼塊,使用 comment- region,這是一個交互式的 在`newcomment.el'編譯的Lisp函數,我得到的結果很差。

例子:

前:

enter image description here

後:

enter image description here

你可以看到,在註釋塊中每行都有單行註釋開始序列//,以及多行註釋結束序列*/

這不是一個大問題,雖然它很醜。當我嘗試取消註釋塊時,問題就出現了。我收到一條錯誤消息,「找不到評論結束」。換句話說,comment-regionC-u comment-region不可逆。

我會看看如果我可以弄清楚這一點,但有沒有我在php模式下丟失的設置?

有人知道嗎?


更多

我沒有把任何東西在我的PHP模式掛機功能改變comment-startcomment-end變量。當我調試comment-region我可以看到他們設置爲不匹配的一對//*/。這解釋了評論區域的奇怪結果。我不相信這是我的代碼,它設置這些變量。

我試圖明確地在我的鉤子//和(空字符串)中設置它們。在這種情況下,comment-region看起來更漂亮,但它仍然不會取消註釋。我也嘗試了匹配的/**/,但得到了相同的結果。取消註釋不成功;錯誤是can't find comment end.

更多2

我想我的語法表是正確的。它顯示了這一點:

enter image description here

...這似乎我的權利。

+0

http://emacswiki.org/emacs/PhpMode爲這個錯誤提供了補丁。 – tripleee

+0

謝謝。將檢查出來。 – Cheeso

+0

嗯,好吧,那個頁面非常大,我沒有看到任何特別的東西,它看起來像描述了我在這裏遇到的問題。在頁面上也沒有看到任何明顯的補丁,儘管有指向其他派生模式的指針來修復各種事情。但這些不同的事情並不是我的具體問題。無論如何,我發現了一些讓我繼續下去的東西,那就是設置'comment-use-syntax'變量。可能不適合每個人,但它爲我工作。 http://stackoverflow.com/a/10759293/48082 – Cheeso

回答

3

這解決了這個問題對我來說:

(setq comment-use-syntax t) 

我把在我的PHP模式掛鉤。

不知道這是否有必要,但我還包括語句來修改語法表。整個鉤看起來是這樣的:

(defun cheeso-php-mode-fn() 
    "Function to run when php-mode is initialized for a buffer." 
    (require 'flymake) 
    (flymake-mode 1) 

    (setq c-default-style "bsd" 
     c-basic-offset 2) 

    ;; not sure if necessary or not. 
    (modify-syntax-entry ?/ ". 124b" php-mode-syntax-table) 
    (modify-syntax-entry ?* ". 23" php-mode-syntax-table) 
    (modify-syntax-entry ?\n "> b" php-mode-syntax-table) 
    (modify-syntax-entry ?\^m "> b" php-mode-syntax-table) 

    (setq comment-multi-line nil ;; maybe 
     comment-start "// " 
     comment-end "" 
     comment-style 'indent 
     comment-use-syntax t)) 

comment-use-syntax幫助聲明說,主要模式應該設置它。 在我編輯的php緩衝區中,變量被設置爲零。我猜它是由php-mode設置的;無論如何它不是由我設定的。將其設置爲t,並確保語法表具有適當的值。

我應該說我只在php中使用C風格的註釋;我不使用#

+0

謝謝,它工作!我使用php-mode-20130920.1850運行了emacs 24.3.1上的所有內容,除了modify-syntax-entry和c-default-style和offset部分 – sp3ctum