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 (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 Ich hatte gehofft, dass so etwas funktionieren würde, aber es nicht: 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?
token foo foo countertoken foo foo token foo ziel foo foo countertoken foo \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!)
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.
Erläuterung:
.*\zs
- Übereinstimmung mit dem letzten Vorkommen. \(token\)
- Übereinstimmungszeichenfolge "Token" .\{-}
passt nicht-gierig \(target\)
- Entspricht der Zeichenfolge "target" Tags und Links regex vim regex-negation