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?

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.