私はvim-rubyインデントで遊んでいますが、かなり複雑な正規表現がいくつかあります。
" 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
(試合の終了)があるのですか? - \%()は何をしますか?それは単なるグループ化の形式ですか?