如何让Emacs cperl-mode为哈希引用$hashref->{key}实现哈希式着色?
给Perl哈希/数组引用添加cperl-mode风格着色
我太懂这种对语法着色的依赖了——当初嫌cperl-mode的数组、哈希特殊着色麻烦,用久了反而成了读代码的“导航灯”!下面是针对你的需求的Elisp配置方案,能让$hashref->{key}里的$hashref->和普通哈希$hash{key}的哈希名用一样的颜色,数组引用同理:
基础配置(哈希+数组引用)
把这段代码加到你的Emacs配置文件(比如~/.emacs或~/.emacs.d/init.el)里:
(add-hook 'cperl-mode-hook (lambda () ;; 为哈希引用 $hashref->{key} 中的 $hashref-> 应用哈希名着色 ;; 为数组引用 @arrayref->[index] 中的 @arrayref-> 应用数组名着色 (font-lock-add-keywords nil '(("\$\w+\->" 0 'cperl-hash-face t) ("\@\w+\->" 0 'cperl-array-face t)))))
配置说明:
cperl-mode-hook:确保只在cperl-mode激活时加载这些规则- 正则表达式
"\$\w+\->":匹配$开头的变量名加->,正好对应$hashref->{key}的解引用前缀 'cperl-hash-face:直接复用cperl-mode默认的哈希名字体样式,保证和普通哈希$hash{key}的着色完全一致- 最后的
t:表示把这个着色叠加在现有语法高亮上,不会覆盖其他已有的着色(比如变量名本身的颜色)
适配perl-mode的版本
如果你用的是perl-mode而不是cperl-mode,只需要把hook和face名替换一下:
(add-hook 'perl-mode-hook (lambda () (font-lock-add-keywords nil '(("\$\w+\->" 0 'perl-hash-face t) ("\@\w+\->" 0 'perl-array-face t)))))
自定义着色的调整
如果你已经自定义了哈希/数组的着色face(比如自己改了cperl-hash-face的颜色),直接把配置里的'cperl-hash-face换成你自己的face名称就行,比如'my-perl-hash-highlight。
另外,如果你的变量名包含特殊字符(比如非下划线的符号,不过Perl变量名规范里一般只用字母、数字、下划线),可以把正则里的\w换成[\w_](其实Emacs的\w已经包含下划线了,这个是冗余的,只是给你个调整方向)。
内容的提问来源于stack exchange,提问作者Krazy Glew
相关产品推荐
相关产品推荐

