如何使 vim syn 正则表达式捕获尾随 space 的单词?
how to make vim syn regex to capture word with trailing space?
我正在尝试制作一个 vim 正则表达式来突出显示此示例中的单词 house
,但前提是后跟空格且句子以分号结尾。
herbert house mouse; bear care; house moose hat; // both instances of house highlighted
cow (house) banana goat; car bar; //house must NOT be highlighted
house beagle //house must NOT be highlighted
来自我的 VIM 语法文件:
syn match ngzRewLine '\w\+[^;]\{-};' contains=ngzRew
syn keyword ngzRew house contained
除了 (house)
被突出显示外,这很好用。我可以使用什么正则表达式来匹配尾随空格和非贪婪结尾分号的单词?
编辑
总而言之,ngzRew
关键字组中的词在以下情况下应突出显示:
- 家鼠;
- 猫家老鼠;
- 家香蕉;鲶鱼家鞋;
- 房子;
以下不应出现突出显示:
- 房子
- 猫(家)奶酪;
这里以house
为例,但ngzRew
关键字组中还有其他关键字,行为应该相同。
你可以这样做(这可能不是很方便,但由于以下空格,我想不出更好的方法)
highlight MyGroup ctermbg=green guibg=green
syntax match MyGroup /\(house\|car\)\ze\(;\|\s.\{-};\)/
现在它也匹配 car
。
@ryuichiro 给了我找到答案所需的一切,所以我把它归功于他。但允许无限数量关键字的完整解决方案如下:
syn match ngzRewLine /\w\+\ze\(;\|\s.\{-};\)/ contains=ngzRew contained
syn keyword ngzRew house contained
syn keyword ngzRew cheesecake contained
syn keyword ngzRew ...etc contained
我正在尝试制作一个 vim 正则表达式来突出显示此示例中的单词 house
,但前提是后跟空格且句子以分号结尾。
herbert house mouse; bear care; house moose hat; // both instances of house highlighted
cow (house) banana goat; car bar; //house must NOT be highlighted
house beagle //house must NOT be highlighted
来自我的 VIM 语法文件:
syn match ngzRewLine '\w\+[^;]\{-};' contains=ngzRew
syn keyword ngzRew house contained
除了 (house)
被突出显示外,这很好用。我可以使用什么正则表达式来匹配尾随空格和非贪婪结尾分号的单词?
编辑
总而言之,ngzRew
关键字组中的词在以下情况下应突出显示:
- 家鼠;
- 猫家老鼠;
- 家香蕉;鲶鱼家鞋;
- 房子;
以下不应出现突出显示:
- 房子
- 猫(家)奶酪;
house
为例,但ngzRew
关键字组中还有其他关键字,行为应该相同。
你可以这样做(这可能不是很方便,但由于以下空格,我想不出更好的方法)
highlight MyGroup ctermbg=green guibg=green
syntax match MyGroup /\(house\|car\)\ze\(;\|\s.\{-};\)/
现在它也匹配 car
。
@ryuichiro 给了我找到答案所需的一切,所以我把它归功于他。但允许无限数量关键字的完整解决方案如下:
syn match ngzRewLine /\w\+\ze\(;\|\s.\{-};\)/ contains=ngzRew contained
syn keyword ngzRew house contained
syn keyword ngzRew cheesecake contained
syn keyword ngzRew ...etc contained