将括号内的字符设置为大写

将括号内的字符设置为大写

假设在 vim 中有以下几行:

(强壮的)人所要做的就是推(重的)重物

一遍又一遍地锻炼以增加肌肉

我需要将括号内的单词转换为大写,最方便的方法是什么?我如何告诉 vim 它需要选择第一个 (!) 右括号内的所有内容?到目前为止,我想出了

:%s/\s(.*)\s/\U&/g

不幸的是,这会将“strong”和“heavy”之间的所有内容都大写,这不是我想要的。有没有机会告诉 vim 它应该只选择下一个右括号内的字符?(抱歉这个例子太傻了,想不出更复杂的东西了……或者至少是与 vim 相关的……呵呵)

答案1

尝试此命令vim

:%s/\s([^)]*)\s/\U&/g

使用.*是“贪婪的”:它将匹配所有字符,包括)第一行的第一个字符,并一直到最后一个字符),从而将中间的所有内容大写。

使用[^)]*告诉正则表达式引擎查找任何字符不是)在 内添加a (),并将其大写。基本上,它强制匹配为“懒惰”而不是“贪婪”。

请参阅正则表达式教程

答案2

这个替换可以实现你想要的效果:

:%s/(.\{-})/\U&/g

就像 savanto 说的,*是贪婪的:它匹配 0 个或更多,越多越好,*前一个原子。这里我只使用:的反义词{-}来匹配 0 个或更多,尽可能少,前一个原子。

答案3

请记住,如果您只需要将第一个括号大写:

将光标放在括号内(任意位置),然后按gUi(

gU " change to uppercase and wait for a motion
i( " it s for "inside parenthesis"

相关内容