2012-01-24 18 views
38

Sto eseguendo vim 7.3 su un Mac 10.7.2 e sto riscontrando qualche problema nel tagliare e incollare più righe.Taglia e incolla più righe in vim

Sul mio vecchio configurazione di Linux (che è stato rubato in modo da non so le versioni), ho potuto digitare "dd" più volte e poi "p" restituirebbe tutti indietro. Ad esempio: digita: "dd dd" e due righe verrebbero cancellate. Digitare ora "p" e entrambe le righe vengono copiate nel buffer.

So che posso ottenere ciò che voglio digitando "2dd", e quindi "p" - ma mi piacerebbe poter "dd" -out linee senza contare il numero di righe prima del tempo.

Qualche idea?

+2

Per non contare le righe avanti usare "relativenumbers" per visualizzare i numeri di riga relativa al cursore. E partendo con 7.4 l'impostazione sia di "numeri" che di "relativenumbers" rende il numero di riga in cui il cursore è assoluto e gli altri relativi, ottenendo il meglio da entrambi i mondi. Quindi è più facile fare come @Giovanni ha suggerito d2d (per due righe). –

+1

Questo è fantastico, ma per chiunque provi questo è in realtà "numero" e "relativenumber", non "numeri" e "relativenumbers" :) – user3640967

risposta

75

Hai pensato di usare visual mode?

Si potrebbe semplicemente andare:

  • Press V
  • Seleziona tutto ciò che si vuole tagliare senza contare
  • Press d
  • andare dove si desidera incollare
  • Press p

Questo dovrebbe produrre circa la metà delle sequenze di tasti del metodo dd poiché si preme un tasto per riga anziché due. Punti bonus se si utilizza 5j (o simile) per selezionare più righe alla volta.

+9

Per le linee complete, è più facile usare 'V' (Shift + V). –

+0

Buono uno @GregHewgill, modificato con il tuo suggerimento. –

+1

Stavo per dire che non volevo farlo perché mi "piaceva" il mio vecchio flusso di lavoro. Ma, l'ho appena provato ed è molto meglio. Grazie! – spinlock

5

Non so se questo è abbastanza vicino a quello che si sta cercando, ma una cosa che potreste fare è utilizzare un apposito registro, e valorizzare il vostro nome del registro. Che dice a Vim per aggiungere al registro, piuttosto che sostituirlo, quindi se avete le righe:

one 
two 
three 

è possibile inserire

"qdd 
"Qdd 
"Qdd 

e poi successivamente se si inserisce

"qp 

sarà incollare di nuovo le linee originali

+0

Dalla domanda, sembra che sia stato mappato a 'd'. – romainl

1

sono d'accordo con @ Ben S. che questo è il modo migliore per Acco ma se si sta solo cercando di replicare il vecchio comportamento è possibile rimappare dd da aggiungere a un registro specificato, quindi mappare p da incollare da quel registro e cancellarlo.
Questo avrà lo svantaggio di causare p di lavorare solo con le cose cancellati usando dd (usando d} per eliminare alla fine del paragrafo non avrebbe messo il testo nel registro corretta per essere incollato in seguito).

Aggiungere il seguente al vostro vimrc

noremap dd "Ddd    "Appends the contents of the current line into register d 
noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out 

se non si desidera incollare per cancellare il contenuto del registro

noremap p "dp    "Paste from register d 

ma questo farà sì che registrarsi per crescere senza mai cancellare Esci

2

Per tagliare e incollare per numero di riga (fare :set number per vedere i numeri di riga), per le righe da x a y:

:x,yd 

o se il cursore è già sulla linea di x, fare

:,yd 

Poi vai a dove si desidera incollare e premere p

13

Si potrebbe digitare:

d<n>d 

dove <n> è il numero di righe che si desidera tagliare e quindi è possibile incollarle con:

p 

Ad esempio, per tagliare e incollare 3 linee:

d3d 
p 
+0

ottima risposta grazie – kapil

Problemi correlati