Wie dupliziere ich eine ganze Zeile in Vim auf ähnliche Weise wie Ctrl+D in IntelliJ IDEA/Resharper oder Ctrl+Alt+↑/↓ in Eclipse?
yy oder Y um die Zeile zu kopieren
oder
dd die Linie löschen (ausschneiden)
dann
p um den kopierten oder gelöschten Text einzufügen nach die aktuelle Zeile
oder
P um den kopierten oder gelöschten Text einzufügen vor die aktuelle Zeile
Normalmodus: Siehe andere Antworten.
Der Ex Weg:
:t.
wird die Zeile duplizieren,:t 7
kopiert es nach Zeile 7,:,+t0
kopiert die aktuelle und nächste Zeile am Anfang der Datei (,+
ist ein Synonym für den Bereich .,.+1
).:1,t$
kopiert Zeilen vom Anfang bis zur Cursorposition bis zum Ende (1,
ist ein Synonym für den Bereich 1,.
).Wenn Sie verschieben müssen, anstatt zu kopieren, verwenden Sie :m
anstelle von :t
.
Dies kann sehr effektiv sein, wenn Sie es mit :g
oder :v
kombinieren:
:v/foo/m$
verschiebt alle Zeilen, die nicht mit dem Muster "foo" übereinstimmen, an das Ende der Datei.:+,$g/^\s*class\s\+\i\+/t.
kopiert alle nachfolgenden Zeilen des Formulars class xxx
direkt nach dem Cursor.Referenz: :help range
, :help :t
, :help :g
, :help :m
und :help :v
YP
oder Yp
oder yyp
.
Einfacher geht es nicht! Vom normalen Modus:
yy
bewegen Sie sich dann zu der Zeile, in die Sie einfügen möchten
p
yy
ruckelt die aktuelle Zeile, ohne sie zu löschen
dd
löscht die aktuelle Zeile
p
wird put
eine Zeile von einer der vorherigen Methoden gepackt
Mach das:
Zuerst, yy um die aktuelle Zeile zu kopieren, und dann p einfügen.
Wenn du einen anderen Weg wünschst :-)
"ayy
Dies speichert die Zeile im Puffer a
"ap
Damit wird der Inhalt des Puffers a
an den Cursor gesetzt.
Hier gibt es viele Variationen.
"a5yy
speichert die 5 Zeilen im Puffer a
siehe http://www.vim.org/htmldoc/help.html für mehr Spaß
yyp - erinnere dich mit "yippee!"
Mehrere Zeilen mit einer Zahl dazwischen:
y7yp
yyp - danach einfügen
yyP - vorher einfügen
Sie können auch <C-x> <C-l> versuchen, die die letzte Zeile des Einfügemodus wiederholt und Ihnen ein Abschlussfenster mit allen Zeilen anzeigt. Es funktioniert fast wie <C-p>
Eine weitere Option wäre, mit zu gehen:
nmap <C-d> mzyyp`z
bietet Ihnen den Vorteil, die Cursorposition zu erhalten.
Ich mag: Shift+v (um die gesamte Zeile sofort auszuwählen und andere Zeilen auswählen zu können, wenn Sie möchten), y, p
Für jemanden, der vi nicht kennt, könnten einige Antworten von oben ihn mit Phrasen wie "Einfügen ... nach/vor" irreführen aktuelle Zeile".
Es ist eigentlich "Einfügen ... nach/vor mauszeiger".
yy oder Y um die Zeile zu kopieren
oder
dd um die Zeile zu löschen
dann
p um den kopierten oder gelöschten Text nach dem einzufügen mauszeiger
oder
P um den kopierten oder gelöschten Text vor dem einzufügen mauszeiger
Weitere Informationen zu Tastenkombinationen finden Sie auf dieser Website: vi Vollständige Liste der Tastenkombinationen
1 gotcha: Wenn Sie die Zeile mit "p" setzen, wird sie eingefügt - nach der Zeile, auf der sich der Cursor befindet. Wenn Sie also die Zeile nach der Zeile einfügen möchten, die Sie ziehen, bewegen Sie die Zeile nicht Cursor eine Zeile nach unten, bevor Sie die neue Zeile einfügen.
Standard ist yyp, aber ich benutze dieses Rebinding seit ungefähr einem Jahr und liebe es:
" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv
Für diejenigen, die mit dem Erlernen von vi beginnen, finden Sie hier eine gute Einführung in vi, indem Sie nebeneinander vi-Befehle für typische Cursorbewegungen und Tastenkombinationen des Windows-GUI-Editors auflisten. Es listet alle grundlegenden Befehle auf, einschließlich yy (Zeile kopieren) und p (Einfügen nach) oder P(vorher einfügen).
Ich weiß, ich bin zu spät zur Party, aber wie auch immer; Ich habe das in meiner .vimrc:
nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>
der Befehl :copy
kopiert nur die ausgewählte Zeile oder den Bereich (immer ganze Zeilen) unter die als Argument angegebene Zeilennummer.
Im Normalmodus copy .
kopiere diese Zeile direkt unter diese Zeile.
Im visuellen Modus wird daraus '<,'> copy '>
copy vom Start der Auswahl bis zum Ende der Auswahl bis zur Zeile unter dem Ende der Auswahl.
Wenn Sie eine Zeile duplizieren und direkt unter der aktuellen Zeile einfügen möchten, wie in Sublime Ctrl+Shift+DDann können Sie dies zu Ihrer .vimrc
-Datei hinzufügen.
imap <S-C-d> <Esc>Yp
Ich benutze dieses Mapping gerne:
:nnoremap yp Yp
denn es macht es konsistent, es zusammen mit dem nativen YP
-Befehl zu verwenden.