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?

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”.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.