我正在使用vim-ruby-indent,其中有一些非常复杂的正则表达式:
" Regex used for words that, at the start of a line, add a level of indent.
let s:ruby_indent_keywords = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
\ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure' .
\ '\|rescue\):\@!\>' .
\ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
\ '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
在vim文档的帮助下,我解释了它的意思:
start-of-line <any number of spaces> <start matching> <beginning of a word> /atom
<one of provided keywords> <colon character> <nothing> <end of word> ...
我有一些疑问:
- 是真的匹配 ":" 吗?似乎不是这样工作的,但我没有看到正则表达式中冒号是某种特殊字符。
- 为什么有
\zs
(匹配的开头),但没有\ze
(匹配的结尾)? \%()
是什么意思?只是某种形式的分组吗?