2016-10-10 25 views

回答

0

我張貼了這個問題,兩個星期前,現在我有我自己的解決方案,因此,我在這裏張貼爲別人誰可能遇到同樣的參考。

首先,我很想感謝@Justin回答之前,並建議highlight-number-mode。他的解決方案可能是工作的。但是,我有一個稍微複雜的要求,所以我決定以不同的方式做。另外,我不得不承認我是編程的初學者。所以,你可能會在我的代碼中找到一些愚蠢的行。如果您認爲有更好的方法,請隨時通知我。

這是我的解決方案

  1. 安裝在Emacs highlight-number-modeparent-mode。 (第一個是第一個。)在我的情況下,它們安裝在/ ~/.emcas.d/elpa/下。

  2. 據我所知,原始highlight-number-mode不支持f90-mode,它通過改變喜歡的顏色來同等地突出顯示所有數字(例如2,3,4,8e-2)。這不符合我的要求。具體來說,我只想突出顯示浮動數字,並且我在.f90腳本中將它們表示爲2..5。在Fortran 90中,浮點數和整數有不同的分割規則。所以,我希望以不同的方式將它們可視化,以減少引入此類錯誤的風險。因此,我改變了源代碼以下部分(highlight-numbers.el):

(defconst highlight-numbers-generic-regexp 
    (rx (or 
     "." 
     (? (and 
      symbol-start 
      digit 
      symbol-end) 
      "." 
      (* digit)))) 
    "Generic regexp for number highlighting. 
It is used when no mode-specific one is available.") 

(defvar highlight-numbers-modelist 
    (copy-hash-table 
    (eval-when-compile 
    (let ((table (make-hash-table :test 'eq))) 

     (puthash 'f90-mode 
       (rx (or 
        "." 
        (? (and 
         symbol-start 
         (or (and (+ digit) (? (or "." "e" ".e" "E" ".E")) (+ digit)) 
         (and (+ digit) (? (or "e-" ".e-" "E-" ".E-")) (+ digit)) 
         (and (+ digit) "." (+ digit) (? (or "e" "E")) (+ digit)) 
         (* digit))   
         symbol-end) 
         "." 
         (* digit)))) 
       table) 

如果你比較與原來的由Fanael Linithien上面的代碼,你會發現,我已經添加了兩個"." 。正如Fanael所說(在私下討論中),這可能是由於"."被認爲是emacs中f90模式的標點符號。所以,我必須相應地修改正則表達式和表格。

  • 一旦上面的已經完成,我放線(add-hook 'f90-mode-hook 'highlight-numbers-mode)在我​​經由ELPA加載此包。

  • 後來,在我的代碼彩車將被突出顯示,如

  • example

    而且你可以看到在浮點數和整數的區別。

    最後,我補充說我已經使用了這個好幾天了。目前沒有問題發生。所以,我猜這是行得通的! :)

    1

    默認的emacs fortran模式不會區分浮點型和整型的字體。但是,您可以使用highlight-numbers包(通過M-x package-list-packageshttps://github.com/Fanael/highlight-numbers)。

    以下內容添加到您的.emacs突出花車(改變前景色和背景色,你認爲合適:。

    (add-hook 'fortran-mode-hook 'highlight-numbers-mode) 
    (add-hook 'after-init-hook 
         (lambda() 
         (puthash 'fortran-mode 
           (rx (and symbol-start 
              (? "-") 
              (+ digit) 
              "." 
              (+ digit) 
              (*? any) 
              symbol-end)) 
           highlight-numbers-modelist) 
         (set-face-attribute 'highlight-numbers-number nil 
              :foreground "gray60" :background "black"))) 
    
    +0

    嗨賈斯汀,謝謝你的回答。我已經安裝了高亮數字模式和父模式。然而,把你在我的init.el中提出的建議給出了一個錯誤:「作爲變量的符號值是void:highlight-numbers-modelist」。 –

    +0

    我也嘗試直接在highlight-numbers.el中添加fortran模式,然後手動啓用此包。但它仍然沒有區分浮點數和整數。他們一起變成了不同的顏色。你能解釋你在代碼中寫的是什麼嗎?提前致謝! –

    +0

    我不確定把上面的代碼放在'init.el'中是否可行,我將它添加到了我的'〜/ .emacs'中。該錯誤表明'highlight-numbers'包尚未初始化。至於你的第二個評論,這可能意味着'highlight-numbers-mode'是活動的,但使用默認的模式匹配,高亮顯示浮點數和整數。我上面寫的代碼只會導致浮動顯示。 –