在这个简单的代码中:
char **s = NULL;
char **s1 = NULL;
我想用“* s”替换“** s”,
结果应该是:
char *s = NULL;
char **s1 = NULL;
但如果我尝试:
%s/\<\*\*s\>/\*s/g
替换失败。 如果试试这个:
%s/\*\*s/\*s/g
结果是:
char *s = NULL;
char *s1 = NULL;
替换成功,但也替换了“** s1”
为什么第一种方法失败?
答案 0 :(得分:2)
在vim正则表达式中,\<
表示单词边界。空格和星号之间没有单词边界 - 两者都不是单词的一部分 - 所以\<\*
不匹配。你需要这个:
%s/\*\*s\>/\*s/g
解决了这个问题,同时仍然保留s
之后的字边界(以便不匹配*s1
)。 (\<
和\>
经常成对使用以匹配整个单词,但它们不一定是。可以使用其中任何一个。)