Como combinar uma palavra que termina com letra maiúscula e uma letra específica?

9

Eu tenho palavras como lblSERINOdnas frases. As palavras são separadas por espaço em branco.

Quero substituir o dfinal de todas essas palavras por u. Assim, por exemplo, lblSERINOdserá semelhante lblSERINOu.

Eu tentei, s/.*\ud /u /gmas Vim diz que não pode encontrar .*\ud.

Qual é o problema aqui?

Utku
fonte

Respostas:

10

Uma maneira de fazer isso seria o seguinte:

:%s/\u\zsd\>/u/g

Inicialmente eu assumi que o novo motor regex Vim (sendo anunciado como "mais rápido, mas limitado") não podem entender \uem :substitute, mas este não é o caso. I em vez acho que agora que o OP esqueceu de usar %e simplesmente procurou na linha errada; isso explicaria a mensagem de erro, mas é claro que ainda precisa ser confirmado como "a" causa.

VanLaser
fonte
2
você tem certeza da coisa 're' engine? Não vejo como isso faz diferença.
Christian Brabandt
Não, não tenho certeza ... Fiz um teste rápido que não funcionou, depois reli patternno arquivo de ajuda, vi mencionado que o novo mecanismo é mais limitado que o antigo, assumindo que é a causa .. meu primeiro teste foi bastante / possivelmente falho #
VanLaser
5

Parece que você pode ter alterado a 'magic'opção do Vim do padrão para 'nomagic'. Você pode verificar isso com o comando

:verbose set magic?

Conforme documentado em : help / magic , 'nomagic'faz com que o .em um regexp seja tratado como um ponto literal em vez do metacaractere que significa "corresponder a qualquer caractere".

Eu altamente recomendo deixar esta opção em seu valor padrão. Esta é uma das poucas opções que realmente não deveriam existir e podem causar problemas sutis nos plugins.

jamessan
fonte