vim-Muster, das zwei Token ohne ein anderes gegebenes Token dazwischen vergleicht

8

Verwenden von vim 7.2 für diesen Text:

  

foo foo token foo foo countertoken foo foo token foo target foo foo countertoken foo

Ich möchte jede Zeichenfolge, die mit 'token' beginnt und mit 'target' endet, abgleichen, die nicht

Also, im obigen Beispiel möchte ich das anpassen:

  

foo foo Zeichen foo foo countertoken foo foo Zeichen foo Ziel foo foo countertoken foo

aber nicht das:

  

foo foo token foo foo countertoken foo foo token foo ziel foo foo countertoken foo

(Der Grund dafür ist, dass ich in der Praxis lange Dateien suche und mich für das letzte "Token" vor dem "Ziel" interessiere. Die Tokens sind ein bisschen wie XML-Tags, aber nicht XML XML-Tools stellen keine Hilfe dar. Ich weiß, dass ich \zs verwenden könnte, so dass der Cursor auf "Ziel" landet und dann rückwärts nach "Token" sucht, aber sicherlich gibt es eine Ein-Schritt-Lösung!)

Ich hatte gehofft, dass so etwas funktionieren würde, aber es nicht:

%Vor%

Es gibt viele solcher Vorkommnisse, an denen ich interessiert bin, und natürlich sind die Dateien, die ich suche, nicht wirklich so häufig wie 'foo'.

Gibt es dafür einen einzeiligen Regex in vim?

    
Michael Scheper 14.12.2012, 02:10
quelle

1 Antwort

1

Wenn Sie nur an der letzten token interessiert sind, müssen Sie sich nicht um die countertoken kümmern. Eine Möglichkeit besteht darin, nach dem letzten Vorkommen von token zu suchen und alles bis zum nächsten target abzugleichen.

%Vor%

Erläuterung:

  • .*\zs - Übereinstimmung mit dem letzten Vorkommen.
  • \(token\) - Übereinstimmungszeichenfolge "Token"
  • .\{-} passt nicht-gierig
  • \(target\) - Entspricht der Zeichenfolge "target"
jens-na 14.12.2012 09:36
quelle

Tags und Links