it-swarm.it

Duplica un'intera riga in Vim

Come faccio a duplicare un'intera riga in Vim in modo simile a Ctrl+D in IntelliJ IDEA/Resharper o Ctrl+Alt+/ in Eclipse?

1492
sumek

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

2555
Mark Biek

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

375
Benoit

YP o Yp o yyp.

279
Linulin

copy and paste in vim

Non è più semplice di così! Dalla modalità normale:

yy

quindi spostati sulla riga che vuoi incollare su e

p
229
Adam

yy

strattonerà la linea corrente senza cancellarla

dd

cancellerà la riga corrente

p

sarà put una linea afferrata da uno dei metodi precedenti

49
pjz

Fai questo:

Primo, yy per copiare la riga corrente e quindi p incollare.

38
Eric Z Beard

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

38
Kwondri

yyp - ricordalo con "yippee!"

Più righe con un numero intermedio:

y7yp

37
theschmitzer

yyp - incolla dopo

yyP - incollare prima

22
yemu

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>

11
nikolavp

Un'altra opzione sarebbe quella di andare con:

nmap <C-d> mzyyp`z

ti dà il vantaggio di preservare la posizione del cursore.

11
Rook

Mi piace: Shift+v (per selezionare l'intera riga immediatamente e per selezionare altre righe se lo si desidera), y, p

10
Gabe

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

10
Michael

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.

3
cori

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

2
Chris Penner

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

vi (Vim) per utenti Windows

1
ap-osd

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 .

1
DarkWiiPlayer

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

0
jedi

Mi piace usare questa mappatura:

:nnoremap yp Yp

perché rende coerente l'uso insieme al comando nativo YP.

0
yolenoyer