如何仅对GetKey函数参数内的KEY_开头标识符实现Vim语法高亮?
解决Vim语法高亮仅限定GetKey函数内KEY_标识符的问题
你的问题出在原语法规则没有精准限定KEY_开头标识符的匹配范围,导致外部的KEY_PRESSED也被误识别。可以通过以下步骤修正:
正确的语法规则配置
" 定义GetKey函数调用的括号内区域,transparent让区域本身不高亮 syn region GetKeyCall start=/GetKey(/ end=/)/ transparent " 仅在GetKeyCall区域内匹配KEY_开头的标识符 syn match GetKeyArg /KEY_[_a-zA-Z0-9]\+/ contained containedin=GetKeyCall
规则说明
syn region GetKeyCall:精准定位GetKey(到)的范围,transparent参数确保这个区域本身不会被高亮,只作为内部语法元素的容器。syn match GetKeyArg:匹配KEY_开头的标识符,contained表示它只能在包含它的语法组内生效,containedin=GetKeyCall明确限定仅在GetKeyCall区域内匹配。
效果验证
对于代码:
if(GetKey(KEY_SPACE) == KEY_PRESSED)
KEY_SPACE会被识别为GetKeyArg并高亮KEY_PRESSED不在GetKey()括号内,不会被匹配
内容的提问来源于stack exchange,提问作者Aceldama
相关产品推荐
相关产品推荐

