如何在Emacs中的.F90文件中以不同方式突出显示浮点数和整数?

时间:2016-10-10 13:02:20

标签: emacs fortran elisp

如何在Emacs中的.F90文件中以不同方式突出显示浮点数和整数?在我的版本24.4.1中,浮点数和整数之间没有区别。如何以不同颜色显示它们?

2 个答案:

答案 0 :(得分: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")))

答案 1 :(得分: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)中更改了以下部分:

  3. (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模式的标点符号。所以,我必须相应地修改正则表达式和表格。

    1. 完成上述操作后,我将(add-hook 'f90-mode-hook 'highlight-numbers-mode)行放入我的init.el以通过elpa加载此包。

    2. 之后,我的代码中的浮动将突出显示,例如

    3. example

      你可以看到浮点数和整数的差异。

      最后,我补充一点,我已经使用了这几天了。到目前为止没有问题发生。所以,我想这是有效的! :)