2013-11-24 23 views
8

Robię wycinanie i wklejanie z wielu różnych źródeł danych. Próbuję wstawić kod w wielu liniach w wieloliniowym kodzie tak, aby w pierwszym wierszu wklejonego kodu znajdował się między dwoma określonymi punktami oryginalnego kodu i tym samym dla drugiego i tak dalej. Jest to coś w rodzaju wstawiania bloków kodu między podzielonymi wieloma liniami kodu. Obraz .gif poniżej pokazują, co mam na myśli:Jak wstawić kod do wielu linii w kodzie wielu linii?

enter image description here

W jaki sposób można to zrobić? Próbuję z VIM CTRL + V, ale nie mogę wkleić kodu wielu linii.

Oto próbka:

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

Być może przyjrzyj się wielu kursorom, które mogą dać ci kilka pomysłów dotyczących napisania własnej niestandardowej funkcji dla zadania pod ręką: https://github.com/magnars/multiple-cursors.el – lawlist

Odpowiedz

2

Należy wybrać lewy górny róg kursorem, wpisać Control + V, a następnie przejść do ostatniej linii i wpisać $, aby uzyskać koniec wszystkich linii (w innych odpowiedziach pominięto to). Następnie usuwasz za pomocą d, idź do celu i użyj p.

Dla Ciebie dokładnym próbki, roztwór w vim jest:

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

rozkłada jak:

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. 

Alternatywą $ jest umożliwienie

:set virtualedit=all 

i że zrobi zadanie, jeśli nie możesz umieścić kursora w miejscu docelowym (gdy jest poza końcem linii).

+0

Dzięki, możesz wyjaśnić G0 {j $ hdggf (p Jestem początkującym w VIM.To wygląda na bardzo dobrą odpowiedź .. –

+0

Powinieneś spróbować polecenia: vimtutor, jeśli masz godzinę na inwestycję w VIM. – user2987828

+0

+ 1 Wielkie dzięki (PS Zrobiłem to dwa razy, powinienem spróbować jeszcze raz.) –

3

to działa na mnie za pomocą CTRL + V zaznacz cały blok ze strzałkami lub listów przewozowych (h, j, k i l), a następnie wyciąć go z d, umieścić kursor po pierwszych nawiasach pierwszej linii i używać str

+1

Czy jesteś pewien, że kiedy schodzę, wybiera następną linię i kiedy wkleję, umieszcza wszystko na tej samej linii ... – Johan

+1

@Johan: Pewnie. Testowałem to. Moja wersja: 'VIM - Vi IMproved 7.4' w systemie Linux. – Birei

+0

@Johan Dla mnie to działa, jak powiedzieć Ingo pamiętaj, aby najpierw wybrać CTRL + V '' viol3et'block, a następnie skopiować i nie używać CTRL + V, aby go wstawić ... Dzięki Birei! –

4

można użyć copy-rectangle-as-kill (C-x r M-w) i yank-rectangle (C-x r y), aby osiągnąć opisane zachowanie.

Zobacz rozdział Rectangles w podręczniku emacs, aby uzyskać szczegółowe informacje.

4

Sposób działania Vima podczas Wklej jest określony przez rodzaj selekcji podczas yank. Pamiętaj, aby wybrać blok viol3et w blokowo trybie wizualnym: Ctrl + V (lub Q na wielu instalacjach Windows).

Alternatywnie, można użyć mój UnconditionalPaste plugin tylko szarpać/usunąć całą linie (np 6dd podczas gdy na linii viol3et), a następnie wklej (między wierszami docelowych) z gbp.