VIM 语法高亮匹配
VIM syntax highlight matching
我注意到 C++ 函数在我的 vim 样式中没有应用任何样式,所以我想添加一个快速正则表达式匹配来查找紧跟 ( , 并将其算作语法。
在我的 .vim 中,我输入:
syn match cppFun "\w+(?=\()"
这似乎适用于 other regex matchers,但 vim 抱怨 \)
不匹配。
但是,检查 :highlight
,我确实看到语法 cppFun 正在设置一些东西。
我认为 vim 正则表达式可能是倒退的,所以我试了一下
syn match cppFun "\w+\(?=(\)"
虽然它不再抱怨不匹配的 paren,但我仍然没有在我的 main.cpp 中获得功能亮点。
为了让语法高亮显示,正则表达式应该是什么样子?
这是我用 \w+(?=\()
:
测试的内容
int main(int argc, char** argv) {
std::puts('Hello World');
return 0;
}
期望匹配 main
和 puts
要匹配后跟 (
的单词而不匹配 (
,请使用 \w\+\ze(
.
\ze
终止正则表达式的匹配部分。 +
需要在前面加上 \
才能让它变得神奇。 (参见 :help magic)。
vim 中的 positive lookahead 也是用 \@=
完成的。不适用于 (?=...)
.
您可以使用
\v\w+(\()@=
详情
\v
- 当量词和 capturing/lookaround 括号不需要 backslash-escaping 时启用非常神奇的模式
\w+
- 一个或多个单词字符(字母、数字、下划线)
(\()@=
- 正前瞻 ((...)@=
) 要求其模式(此处为 (
字符)立即匹配到当前位置的右侧。
我注意到 C++ 函数在我的 vim 样式中没有应用任何样式,所以我想添加一个快速正则表达式匹配来查找紧跟 ( , 并将其算作语法。
在我的 .vim 中,我输入:
syn match cppFun "\w+(?=\()"
这似乎适用于 other regex matchers,但 vim 抱怨 \)
不匹配。
但是,检查 :highlight
,我确实看到语法 cppFun 正在设置一些东西。
我认为 vim 正则表达式可能是倒退的,所以我试了一下
syn match cppFun "\w+\(?=(\)"
虽然它不再抱怨不匹配的 paren,但我仍然没有在我的 main.cpp 中获得功能亮点。
为了让语法高亮显示,正则表达式应该是什么样子?
这是我用 \w+(?=\()
:
int main(int argc, char** argv) {
std::puts('Hello World');
return 0;
}
期望匹配 main
和 puts
要匹配后跟 (
的单词而不匹配 (
,请使用 \w\+\ze(
.
\ze
终止正则表达式的匹配部分。 +
需要在前面加上 \
才能让它变得神奇。 (参见 :help magic)。
vim 中的 positive lookahead 也是用 \@=
完成的。不适用于 (?=...)
.
您可以使用
\v\w+(\()@=
详情
\v
- 当量词和 capturing/lookaround 括号不需要 backslash-escaping 时启用非常神奇的模式
\w+
- 一个或多个单词字符(字母、数字、下划线)(\()@=
- 正前瞻 ((...)@=
) 要求其模式(此处为(
字符)立即匹配到当前位置的右侧。