vi Befehl zum Hinzufügen einer Leerzeile?

24

In vi kann ich mit ooder Oeine Leerzeile einfügen und in den Einfügemodus wechseln. Aber was ist, wenn ich im Befehlsmodus bleiben möchte, gibt es einen Befehl dafür?

Beim Googeln sehe ich Vorschläge, wie ich meinem vimrc etwas hinzufügen kann, aber es scheint, als ob es einen einfacheren Weg geben sollte (der wird immer funktionieren.)

Eric Wilson
quelle

Antworten:

25

Gemäß den VIM-FAQ können Sie den :putBefehl verwenden:

12.15. Wie füge ich eine Leerzeile über / unter der aktuellen Zeile ein, ohne in den Einfügemodus zu wechseln?

Mit dem Befehl ": put" ex können Sie Leerzeilen einfügen. Versuchen Sie es zum Beispiel

: put = ''
: put! = ''

Weitere Informationen finden Sie unter

: help: put

aber dann ist es wirklich einfacher hinzuzufügen:

map <Enter> o<ESC>
map <S-Enter> O<ESC>

zu deinem .vimrc. So können Sie drücken Enteroder Shift-Enterin normal modeeine leere Zeile unterhalb oder oberhalb der aktuellen Zeile einzufügen. Natürlich ersetzen <Enter>und <S-Enter>mit Ihren bevorzugten Schlüsseln.

Herr Shunz
quelle
15

Ein Teil der Anziehungskraft der Verwendung VIbesteht darin, einen Befehlsmodus zum Bearbeiten des Texts und einen Bearbeitungsmodus zum Hinzufügen von Text zu haben. Dies verhindert, dass Sie STRG drücken müssen - was auch immer, um etwas zu erreichen.

Die anderen Vorschläge mögen funktionieren - ich habe sie nicht ausprobiert - aber sie scheinen einige Zeichen zu erfordern oder Ihre VIUmgebung zu stark zu manipulieren .

Versuchen Sie, für jede neue Zeile, die Sie hinzufügen möchten, o[ESC]gefolgt von einem ., oder 5.fügen Sie 5 Zeilen hinzu. Dies ist viel schneller und funktioniert bei jeder Installation von VI.

Ruhmkröte
quelle
1
Sie können .zum Wiederholen verwenden, aber Sie können auch <number>o<esc>5o<esc>
Folgendes
1
Das würde sicherlich funktionieren. Ich mag es jedoch zu sehen, wie sich der Befehl tatsächlich auf das Dokument auswirkt, bevor ich es mehrmals ausführen lasse. Ich kann Ihnen nicht sagen, wie oft ich o'deinen neuen Absatz in VI angehängt habe , nur um herauszufinden, dass der hübsche Absatz tatsächlich aus sechs sorgfältig gebrochenen / wortumbrochenen Zeilen bestand.
Glorytoad
2

In vim gibt es auch :normal ooder :normal O.

Steven Pritchard
quelle
1

Dies fügt nach der aktuellen Zeile eine Leerzeile ein:

:put _ 

Alternativ können Sie am Anfang eine Linie angeben.

Justerman
quelle
0

In Vim 7.3: <number>o<esc>Erstellt nur eine leere Zeile.

Hakim
quelle
Nun, durch Hinzufügen <esc>wechseln Sie wieder vom Einfügemodus in den Befehlsmodus. Ich denke, er sucht nach einer Antwort, die überhaupt nicht in den Einfügemodus wechselt.
Bernhard
Oh! Ich habe vergessen, den Einfügemodus mit <esc> zu beenden. In diesem Fall wird es funktionieren. Es wird sogar die bearbeitete Zeile in allen folgenden Zeilen dupliziert.
Hakim
0

Verwenden Sie Folgendes, um im Befehlsmodus nach der aktuellen Zeile eine Leerzeile einzufügen:

: r !echo

Dies ist der rBefehl " ead in a file", aber anstatt ihm einen Dateinamen zu geben, weisen wir ihn an, die Ausgabe eines Shell-Befehls ( !) zu lesen . Dieser Shell-Befehl gibt echoeinfach eine leere Zeile aus. Nach dem Einfügen der Leerzeile bleiben Sie im Befehlsmodus.

Jeff Schaller
quelle
-2

Ich bin überrascht, dass niemand anderes dies erwähnte:

Verwenden Sie im Befehlszeilenmodus 'r' gefolgt von 'Eingabetaste'.

Verspätung auf der Party um 7 Jahre :)

Akhilesh Siddhanti
quelle
1
Mit der Ausnahme, dass Sie dadurch den Befehlsmodus verlassen und die aktuelle Zeile durch eine leere Zeile ersetzen.
Jeff Schaller
Ich bin nicht sicher, was @ Jeff sagt. Meine Beobachtungen zu diesem Befehl sind: (1) Es funktioniert nicht, wenn Sie sich gerade in einer leeren Zeile befinden. (2) Andernfalls wird das Zeichen unter dem Cursor gelöscht.
Scott
Ich habe falsch geschrieben. rin der Tat ersetzt das aktuelle Zeichen. Führt Sie dennoch in den Befehlsmodus.
Jeff Schaller
Einverstanden. Dies ist eine Einschränkung: Es muss in einer nicht leeren Zeile + in einem Leerzeichen vor der Zeile erfolgen. Daran habe ich nicht gedacht. Vielen Dank.
Akhilesh Siddhanti