2013-11-24 9 views
8

Sto facendo alcune operazioni di copia e incolla da molte diverse origini dati. Sto cercando di inserire il codice in più righe in un codice di linea multipla in modo che per la prima riga del codice incollato passare tra due punti specifici del codice originale e lo stesso per il secondo e così via. È qualcosa come inserire blocchi di codice tra più righe di codice suddivise. L'immagine .gif riportata sotto mostra cosa intendo:Come inserire il codice in più righe in un codice di più righe?

enter image description here

Come posso fare questo? Sto provando con VIM CTRL + V ma non riesco a incollare il codice multi linee.

Ecco campione:

VIOLET=SpectralBand([0.380,0.450],'violet') 
BLUE= SpectralBand([0.450,0.495],'b') 
GREEN= SpectralBand([0.495,0.570],'g') 
YELLOW=SpectralBand([0.570,0.590],'y') 
ORANGE=SpectralBand([0.590,0.620],'orange') 
RED= SpectralBand([0.620,0.750],'r') 

"viol3et", 45839, 
"bl3ue" , 43903, 
"gre3en" , 28392, 
"y3ellow", 23049, 
"o3range", 12389, 
"r3ed" , 32840, 
+0

Forse date un'occhiata a più cursori, che potrebbero darvi alcune idee riguardo alla scrittura della vostra funzione personalizzata per il compito da svolgere: https://github.com/magnars/multiple-cursors.el – lawlist

risposta

2

È necessario selezionare l'angolo in alto a sinistra con il cursore, digitare Control + V, quindi passare all'ultima riga e digitare $ per ottenere la fine di tutte le linee (questo è mancato nelle altre risposte). Quindi si cancella con d, si va alla destinazione e si usa p.

Per voi campione esatto, la soluzione in vim è:

G0<c-v>{j$dggf(p 

scomposta come:

G  go to last line of file 
0  go to its first character 
<c-V> to start a blockwise selection 
{  go to previous empty line 
j  go to next line (hence the beginning of block) 
$  extend the blockwise selection to end of ALL lines (that was my point) 
d  delete and store the block 
gg go to first line of file 
f( go to next character '(' if on same line. 
p  to paste the block after the column of current character. 

Un'alternativa a $ è quello di consentire

:set virtualedit=all 

e che farà il lavoro se non si può mettere il cursore sulla destinazione (quando oltre la fine della sua linea).

+0

Grazie puoi spiegare il G0 {j $ hdggf (p Sono un novizio in VIM. Questa sembra un'ottima risposta .. –

+0

Dovresti provare il comando: vimtutor se hai un'ora da investire su VIM. – user2987828

+0

+ 1 Grazie mille! (PS l'ho fatto due volte dovrei provarlo un'altra volta). –

3

Funziona per me usando CTRL + V, selezionare l'intero blocco con frecce o le lettere di movimento (h, j, k e l), poi tagliarla con d, mettere cursore dopo primi parentesi della prima linea e utilizzare p

+1

Sei sicuro che quando scenderò, seleziona la riga successiva e quando incollo mette tutti sulla stessa riga ... – Johan

+1

@Johan: Certo. L'ho provato. La mia versione: 'VIM - Vi IMproved 7.4' in Linux. – Birei

+0

@Johan Per me funziona, come dire Ingo assicurati di selezionare prima con CTRL + V il 'viol3et'block e poi copialo e non usare CTRL + V per inserirlo ... Grazie Birei! –

4

È possibile utilizzare copy-rectangle-as-kill (C-x r M-w) e yank-rectangle (C-x r y) per ottenere il comportamento che descrivi.

Vedere la sezione Rectangles nel manuale emacs per i dettagli.

4

Come Vim si comporta durante pasta è determinato dal tipo di selezione durante Yank. Assicurarsi di selezionare il blocco viol3et in modalità visiva a blocchi: Ctrl +V (o Q su molte installazioni di Windows).

In alternativa, è possibile utilizzare il mio UnconditionalPaste plugin ad appena Yank/eliminare le intere linee (ad esempio 6dd mentre sulla linea viol3et), e quindi incollare (tra le linee di destinazione) con gbp.