如何在Emacs中的.F90文件中以不同方式突出显示浮点数和整数?在我的版本24.4.1中,浮点数和整数之间没有区别。如何以不同颜色显示它们?
答案 0 :(得分:1)
默认的emacs fortran模式不区分浮点数和整数的字体面。但是,您可以使用highlight-numbers
包(通过M-x package-list-packages
或https://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
。他的解决方案可能有效但是,我的要求稍微复杂一些,所以我决定采用不同的方式。
另外,我不得不承认我是编程的初学者。所以,你可能会在我的代码中找到一些愚蠢的行。如果您认为有更好的方法,请随时告诉我。
以下是我的解决方案。
在emacs中安装highlight-number-mode
和parent-mode
。 (第一个是第二个要求。)在我的情况下,它们安装在/ ~/.emcas.d/elpa/
下。
据我所知,原始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)
行放入我的init.el
以通过elpa加载此包。
之后,我的代码中的浮动将突出显示,例如
你可以看到浮点数和整数的差异。
最后,我补充一点,我已经使用了这几天了。到目前为止没有问题发生。所以,我想这是有效的! :)