definir caracteres para maiúsculas entre parênteses

0

vamos supor que no vim eu tenho as seguintes linhas:

all what (strong) people have to do is pushing (heavy) weights

over (and over) again in order to gain muscles

e eu preciso converter as palavras dentro de parênteses para maiúsculas, qual é a maneira mais conveniente de fazer isso? Como eu digo ao vim que precisa selecionar tudo para o primeiro (!) Parêntese de fechamento? Até agora eu vim com

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

infelizmente isso vai colocar tudo em maiúsculas entre 'strong' e 'pesado', o que não é o que eu quero. Alguma chance de dizer ao vim que ele deve selecionar os caracteres apenas para o próximo colchete de fechamento? (desculpe pelo bobo exemplo, não conseguia pensar em algo mais sofisticado ... ou pelo menos vim relacionado ... huh)

    
por emzap79 05.06.2014 / 22:27

3 respostas

1

Experimente este comando em vim :

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

Usar .* é 'ganancioso': ele corresponderá a todos os caracteres, incluindo o primeiro ) na primeira linha, e continuará até o último ) , capitalizando assim tudo entre os dois.

O uso de [^)]* diz ao mecanismo de expressão regular que procure quaisquer caracteres que não sejam não a ) em () e os coloque em maiúscula. Basicamente, isso força a partida a ser 'preguiçosa' ao invés de 'gananciosa'.

Veja as seções "Preguiça versus ganância" e "Uma alternativa à preguiça" no Tutorial do Regex .

    
por 05.06.2014 / 22:48
2

Esta substituição faz o que você quer:

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

Como o savanto disse, * é ganancioso: corresponde a 0 ou mais, o máximo possível, do átomo anterior. Aqui eu uso apenas o oposto de * : {-} para corresponder a 0 ou mais, o mínimo possível, do átomo anterior.

    
por 05.06.2014 / 22:56
0

Lembre-se de que, se você precisar inserir apenas os primeiros parênteses em letras maiúsculas:

Coloque o cursor entre parênteses - em qualquer lugar - e pressione gUi(

gU " change to uppercase and wait for a motion
i( " it s for "inside parenthesis"
    
por 07.06.2014 / 04:50

Tags