我正在尝试将以[
开头的小写字词不替换为大写字母,我认为我非常接近。
我尝试过这种做法::%s/\(\[\)\@![a-z]\+\>/\U&/g
这不太对劲,而且我已经盯着它看了太长时间 - 因此这会给朋友打电话。
我认为它匹配[a-z]\+
无论如何......
答案 0 :(得分:1)
\@!
是当前位置的零宽度匹配,但在当前位置之前需要匹配。 \[\@<![a-z]
(您不需要分组)所说的不是左括号和小写字符;第二个分支意味着第一个分支。而是使用\@<!
说明小写字符,而不是开头括号。 (这也称为负面观察。)
第二个问题是,现在它会匹配单词的第二个字符,因此会将[fix
变为[fIX
。一种解决方案是使用\<
声明关键字的开头:
:%s/\[\@<!\<[a-z]\+\>/\U&/g
另一种方法是禁止在单词之前使用小写字符(除了左括号):
:%s/[[a-z]\@<!\<[a-z]\+\>/\U&/g