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

How to highlight floating numbers and integers differently in .F90 files in Emacs?

如何在 Emacs 中以不同方式突出显示 .F90 文件中的浮点数和整数?在我的24.4.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")))

我两周前发布了这个问题。现在我有了自己的解决方案。所以,我把它贴在这里作为其他可能遇到同样情况的人的参考。

首先,非常感谢@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-mode 中被用作标点符号。所以,我必须相应地修改正则表达式和 table。

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

  2. 之后我代码中的浮点数会高亮显示,比如

example

你可以看出浮点数和整数的区别。

最后,我要补充一点,我已经使用了好几天了。到目前为止没有问题发生。所以,我想它正在工作! :)