it-swarm.com.de

Wie füge ich eine neue Zeile mit vim ein?

Ich muss oft in vim einige Sachen in eine neue Zeile einfügen. Was ich normalerweise mache ist:

o<Esc>p

Die fügt eine neue Zeile ein und versetzt mich in den Einfügemodus, beendet dann den Einfügemodus und fügt schließlich ein.

Drei Tastenanschläge. Nicht sehr effizient Irgendwelche besseren Ideen?

108
static_rtti

Kurz nach :help p heißt es:

:[line]pu[t] [x]    Put the text [from register x] after [line] (default
                    current line).  This always works |linewise|, thus
                    this command can be used to put a yanked block as
                    new lines.

:[line]pu[t]! [x]   Put the text [from register x] before [line]
                    (default current line).

Leider ist es nicht kürzer als Ihre aktuelle Lösung, es sei denn, Sie kombinieren diese mit einer Tastaturbelegung, wie in einer anderen Antwort vorgeschlagen Sie können es beispielsweise einem beliebigen Schlüssel zuordnen (sogar p):

:nmap p :pu<CR>
54
Bombe

Optionen:

1) Verwenden Sie yy, um die gesamte Zeile (einschließlich des Zeilenendezeichens) zu rucken. p fügt dann die Zeile in eine neue Zeile nach der aktuellen ein und P (Shift-P) wird über der aktuellen Zeile eingefügt.

2) Mache ein Mapping: dann sind es nur ein oder zwei Schlüssel:

:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p

3) Die Funktionsversion des Mappings (eigentlich unnötig, aber nur der Vollständigkeit halber):

:nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap
45
DrAl

Sie können einen Puffer im Einfügemodus einfügen, indem Sie <C-R> gefolgt vom Namen des einzufügenden Puffers verwenden. Der Standardpuffer ist "

o<C-R>"

Ich habe festgestellt, dass ich <C-R>" sehr oft verwende und dies an <C-F> in meinem vimrc gebunden habe:

inoremap <C-F> <C-R>"
21
soulmerge

Dies verwendet immer noch drei Tastenanschläge, aber ich finde es einfacher als Esc:

o<Alt-p>

Da Sie sich nach dem Drücken von o im Einfügemodus befinden, können Sie mit dem Alt-Modifikator einen Befehl so verwenden, als wären Sie nicht.

16
Nick

Persönlich habe ich Enter (CR) wie folgt definiert:

nmap <CR> o<Esc>k

... basierend auf this Vim Wikia-Artikel.

Auf diese Weise kann ich Zeilenumbrüche direkt aus dem Normalmodus erstellen und dies mit dem Wunsch kombinieren, eine neue Zeile einzufügen:

<CR>jp

Sie könnten k auch in der oben genannten nmap überspringen, je nachdem, welche Funktionalität Sie von Enter bevorzugen, es wäre also nur <CR>p.

Ich habe auch jj auf Esc abgebildet, was in diesem Fall auch hilfreich wäre. Esc ist viel zu weit von der Heimatreihe entfernt, um die Wichtigkeit zu bestimmen, die es in vim hat.

Nicht kürzer als die anderen Lösungen, aber ich denke, es fühlt sich weniger klobig an als einige von ihnen, und es hat auch andere Zwecke.

7
miyalys

Wenn Sie eine ganze Zeile kopieren und dann eine ganze Zeile einfügen, verwenden Sie Y, um die Zeile bzw. die Zeilen (einschließlich Zeilenumbruch) zu reißen, und p, um sie einzufügen. Sie können auch V verwenden, bei dem es sich um den visuellen line -Modus handelt, im Gegensatz zum einfachen v-Modus für den visuellen Modus.

4
Peter

]p fügt in die Zeile ein nten

[p fügt in die Zeile ein oben

vorteile:

  • funktioniert mit allen Textzeilen (Wort, Zeile, Zeichen usw.)
  • rückt den eingefügten Text so ein, dass er mit dem Einzug des umgebenden Texts übereinstimmt
  • 2 Tastenanschläge statt 3 und viel "einfachere" Anschläge
  • hält meinen .vimrc so gering wie möglich und verwendet kein Mapping
  • schnell
3
crogers

Ich habe Mapping inoremap jj <ESC>. So ist es einfach, eine neue Zeile mit ojj und Ojj und dann mit p einzufügen.

so ojjp Einfügen einer neuen Zeile. es hat einen weiteren Strich als o<esc>p, aber ojjp ist für mich einfach.

2
Natwar Singh

Ich habe eine elegante Lösung dafür gefunden. Wenn Sie den Ruck in die Zwischenablage Ihres Betriebssystems eintragen (was sowieso großartig ist), klicken Sie auf

set clipboard+=unnamed

als du kannst o<Ctl-v>

Dies bedeutet nicht nur weniger Striche, sondern verbessert auch o<Esc>p und :pu, da der Einzug erhalten bleibt: Beide anderen Optionen beginnen mit dem Zeichen Null in der neuen Zeile.

Der Nachteil ist, dass dies vom Betriebssystem abhängig sein kann oder nicht. Ich weiß nur, dass es mit der neuesten Version von OS X funktioniert, aber die Zwischenablage ist nur eine von vielen Möglichkeiten, um in der OS-Zwischenablage einen Ruck zu bekommen.

1
enfascination

Wenn Sie auch im Einfügemodus beenden möchten, können Sie im Einfügemodus mit CTRL-R " einfügen. https://stackoverflow.com/a/2861909/461834

Immer noch drei Tastenanschläge, aber kein Escape-Befehl, und Sie speichern einen Tastenanschlag, wenn Sie trotzdem mit dem Einfügen enden möchten.

1
jtpereyda

Diese Lösung scheint nur zu gelten, wenn der Block des kopierten Textes in einer neuen Zeile beginnt (anstatt ein Textausschnitt irgendwo innerhalb einer Zeile zu erfassen). Sie können Ihre Kopie jedoch immer mit dem letzten Zeichen beginnen, das Sie erfassen möchten, und dann navigieren bis zum letzten Zeichen am Zeilenende vor dem Beginn des gewünschten Kopierblocks. Wenn Sie ihn einfügen möchten, positionieren Sie den Cursor am Ende der Zeile, unter der der Text eingefügt werden soll, und drücken Sie p. Wenn ich die Erklärung nicht vermasselt habe, sollte dies die gewünschte Wirkung haben.

0
unbrokenrabbit

Ich verwende das folgende Mapping in meiner Neovim-Konfiguration:

nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``

Eine kleine Erklärung:

  • m`: Setzt eine Markierung an der aktuellen Cursorposition.
  • o<Esc>p: erstelle eine neue Zeile darunter und füge den Text in diese Zeile ein
  • O<Esc>P: erstelle eine neue Zeile darüber und füge den Text in diese Zeile ein
  • ``: Positionieren Sie den Cursor an der ursprünglichen Position

Weitere Informationen zu Marken in Vim finden Sie unter :h mark.

0
jdhao