Come abbinare una parola che termina con una lettera maiuscola e una lettera specifica?


9

Ho parole come lblSERINOdnelle frasi. Le parole sono separate da spazi bianchi.

Voglio sostituire il dalla fine di tutte queste parole con u. Quindi, per esempio lblSERINOd, sembrerà lblSERINOu.

Ho provato s/.*\ud /u /gma Vim dice che non riesce a trovare .*\ud.

Qual è il problema qui?

Risposte:


10

Un modo per farlo sarebbe questo:

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

Inizialmente ho pensato che il nuovo motore regex Vim (pubblicizzato come "più veloce, ma limitato") non può capire \uin :substitute, ma questo non è il caso. Ora preferisco pensare che l'OP abbia dimenticato di usare %e abbia semplicemente cercato sulla linea sbagliata; questo spiegherebbe il messaggio di errore, ma ovviamente deve ancora essere confermato come "la" causa.


2
sei sicuro della cosa "re" del motore? Non vedo come questo faccia la differenza.
Christian Brabandt,

No, non ne sono affatto sicuro ... Ho fatto un test rapido che non ha funzionato, poi ho riletto patternnel file della guida, ho visto che il nuovo motore è più limitato di quello precedente, supponendo che sia la causa .. il mio primo test è stato piuttosto / probabilmente imperfetto
VanLaser,

5

Sembra che tu abbia modificato l' 'magic'opzione di Vim dalla sua impostazione predefinita a 'nomagic'. Puoi verificarlo con il comando

:verbose set magic?

Come documentato in : help / magic , 'nomagic'fa sì che .in una regexp venga trattata come un punto letterale anziché il metacarattere che significa "abbina qualsiasi personaggio".

Vorrei altamente consiglia di lasciare questa opzione al suo valore di default. Questa è una delle poche opzioni che davvero non dovrebbero esistere e che può causare sottili problemi nei plugin.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.