Warum muss es in vim :-1j
mit der obigen Zeile verbunden werden?
zB :g/^ /-1j
um alle Zeilen zu verbinden, die mit einem Leerzeichen beginnen.
Die Befehle sind leichter zu merken, wenn man versteht, wie sie zustande kommen, und in diesem Fall hatte ich erwartet:g/^ /-1J
-1
Bewegen Sie sich, um zur Zeile darüber zu gelangen und J
sich mit der Zeile darunter zu verbinden.
Antwort1
Sie können keinen normalen Befehl in der Befehlszeile verwendenwie es ist.
In :g/^ /-1j
ist j
die Abkürzung von :join
: Sie gehen eine Zeile nach oben ( -1
, es könnte sein -
) und führen aus :join
.
In bedeutet es für Vim nichts :g/^ /-1J
: J
Sie verwenden einen Befehl im Normalmodus außerhalb seines Kontexts, daher passiert danach im Grunde nichts, -1
außer dass eine eindeutige Fehlermeldung ausgegeben wird.
Vim erwartet dort einen Ex-Befehl, keinen Befehl im Normalmodus.
Ihre Verwirrung kann daher rühren, dass der Doppelpunkt nur einmal benötigt wird und Sie Ex-Befehle daher nicht erkennen. Wenn wir ein paar Doppelpunkte hinzufügen würden, würde der vollständige Befehl für Sie wahrscheinlich mehr Sinn ergeben:
:g/^ /:-1:j
Um Befehle im Normalmodus in der Befehlszeile zu verwenden, geben Sie Folgendes ein :norm
:
:g/^ /-1norm J
Antwort2
Es gibt zwei Arten von Befehlen in vi
. Es gibt Befehle, die direkt aus dem Befehlsmodus an einer beliebigen Stelle in der Datei aufgerufen werden können (ich bin nicht sicher, ob es für diese Art von Befehlen einen bestimmten Namen gibt), und es gibt Befehle, die ex
speziell auf Zeilen (nicht auf Zeichen) angewendet werden und :
für deren Aufruf ein Zeichen erforderlich ist.
Normalerweise ex
können mit dem Befehl nur die Befehle verwendet werden :g
.