Regular-Expression
使用 Perl RegEx 的 ViM 語法文件同步匹配
我想知道是否可以在 .vim 語法文件中使用 Perl RegEx 而不是 Vim Speak。
如果我有一個語法文件,例如
/usr/share/vim/vim80/syntax/none.vim " Vim syntax file " Language: Custom None " Maintainer: Nobody if exists("b:current_syntax") finish endif syn match noneIndentError "*Some Vim Speak RegEx*" hi def link noneIndentError Error let b:current_syntax = "none"
是否可以在同步匹配中使用 Perl RegEx 而不是 Vim Speak 匹配?我的 RegEx 是為 Perl 編寫的,我似乎無法讓它在 Vim Speak 中工作
(?:^)(?: {4})*+( {1,})
RegEx 僅測試縮進的 4 個空格中未包含的空格,如果您願意,可以在此處查看
以下比賽應該做你想做的事:
syn match noneIndentError /^\( \{4\}\)*\zs \{,3\}/
使用
\zs
,您可以從匹配中排除它之前的模式,因此這是編寫零寬度環視的更簡單方法(類似於\K
Perl 中的)。然後它最多匹配 3 個空格。以下是它如何匹配不同的行:
foo # bar baz
- 6 個空格後跟文本
- 3 個空格後跟文本
- 5個空格
- 4個空格
- 8 個空格後跟文本