Es gibt viele Male in meinem täglichen Arbeitsleben, in denen ich eine bestimmte Funktion ausführen muss, z. B. das Hervorheben oder Suchen einer Variablen, aber ich habe es nie geschafft, den Umfang der Änderungen / Suche einzuschränken.
Gibt es in vim eine Möglichkeit, selektiv zu sagen, alle Verweise auf $color
diese Sätze von Klammern oder diese Falte usw. zu finden? Wenn möglich, wäre dies ideal, wenn dies relativ allgemein gehalten ist, damit es auf das Bearbeiten / Ersetzen von Text angewendet werden kann.
Als Beispiel:
$color = "#fff";
function PickColor () {
$color = "#bbb";
$newColors = ["#000", "#fbf", $color];
foreach ($newColors as $c) {
if ($c == "#fff") {
break;
}
}
}
$differentColor = $color;
Dieser Code ist jedoch ein relativ schlechtes Beispiel, wenn ich alle Instanzen von $ color ersetzen müsste, wie würde man dies im Kontext der Funktion PickColor tun. Als weiteres Beispiel: Verwenden von #
und *
Sie können zur nächsten Instanz dieses Textobjekts wechseln. Wie würden Sie den Suchbereich auf diese Funktion beschränken (im Grunde genommen die Suche umbrechen), im Gegensatz zur gesamten Datei, die Tausende von Zeilen umfassen und verlieren könnte? Ihr Platz oder falsches Ersetzen von etwas in einer anderen Funktion, die Sie nicht haben sollten?
quelle
Wenn Sie die Plugin-Route bevorzugen , gibt es NrrwRgn .
Sie wählen visuell einen Block aus und führen dann den
:NR
Befehl aus, der einen neuen Puffer (in einer Teilung) mit dem ausgewählten Text öffnet. Sie können Änderungen an diesem Puffer vornehmen. Wenn Sie ihn speichern, wird er auch wieder in der Originaldatei gespeichert.Meiner Meinung nach löst dieses Plugin das Problem sehr gut, sodass Sie sich auf die Operationen konzentrieren können, die Sie ausführen möchten, ohne zu überlegen, wie Sie sie auf einen bestimmten Bereich anwenden sollen.
quelle
Sie wählen den Block aus, an dem Sie im visuellen Linienmodus interessiert sind (Umschalt + v), und geben dann
:
Ihren Befehl ein, der nun auf den Block angewendet wird.Wenn Sie also in der Auswahl ersetzen möchten, können Sie ausführen
:s/string/replacement_string
quelle
VaB:s/\$color/replaced/g
Verwenden Sie das Textobjekt '}' für Klammern und wählen Sie innerhalb der Klammern mit 'i}' aus.
auf der Linie mit der öffnenden geschweiften Klammer der Funktion:
Gehen Sie zuerst zum Ende der Zeile (die sich auf oder innerhalb der öffnenden Klammer befindet), um dann zur visuellen Auswahl zu gelangen, und wählen Sie dann mit dem Textobjekt der Klammern aus. 'i}' befindet sich in geschweiften Klammern 'a}' befindet sich in geschweiften Klammern.
Für Sprachen ohne geschweifte Klammern schlägt Vim Text Object: The Definitive Guide einige Plugins vor:
ai
Enthält die aktuelle Einrückungsstufe und die obige Zeile;ii
Enthält die aktuelle Einrückungsstufe ohne die obige Zeile.ar
undir
basierend auf dem Vorhandensein desend
Schlüsselworts.quelle