vim正则表达式 - 单词不是以

时间:2014-09-22 18:17:54

标签: regex vim

我试图为打字机功能添加ctrlp-funky的正则表达式但是它正在捕捉if和switch。 如何修改此正则表达式,使其不包含ifswitch的字词或包含{}的函数调用。

\v\s*\w+\s*\(.*\{

它应该能够匹配这些

greet() {
ifExists() {
public static greet(a: any) {

但应排除。 (注意空格和{内的()。

if (x) {
if(x) {
switch (x) {
helloworld({a: null});

2 个答案:

答案 0 :(得分:1)

这应该会更好一点:

\v\s*<(for>|if>|switch>|while>)@!\w+\s*\(.{-}\)\s*\{
  • <>是字边界。它们将匹配单词的左右边缘。
  • @!是一个负面的预测。它将匹配不遵循的内容。
  • {-}是一个懒惰的重复,零次或多次。与*类似,但会尽可能少地匹配。

它将匹配任何与关键字不匹配的函数调用模式。

它并不完美,因为它与嵌套括号不匹配。仅仅在vim中使用正则表达式是不可能的。例如:

foo(lock(foo) { })

答案 1 :(得分:0)

虽然我不知道你使用什么类型的文件,但实际上可以使用 post_extract_hook ,这是一个无证件。 我想你想要做的是类似于下面的java&#39; https://github.com/tacahiroy/ctrlp-funky/blob/master/autoload/ctrlp/funky/ft/java.vim#L22

总是赞赏Pull请求:)