gpt4 book ai didi

Emacs C 模式 - 你如何语法高亮十六进制数字?

转载 作者:行者123 更新时间:2023-12-04 14:49:43 25 4
gpt4 key购买 nike

自从我切换到 Emacs 以来,一直困扰我的一件事是我只能让它在 C 代码中正确地语法高亮十进制数。例如,这些数字正确突出显示:

1234
1234l
1234.5f

但是,这些数字未正确突出显示:
0x1234  // x is different colour
0xabcd // no hex digits are coloured
019 // invalid digit 9 is coloured like it is correct

是否可以让 Emacs 为这些数字中的每个字符着色相同?如果无效数字(如 019 或 0x0g)可以用不同的颜色使它们脱颖而出,那就更好了。

最佳答案

感谢 Mischa Arefiev 的指点,它让我找到了正确的地方。这是我想出的,它涵盖了我所有的原始要求。我现在知道的唯一限制是它会突出显示无效的数字后缀,就好像它是正确的一样(例如“123ulu”)

(add-hook 'c-mode-common-hook (lambda ()
(font-lock-add-keywords nil '(

; Valid hex number (will highlight invalid suffix though)
("\\b0x[[:xdigit:]]+[uUlL]*\\b" . font-lock-string-face)

; Invalid hex number
("\\b0x\\(\\w\\|\\.\\)+\\b" . font-lock-warning-face)

; Valid floating point number.
("\\(\\b[0-9]+\\|\\)\\(\\.\\)\\([0-9]+\\(e[-]?[0-9]+\\)?\\([lL]?\\|[dD]?[fF]?\\)\\)\\b" (1 font-lock-string-face) (3 font-lock-string-face))

; Invalid floating point number. Must be before valid decimal.
("\\b[0-9].*?\\..+?\\b" . font-lock-warning-face)

; Valid decimal number. Must be before octal regexes otherwise 0 and 0l
; will be highlighted as errors. Will highlight invalid suffix though.
("\\b\\(\\(0\\|[1-9][0-9]*\\)[uUlL]*\\)\\b" 1 font-lock-string-face)

; Valid octal number
("\\b0[0-7]+[uUlL]*\\b" . font-lock-string-face)

; Floating point number with no digits after the period. This must be
; after the invalid numbers, otherwise it will "steal" some invalid
; numbers and highlight them as valid.
("\\b\\([0-9]+\\)\\." (1 font-lock-string-face))

; Invalid number. Must be last so it only highlights anything not
; matched above.
("\\b[0-9]\\(\\w\\|\\.\\)+?\\b" . font-lock-warning-face)
))
))

欢迎任何建议/优化/修复!

编辑:阻止它在评论中突出显示数字。

关于Emacs C 模式 - 你如何语法高亮十六进制数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com