Vim: Wie kann ich nach einem Wort suchen, das nicht durch ein anderes Wort folgt?

StackOverflow https://stackoverflow.com/questions/96826

  •  01-07-2019
  •  | 
  •  

Frage

Pretty grundlegende Frage, ich versuche, einen regulären Ausdruck in Vim zu schreiben jede Phrase Übereinstimmen mit "abc " begann direkt gefolgt von irgendetwas anderes als "defg".

Ich habe verwendet "[^defg]" für ein einzelnes Zeichen als d anderen übereinstimmen, e, f oder g.

Mein erster Instinkt war, zu versuchen /abc [^\(defg\)] oder /abc [^\<defg\>] aber weder eines dieser Werke.

War es hilfreich?

Lösung

Hier ist der Suchbegriff.

/abc \(defg\)\@!

Das Konzept für Sie suchen eine negative Vorgriff Behauptung genannt. Versuchen Sie, diese in vim für weitere Informationen:

:help \@!

Andere Tipps

oder vorangestellt, gefolgt von?

Wenn es etwas mit ‚abc‘ beginnen, die nicht (sofort) ist gefolgt von ‚defg‘, die Sie wollen? bmdhacks' Lösung .

Wenn es etwas gibt, beginnend mit ‚abc‘, die nicht (sofort) mit vorangestelltem ‚defg‘, Sie eine negative Lookbehind wollen:

/\%(defg\)\@<!abc /

Dies wird jede Auftreten von ‚abc‘ entsprechen, solange sie nicht Teil von ‚DEFGABC‘ ist. Siehe :help \@<! für weitere Details.

Wenn Sie wollen, so lange ‚abc‘ passen, wie es ist nicht Teil von ‚defg * abc.‘, Dann fügen Sie einfach einen .*:

/\%(defg.*\)\@<!abc /

Matching 'abc' nur auf Strecken, auf denen 'defg' tritt nicht ähnelt:

/\%(defg.*\)\@<!abc \%(.*defg\)\@!/

Obwohl, wenn Sie gerade dies für eine Substitution tun, können Sie dies einfacher machen, indem :v// und :s// Kombination

:%v/defg/s/abc /<whatever>/g

Dies wird ersetzen ‚‘ für ‚abc‘ auf allen Linien, die ‚defg‘ nicht enthalten. Siehe :help :v für mehr.

Hier gehen wir, das ist eine haarige ein:

/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*

(ersetzen XXXXXX mit dem Suchwort). Dies wird für alles suchen, die nicht nicht XXXXXX enthalten. Ich stelle mir vor, wenn Sie getan haben:

/abc \%(\%(.\{-}\)\@<=defg\zs\)*

Das kann funktionieren, wie Sie es wollen. Hoffe, das hilft ein wenig!

/ abc \ [^ d] [^ e] [^ f] [^ g]

Es ist ziemlich für größere Worte umständlich, sondern wirkt wie ein Zauber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top