Come duplicare un'intera riga in Vim su Eclipse?


1624

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


49
Le persone non gestiscono più vimtutor? Questo è probabilmente nei primi cinque minuti di apprendimento su come usare Vim.
dash-tom-bang,

131
Vuoi duplicare questa linea? Yes Plocazione. :)
Stavr00,

3
FWIW Ho fatto vimtutor circa una dozzina di volte negli ultimi 2 mesi e questo concetto non è coperto. Descrive come fare "dd" e "v - navigate - y" seguito da "p". Non dice come copiare una singola riga senza eliminarla come richiesto qui.
danielson317,

Risposte:


2768

yyo Yper copiare la linea (Memo: y ANK )
o
ddal d elete linea (copie Vim quello che è stato eliminato in un clipboard-like "registrare", come un taglio di funzionamento)

poi

pa p aste del copiati o cancellati del testo dopo la linea corrente
o
Pper p aste il testo copiato o eliminato prima che la linea corrente


129
Un punto eccellente. Per qualche motivo, trovo che colpire y due volte sia più veloce per me di SHIFT-y
Mark Biek,

25
@camflan Penso che la Y dovrebbe essere "copia dal cursore fino alla fine"
Dzung Nguyen,

42
e 2yy possono essere usati per copiare 2 righe (e per qualsiasi altra n)
Amir Ali Akbari,

5
@nXqd: Sì, una grande percentuale di utenti mappe Ya y$. (Coerentemente con De C; (ma non compatibile con Vi (nessuno se ne frega.))) Questo è persino proposto in :help Y.
Aaron Thoma il

11
Per copiare due righe, è ancora più veloce solo per andare yjo yk, soprattutto perché non raddoppi su un personaggio. Inoltre, ykè una versione all'indietro che 2yynon può essere eseguita e puoi inserire il numero di righe da raggiungere all'indietro y9jo y2k, ecc. L'unica differenza è che il tuo conteggio deve essere n-1per un totale di nrighe, ma la tua testa può imparare che Comunque.
zelk,

406

Modalità normale: vedi altre risposte.

Il modo Ex :

  • :t. duplicherà la linea,
  • :t 7 lo copierà dopo la riga 7,
  • :,+t0copierà la riga corrente e quella successiva all'inizio del file ( ,+è sinonimo dell'intervallo .,.+1),
  • :1,t$copierà le linee dall'inizio fino alla posizione del cursore fino alla fine ( 1,è sinonimo dell'intervallo 1,.).

Se devi spostare invece di copiare, usa :minvece di :t.

Questo può essere davvero potente se lo combini con :go :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 xxxsubito dopo il cursore.

Riferimento: :help range, :help :t, :help :g, :help :me:help :v


1
Quando si preme :in modalità visiva, viene trasformato in '<,'>modo da preselezionare l'intervallo di linee su cui si è estesa la selezione visiva. Quindi, in modalità visiva, :t0copierà le linee all'inizio.
Benoit,

1
Per la cronaca: quando si digitano i due punti (:) si passa alla modalità riga di comando in cui è possibile immettere i comandi Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html I comandi Ex possono essere davvero potenti e concisi. Le soluzioni yyp sono comandi "Modalità normale". Se vuoi copiare / spostare / eliminare una linea o un intervallo di linee lontane, un comando Ex può essere molto più veloce.
Niels Bom,

7
Il downgrade non è dovuto a un problema con la risposta in quanto tale (anche se non funzionerebbe per la mia situazione, non ho idea del numero di riga che voglio duplicare) ma perché DAVVERO non dovrebbe essere la risposta migliore / accettata per questo domanda comunemente cercata.
mjaggard,

9
@mjaggard: le risposte accettate sono sempre in cima, indipendentemente dal loro punteggio. Sì, ho aggiunto quella risposta come complemento e sembra che si adattasse bene al PO.
Benoit,

7
:t.è la risposta esatta alla domanda.
Burak Erdem,

294

YPo Ypo yyp.


