Ich möchte nur in den DiffText
Regionen einer Datei suchen können, die ich bearbeite.
Verwandte Frage: /programming/2683521/vim-search-in-cc-code-lines
Die akzeptierte Antwort scheint hier zu arbeiten groß für etwa Comment
oder Type
Syntaxgruppen, aber jede der Diff - Gruppen nicht funktionieren. Ich vermute, dass es etwas damit zu tun hat, dass die Diff-Gruppen in anderen Gruppen verschachtelt sind.
Mein spezielles Szenario ist, dass ich eine Reihe von Tabulatoren und nachgestellten Leerzeichen aus einer Reihe von Dateien entfernt habe. Ich habe die Dateien mit den Originalen unterschieden und möchte sicherstellen, dass nichts außer Tabulatoren und nachgestellten Leerzeichen unterschiedlich sind.
PS Ich möchte nicht alle Registerkarten global ersetzen, da mein Vorgänger inkonsistente Einrückungen verwendet hat und ich alle manuell überprüfen muss.
quelle
:set diffopt+=iwhite
oder habe ich falsch verstanden?Antworten:
Nicht nativ (auch ich habe einen Patch geschrieben, mit dem der Funktion search () ein Sprungausdruck hinzugefügt werden kann, der jedoch noch nicht enthalten ist).
Sie können dies jedoch umgehen, indem Sie eine eigene Funktion schreiben, die überprüft, ob sich die Übereinstimmung in einem enthaltenen Diff-Bereich befindet. So etwas (sehr grundlegender Ansatz):
Fehlerprüfung und Behandlung weiterer Randfälle (Abbruch, nachdem die Suche abgeschlossen wurde, z. B.), die dem Benutzer als Übung überlassen wurden.
quelle
if... != 0
dass sie von der Suche abbricht, wenn sie auf einem Diff landet. Das schien zumindest für mich zu funktionieren. (Ich weiß, dass Ihre Funktion nicht vollständig sein sollte, aber ich bin mir ziemlich sicher, dass dies rückwärts ist.)Nun, die einfache Möglichkeit, die Unterschiede zu durchsuchen (alle unterschiedlichen Zeilen, nicht nur DiffText, sorry), besteht darin,
diff
die beiden Dateien auszuführen , die Ausgabe in einen Puffer zu legen und dort zu suchen. Angenommen, Sie sehen filea und fileb in vimdiff:Zeilennummern werden in der Ausgabe in Zeilen wie angezeigt
So können Sie leicht zur Zeile (9) in der Originaldatei springen:
Dadurch wird rückwärts nach einer Zeilennummer gesucht, die Zeilennummer in @ "gezogen, der temporäre Suchpuffer geschlossen und zur Zeilennummer gesprungen. Sie möchten diese wahrscheinlich massieren, um Ihr Fensterlayout usw. zu berücksichtigen. und vielleicht einem Schlüssel zuordnen.
Sie können auch Kontextzeilen in das Diff aufnehmen, um das Lesen zu erleichtern. Stellen Sie jedoch sicher, dass Ihre Suchanfragen in Zeilen mit Änderungen angezeigt werden, dh in Zeilen, die mit einem nicht leeren Zeichen beginnen:
quelle
@@ -292,2 +283,7 @@
. Davon abgesehen kann ich nicht genau herausfinden, wofür das0/
in Ihrem Suchmuster ist. ZusätzlichyW
wird das WORT gezogen, was bedeutet292,2
. Wenn Sie ausführen, gelangen:@"
Sie zu Zeile 2 anstelle von 292. Ich denke, ich würde mir so etwas einfallen lassen :?@@.*+?e+1<CR>yw:q!<CR>:@"<CR>
. Sie können die erste ändern+
,-
je nachdem, welche Datei Sie anzeigen möchten. Gedanken?<CR>
um das Suchmuster zu beenden, und dasyW
sollte so sein,yw
wie Sie es gesagt haben!+
oder-
am Anfang der Zeile und der Dateinamen in der Kopfzeile herausfinden .