Wie kann man ein Wort mit einem Großbuchstaben und einem bestimmten Buchstaben abgleichen?

9

Ich habe Wörter wie lblSERINOdin Sätzen. Wörter werden durch Leerzeichen getrennt.

Ich möchte das dam Ende all dieser Wörter durch ersetzen u. So wird zum Beispiel lblSERINOdaussehen lblSERINOu.

Ich habe es versucht, s/.*\ud /u /gaber Vim sagt, es kann nicht finden .*\ud.

Was ist das Problem hier?

Utku
quelle

Antworten:

10

Ein Weg, dies zu tun, wäre folgender:

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

Ursprünglich ging ich davon aus, dass der neue Vim Regex - Engine (als „schneller, aber begrenzt“ beworbenen) kann nicht verstehen , \uin :substitute, aber dies ist nicht der Fall. Ich denke jetzt eher , dass das OP vergessen hat zu verwenden %und einfach in der falschen Zeile gesucht hat; Dies würde die Fehlermeldung erklären, muss aber natürlich noch als "die" Ursache bestätigt werden.

VanLaser
quelle
2
Bist du dir sicher, was den Motor angeht? Ich sehe nicht, wie das einen Unterschied macht.
Christian Brabandt
Nein, überhaupt nicht sicher ... Ich habe einen Schnelltest durchgeführt, der nicht funktioniert hat, und dann patternin der Hilfedatei noch einmal nachgelesen. Ich habe erwähnt, dass die neue Engine eingeschränkter ist als die alte, vorausgesetzt, das ist die Ursache. Mein erster Test war eher / möglicherweise fehlerhaft
VanLaser
5

Es sieht so aus, als hätten Sie die 'magic'Option von Vim von der Standardoption in geändert 'nomagic'. Sie können dies mit dem Befehl überprüfen

:verbose set magic?

Wie unter : help / magic dokumentiert , 'nomagic'wird der .in einem regulären Ausdruck als wörtlicher Punkt anstelle des Metazeichens behandelt, was "mit einem beliebigen Zeichen übereinstimmen" bedeutet.

Ich würde dringend empfehlen, diese Option auf ihrem Standardwert zu belassen. Dies ist eine der wenigen Optionen, die eigentlich nicht existieren sollten und subtile Probleme in Plugins verursachen können.

Jamessan
quelle