Come faccio a duplicare un'intera riga in Vim in modo simile a Ctrl+D in IntelliJ IDEA/Resharper o Ctrl+Alt+↑/↓ in Eclipse?
yy o Y copiare la linea
o
dd per cancellare (tagliare) la linea
poi
p per incollare il testo copiato o cancellato after la riga corrente
o
P per incollare il testo copiato o cancellato before la riga corrente
Modalità normale: vedi altre risposte.
Il modo Ex :
:t.
duplicherà la linea,:t 7
lo copierà dopo la riga 7,:,+t0
copierà la riga corrente e la riga successiva all'inizio del file (,+
è un sinonimo per l'intervallo .,.+1
),:1,t$
copierà le righe dall'inizio alla posizione del cursore fino alla fine (1,
è un sinonimo per l'intervallo 1,.
).Se hai bisogno di spostarti invece di copiare, usa :m
invece di :t
.
Questo può essere davvero potente se lo abbini a :g
o :v
:
:v/foo/m$
sposta tutte le linee che non corrispondono al modello "pippo" alla fine del file.:+,$g/^\s*class\s\+\i\+/t.
copierà tutte le righe successive del modulo class xxx
subito dopo il cursore.Riferimento: :help range
, :help :t
, :help :g
, :help :m
e :help :v
YP
o Yp
o yyp
.
Non è più semplice di così! Dalla modalità normale:
yy
quindi spostati sulla riga che vuoi incollare su e
p
yy
strattonerà la linea corrente senza cancellarla
dd
cancellerà la riga corrente
p
sarà put
una linea afferrata da uno dei metodi precedenti
Fai questo:
Primo, yy per copiare la riga corrente e quindi p incollare.
Se vuoi un altro modo :-)
"ayy
questo memorizzerà la riga nel buffer a
"ap
questo metterà il contenuto del buffer a
al cursore.
Ci sono molte varianti su questo.
"a5yy
questo memorizzerà le 5 linee nel buffer a
vedi http://www.vim.org/htmldoc/help.html per più divertimento
yyp - ricordalo con "yippee!"
Più righe con un numero intermedio:
y7yp
yyp - incolla dopo
yyP - incollare prima
Puoi anche provare <C-x> <C-l> che ripeterà l'ultima riga dalla modalità di inserimento e ti porta una finestra di completamento con tutte le linee. Funziona quasi come <C-p>
Un'altra opzione sarebbe quella di andare con:
nmap <C-d> mzyyp`z
ti dà il vantaggio di preservare la posizione del cursore.
Mi piace: Shift+v (per selezionare l'intera riga immediatamente e per selezionare altre righe se lo si desidera), y, p
Per qualcuno che non conosce vi, alcune risposte dall'alto potrebbero ingannarlo con frasi come "incolla ... dopo/prima linea corrente".
In realtà "incolla ... dopo/prima cursore".
yy o Y copiare la linea
o
dd per cancellare la linea
poi
p per incollare il testo copiato o cancellato dopo il cursore
o
P per incollare il testo copiato o cancellato prima il cursore
Per ulteriori combinazioni di tasti, è possibile visitare questo sito: vi elenco completo di binding dei tasti
1 getcha: quando usi "p" per mettere la linea, la mette dopo la linea su cui si trova il cursore, quindi se vuoi aggiungere la linea dopo la linea che stai tirando, non muoverti cursore giù una linea prima di mettere la nuova linea.
L'impostazione predefinita è yyp, ma ho usato questo rebinding per un anno circa e lo adoro:
" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv
Per coloro che iniziano a imparare vi, ecco una buona introduzione a vi elencando i comandi vi parallelamente al tipico movimento del cursore di Windows GUI e ai tasti di scelta rapida. Elenca tutti i comandi di base inclusi yy (linea di copia) e p (incolla dopo) o P(incollare prima).
So che sono in ritardo per la festa, ma qualunque cosa; Ho questo nel mio .vimrc:
nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>
il comando :copy
copia semplicemente la riga selezionata o l'intervallo (sempre intere linee) sotto il numero di riga indicato come argomento.
In modalità normale ciò che fa è copy .
copia questa linea appena sotto questa linea .
E in modalità visuale diventa '<,'> copy '>
copia dall'inizio della selezione alla fine della selezione alla riga sottostante alla fine della selezione .
Se vuoi duplicare una riga e incollarla subito sotto la corrente, proprio come in Sublime Ctrl+Shift+D, quindi puoi aggiungerlo al tuo file .vimrc
.
imap <S-C-d> <Esc>Yp
Mi piace usare questa mappatura:
:nnoremap yp Yp
perché rende coerente l'uso insieme al comando nativo YP
.