gvim:将不以大写字母开头的小写单词替换为大写字母

时间:2015-05-20 08:47:46

标签: regex vim

我正在尝试将以[开头的小写字词替换为大写字母,我认为我非常接近。

我尝试过这种做法::%s/\(\[\)\@![a-z]\+\>/\U&/g 这不太对劲,而且我已经盯着它看了太长时间 - 因此这会给朋友打电话。

我认为它匹配[a-z]\+无论如何......

1 个答案:

答案 0 :(得分:1)

\@!当前位置的零宽度匹配,但在当前位置之前需要匹配\[\@<![a-z](您不需要分组)所说的不是左括号和小写字符;第二个分支意味着第一个分支。而是使用\@<!说明小写字符,而不是开头括号。 (这也称为负面观察。)

第二个问题是,现在它会匹配单词的第二个字符,因此会将[fix变为[fIX。一种解决方案是使用\<声明关键字的开头:

:%s/\[\@<!\<[a-z]\+\>/\U&/g

另一种方法是禁止在单词之前使用小写字符(除了左括号):

:%s/[[a-z]\@<!\<[a-z]\+\>/\U&/g