Wie dupliziere ich eine ganze Zeile in Vim auf ähnliche Weise wie Ctrl+ Din IntelliJ IDEA / Resharper oder Ctrl+ Alt+ ↑/ ↓in Eclipse ?
Y
es P
leasen. :)
Wie dupliziere ich eine ganze Zeile in Vim auf ähnliche Weise wie Ctrl+ Din IntelliJ IDEA / Resharper oder Ctrl+ Alt+ ↑/ ↓in Eclipse ?
Y
es P
leasen. :)
Antworten:
yyoder Ydie Zeile zu kopieren (mnemonic: y ank )
oder
ddauf d ÉLETE die Linie (Vim Kopien , was Sie in einem gelöschten Zwischenablage-like „registrieren“, wie ein Schnitt - Betrieb)
dann
pauf p aste die kopiert oder gelöscht Text nach der aktuellen Zeile
oder
Pauf p aste die kopiert oder gelöscht Text vor der aktuellen Zeile
Y
zu y$
. (In Übereinstimmung mit D
und C
; (aber nicht Vi-kompatibel (niemand kümmert sich darum.))) Das wird sogar in vorgeschlagen :help Y
.
yj
oder yk
, zumal Sie nicht auf ein Zeichen verdoppeln. Außerdem yk
ist dies eine Rückwärtsversion, 2yy
die nicht funktioniert, und Sie können die Anzahl der Zeilen eingeben, die rückwärts in y9j
oder y2k
usw. reichen . Der einzige Unterschied besteht darin, dass Ihre Anzahl n-1
für insgesamt n
Zeilen gelten muss, aber Ihr Kopf kann dies lernen wie auch immer.
Normaler Modus: 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 kombinieren :v
:
: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
:
im visuellen Modus drücken , wird die Transformation '<,'>
so geändert, dass der Linienbereich, über den sich die visuelle Auswahl erstreckt, vorab ausgewählt wird. Im visuellen Modus :t0
werden also die Zeilen am Anfang kopiert.
:t.
ist die genaue Antwort auf die Frage.
YP
oder Yp
oder yyp
.
Y
wird normalerweise y$
bis zum Ende der Zeile (von der aktuellen Cursorposition, nicht bis zum Zeilenanfang) neu zugeordnet (ziehen (kopieren)). Mit dieser Zeile in .vimrc
::nnoremap Y y$
yyP
Einfacher geht es nicht! Aus dem normalen Modus:
yy
Bewegen Sie sich dann zu der Zeile, die Sie an und einfügen möchten
p
yy
zieht die aktuelle Zeile, ohne sie zu löschen
dd
löscht die aktuelle Zeile
p
wird put
eine Linie von einer der vorherigen Methoden erfasst
Mach das:
Zuerst yydie aktuelle Zeile kopieren und dann peinfügen.
Wenn Sie einen anderen Weg wollen:
"ayy
: Dadurch wird die Zeile im Puffer gespeichert a
.
"ap
: Dadurch wird der Inhalt des Puffers a
auf den Cursor gesetzt.
Hier gibt es viele Variationen.
"a5yy
: Dadurch werden die 5 Zeilen im Puffer gespeichert a
.
Weitere Informationen finden Sie unter " Vim-Hilfedateien " .
yyp - erinnere dich daran mit "yippee!"
Mehrere Zeilen mit einer Zahl dazwischen:
y7yp
:.,.+7 copy .+7
: P
Ich mag: Shift+ v(um die ganze Zeile sofort auszuwählen und Sie können andere Zeilen auswählen, wenn Sie möchten), y, p
Sie können auch <Cx> <Cl> ausprobieren, wodurch die letzte Zeile aus dem Einfügemodus wiederholt wird und ein Abschlussfenster mit allen Zeilen angezeigt wird. Es funktioniert fast wie <Cp>
Für jemanden, der vi nicht kennt, könnten einige Antworten von oben ihn mit Sätzen wie "Einfügen ... nach / vor der aktuellen Zeile " irreführen .
Es ist eigentlich "Einfügen ... nach / vor dem Cursor ".
yyoder Ydie Zeile zu kopieren
oder
dddie Zeile löschen
dann
pum den kopierten oder gelöschten Text nach dem Cursor einzufügen
oder
Pum den kopierten oder gelöschten Text vor dem Cursor einzufügen
Weitere Schlüsselbindungen finden Sie auf dieser Website: vi Vollständige Schlüsselbindungsliste
1 gotcha: Wenn Sie "p" verwenden, um die Linie zu setzen, wird sie nach der Linie gesetzt, auf der sich Ihr Cursor befindet. Wenn Sie also die Linie nach der Linie hinzufügen möchten, die Sie ziehen, bewegen Sie den Cursor nicht um eine Linie nach unten bevor Sie die neue Zeile setzen.
Die Standardeinstellung ist yyp, aber ich verwende diese Neubindung seit ungefähr einem Jahr und liebe sie:
" set Y to duplicate lines, works in visual mode as well.
nnoremap Y yyp
vnoremap Y y`>pgv
Ich weiß, dass ich zu spät zur Party komme, aber was auch immer; Ich habe dies in meiner .vimrc:
nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>
Der :copy
Befehl kopiert nur die ausgewählte Zeile oder den Bereich (immer ganze Zeilen) unter die als Argument angegebene Zeilennummer.
Im normalen Modus copy .
kopiert dies diese Zeile direkt unter diese Zeile .
Im visuellen Modus wird es '<,'> copy '>
vom Beginn der Auswahl bis zum Ende der Auswahl in die Zeile unter dem Ende der Auswahl kopiert .
Für diejenigen, die anfangen, vi zu lernen, 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(nach einfügen) oder P(vor einfügen).
Wenn Sie eine Linie kopieren mögen und es sofort unter der aktuellen pastös, genau wie in Sublime Ctrl+ Shift+ D, dann können Sie diese in Ihrer hinzufügen .vimrc
Datei.
nmap <S-C-d> <Esc>Yp
Oder für den Einfügemodus:
imap <S-C-d> <Esc>Ypa
i
zum Ende, um ihn erneut aufzurufen undo
, wird unterbrochen , sodass die Lösung für das Duplizieren von Zeilen im Einfügemodus nicht so trivial ist, wie es scheint.
imap <S-C-d> <Esc>Ypi
Einfügemodus und nmap <S-C-d> <Esc>Yp
im normalen Modus