VIM sieht während der Eingabe Übereinstimmungen mit regulären Ausdrücken

8

Wenn ich /regextippe, springt der Cursor vorübergehend zur ersten Übereinstimmung und alle Übereinstimmungen werden hervorgehoben. Dies wird während der Eingabe aktualisiert. Ist es möglich, dieses Verhalten zu bekommen, wenn ich mich auf eine Substitution vorbereite? Wenn ich zum Beispiel an einem komplizierten regulären Ausdruck arbeite :%s/\<regex\>/, möchte ich wissen, was passt, bevor ich den Abzug drücke und alles ändere. Wie geht das?

John Berryman
quelle
Es wäre schön, wenn es so funktionieren würde, wie es bei der Suche funktioniert: Hervorheben, was aktuell übereinstimmt. Haben Sie den besten Weg gefunden, dies zu tun?
Anton Daneyko

Antworten:

12

Geben Sie Ihre Suche zunächst mit / (oder ? ) Ein, damit Sie Ihren regulären Ausdruck optimieren können (da Sie incsearch verwenden).

Sobald Sie alles schön verstanden haben, können Sie das vorherige Suchmuster (das gerade verwendete) im Ersatzbefehl verwenden, indem Sie zwei Trennzeichen für das Suchelement verwenden:

/elephant                       " find the next elephant
:%s//rhino/gc                   " make then all rhinos!

Natürlich können Sie wie gewohnt Auswahlen und Bereiche verwenden.

:1,15s,,cougar,g
:'<,'>s::tiger:
lornix
quelle
+1 für das Unterrichten übers//
Steven Lu
2

Eine Möglichkeit besteht darin, dass Sie ein Bestätigungsflag haben können c.

:%s;regex;replacement;gc

:h s_flags::

[c] Confirm each substitution.  Vim highlights the matching string.  You can type:              
        'y'     to substitute this match
        'l'     to substitute this match and then quit ("last")
        'n'     to skip this match
        <Esc>   to quit substituting
        'a'     to substitute this and all remaining matches
        'q'     to quit substituting

Sie können auch den grepBefehl versuchen , um die gefilterte Ausgabe und die hervorgehobene Originaldatei anzuzeigen.

:g/re/p oder :g/re/

Prinz John Wesley
quelle
Ich mag es, aber es erfordert immer noch, dass ich den regulären Ausdruck vervollständige, bevor ich sehe, was passiert, wenn etwas übereinstimmt.
John Berryman
0

Der kurze Weg, um zu sehen, wie Ihr regulärer Ausdruck übereinstimmt, besteht darin, eine Suche mit /dem gewünschten regulären Ausdruck durchzuführen . Es springt zum ersten Spiel und markiert es, während Sie es eingeben. Probieren Sie es aus - vimwird Sie nicht enttäuschen.


quelle
Stimmt, obwohl ich das in der Frage angegeben habe. Ich wünschte, es würde aktualisiert, wenn ich bereit bin, es zu ersetzen. Bei Ihrer Lösung muss ich den regulären Ausdruck ausprobieren und ihn dann kopieren (wie?) Und dann als Ersatz verwenden. Das ist nicht gut genug.
John Berryman