2016-10-10 68 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'是活动的,但使用默认的模式匹配,高亮显示浮点数和整数。我上面写的代码只会导致浮动显示。 –