Warum lautet in vim :-1j zum Verbinden mit der obigen Zeile?

Warum lautet in vim :-1j zum Verbinden mit der obigen Zeile?

Warum muss es in vim :-1jmit der obigen Zeile verbunden werden?

zB :g/^ /-1jum 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

-1Bewegen Sie sich, um zur Zeile darüber zu gelangen und Jsich mit der Zeile darunter zu verbinden.

Antwort1

Sie können keinen normalen Befehl in der Befehlszeile verwendenwie es ist.

In :g/^ /-1jist jdie 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: JSie verwenden einen Befehl im Normalmodus außerhalb seines Kontexts, daher passiert danach im Grunde nichts, -1auß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 exspeziell auf Zeilen (nicht auf Zeichen) angewendet werden und :für deren Aufruf ein Zeichen erforderlich ist.

Normalerweise exkönnen mit dem Befehl nur die Befehle verwendet werden :g.

verwandte Informationen