Jak dopasować słowo kończące się wielką literą i określoną literą?

9

Mam słowa jak lblSERINOdw zdaniach. Słowa są oddzielone spacją.

Chcę zamienić dna końcu wszystkich takich słów na u. Tak na przykład lblSERINOdbędzie wyglądać lblSERINOu.

Próbowałem, s/.*\ud /u /gale Vim mówi, że nie można go znaleźć .*\ud.

Jaki jest tutaj problem?

Utku
źródło

Odpowiedzi:

10

Jednym ze sposobów na zrobienie tego byłoby:

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

Początkowo zakłada się, że nowy silnik regex Vim (reklamowane jako „szybciej, ale ograniczone”) nie może zrozumieć, \uw :substitute, ale to nie jest przypadek. Ja raczej myślę, że teraz PO zapomniał użyć %i po prostu szukał po niewłaściwej linii; wyjaśniłoby to komunikat o błędzie, ale oczywiście nadal musi zostać potwierdzone jako „przyczyna”.

VanLaser
źródło
2
czy jesteś pewien co do silnika „re”? Nie rozumiem, jak to robi różnicę.
Christian Brabandt
Nie, wcale nie jestem pewien ... Zrobiłem szybki test, który nie zadziałał, a następnie ponownie przeczytałem patternw pliku pomocy, zobaczyłem, że nowy silnik jest bardziej ograniczony niż stary, zakładając, że to jest przyczyną ... , mój pierwszy test był raczej / prawdopodobnie wadliwy
VanLaser
5

Wygląda na to, że mogłeś zmienić 'magic'opcję Vima z domyślnej na 'nomagic'. Możesz to sprawdzić za pomocą polecenia

:verbose set magic?

Jak udokumentowano w : help / magic , 'nomagic'powoduje , że .wyrażenie regularne jest traktowane jako dosłowna kropka zamiast metaznaku, co oznacza „dopasuj dowolny znak”.

Chciałbym bardzo polecić pozostawiając tę opcję na wartość domyślną. Jest to jedna z niewielu opcji, które naprawdę nie powinny istnieć i mogą powodować subtelne problemy we wtyczkach.

jamessan
źródło