Ydi solito viene rimappato a y$(yank (copia) fino alla fine della riga (dalla posizione corrente del cursore, non all'inizio della riga)). Con questa riga in .vimrc::nnoremap Y y$
Aaron Thoma il

1
Non dimenticare il povero vecchioyyP
icc97

253

copia e incolla in vim

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

yy

quindi passa alla riga in cui desideri incollare e

p

34
Cosa hai usato per fare il GIF?
Zoltán,

4
@Zoltán puoi usare LiceCap, che è di piccole dimensioni
onmyway133


44

Fai questo:

Innanzitutto, yyper copiare la riga corrente, quindip per incollare.


20
Non digitare lo spazio.
Niels Bom,

1
Sì, se il cursore si trova alla fine della riga e si digita lo spazio come mostrato, duplicherai la linea che hai strappato a 2 righe sotto la linea che hai strappato.

44

Se vuoi un altro modo:

"ayy: Questo memorizzerà la riga nel buffer a.

"ap: Questo metterà il contenuto del buffer asul cursore.

Ci sono molte varianti su questo.

"a5yy: Questo memorizzerà le 5 righe nel buffer a.

Vedi " File di aiuto di Vim per più divertimento.


Grazie, l'ho usato come bind: map <Leader> d "ayy" ap
frbl

39

yyp - ricordalo con "yippee!"

Più righe con un numero tra:

y7yp


17
7yy equivale a y7y ed è probabilmente più facile ricordare come fare.
graywh

10
y7yp (o 7yyp) è raramente utile; il cursore rimane sulla prima riga copiata in modo che p incolli le righe copiate tra la prima e la seconda riga della sorgente. Per duplicare un blocco di linee usa 7yyP
Nefrubyr il

@Nefrubyr o :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - incolla dopo

yyP - incolla prima


6
Poiché la riga viene duplicata, il risultato finale del contenuto è lo stesso.
Acumenus,

4
@ABB Tuttavia, qui c'è una differenza in miniatura: su quale linea si posizionerà il cursore.
Mikk,

12

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


11

Puoi anche provare <Cx> <Cl> che ripeterà l'ultima riga dalla modalità di inserimento e ti porterà una finestra di completamento con tutte le righe. Funziona quasi come <Cp>


Questo è molto utile, ma per evitare di dover premere molti tasti l'ho mappato su CTRL-L, questa è la mia mappa: inoremap ^ L ^ X ^ L
Jorge Gajon,

11

Un'altra opzione sarebbe quella di andare con:

nmap <C-d> mzyyp`z

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


10

Per qualcuno che non conosce vi, alcune risposte dall'alto potrebbero fuorviarlo con frasi come "incolla ... dopo / prima della riga corrente ".
In realtà è "incolla ... dopo / prima del cursore ".

yyo Yper copiare la riga
o
dd per eliminare la riga

poi

pper incollare il testo copiato o eliminato dopo il cursore
o
Pper incollare il testo copiato o eliminato prima del cursore


Per ulteriori associazioni di tasti, è possibile visitare questo sito: vi Elenco completo di collegamenti a chiave


3

1 gotcha: 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 strappando, non spostare il cursore su una linea prima di mettere la nuova linea.


4
o usa la P maiuscola - messa prima
Ghoti il

3

L'impostazione predefinita è yyp, ma sto usando questo rebinding da circa un anno e lo adoro:

" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv


3

So di essere in ritardo alla festa, ma comunque; Ho questo nel mio .vimrc:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>

il :copy comando copia semplicemente la linea o l'intervallo selezionato (sempre linee intere) al di sotto del numero di riga indicato come argomento.

In modalità normale ciò che fa è copy . copiare questa riga appena sotto questa riga .

E in modalità visiva si trasforma in '<,'> copy '> copia dall'inizio della selezione alla fine della selezione fino alla riga sotto la fine della selezione .


1
↑↑ migliore risposta qui!

2

Per coloro che iniziano a imparare vi, ecco una buona introduzione a vi elencando i comandi vi affiancati al tipico movimento del cursore dell'editor della GUI di Windows e ai tasti di scelta rapida. Elenca tutti i comandi di base tra cui yy(copia riga) e p(incolla dopo) oP (incolla prima).

vi (Vim) per utenti Windows


1

Se desideri duplicare una riga e incollarla subito sotto l'attuale come, proprio come in Sublime Ctrl+ Shift+ D, puoi aggiungerla al tuo .vimrcfile.

nmap <S-C-d> <Esc>Yp

Oppure, per la modalità Inserisci:

imap <S-C-d> <Esc>Ypa


Questo lascia però la modalità di inserimento, e solo l'aggiunta ialla fine per rientrare si interrompe undo, quindi la soluzione per duplicare le linee in modalità di inserimento non è così banale come sembra.
DarkWiiPlayer

Questo funziona perfettamente per me: imap <S-C-d> <Esc>Ypi inserire la modalità e nmap <S-C-d> <Esc>Ypin modalità normale
jedi

0

Mi piace usare questa mappatura:

:nnoremap yp Yp

perché rende coerente l'uso accanto al YPcomando nativo .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.