如何在Emacs中的.F90文件中突出显示浮点数和整数?在我的版本24.4.1中,浮点数和整数之间没有区别。我怎样才能以不同的颜色显示它们?如何在Emacs中的.F90文件中突出显示浮点数和整数?
回答
我张贴了这个问题,两个星期前,现在我有我自己的解决方案,因此,我在这里张贴为别人谁可能遇到同样的参考。
首先,我很想感谢@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)
在我经由ELPA加载此包。后来,在我的代码彩车将被突出显示,如
而且你可以看到在浮点数和整数的区别。
最后,我补充说我已经使用了这个好几天了。目前没有问题发生。所以,我猜这是行得通的! :)
默认的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")))
嗨贾斯汀,谢谢你的回答。我已经安装了高亮数字模式和父模式。然而,把你在我的init.el中提出的建议给出了一个错误:“作为变量的符号值是void:highlight-numbers-modelist”。 –
我也尝试直接在highlight-numbers.el中添加fortran模式,然后手动启用此包。但它仍然没有区分浮点数和整数。他们一起变成了不同的颜色。你能解释你在代码中写的是什么吗?提前致谢! –
我不确定把上面的代码放在'init.el'中是否可行,我将它添加到了我的'〜/ .emacs'中。该错误表明'highlight-numbers'包尚未初始化。至于你的第二个评论,这可能意味着'highlight-numbers-mode'是活动的,但使用默认的模式匹配,高亮显示浮点数和整数。我上面写的代码只会导致浮动显示。 –