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.)

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.


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.


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


1

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

:put _ 

Alternativ können Sie am Anfang eine Linie angeben.


0

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


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.


-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 :)


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.