2013-11-24 5 views
8

Я делаю некоторые вырезать и вставлять из множества разных источников данных. Я пытаюсь вставить код в несколько строк в несколько строк кода, так что для первой строки вставляемого кода перейдите между двумя конкретными точками исходного кода и тем же для второго и так далее. Это что-то вроде вставки блоков кода между разделенными несколькими строками кода. На рисунке ниже .gif показать, что я имею в виду:Как вставить код в несколько строк в несколько строк кода?

enter image description here

Как я могу это сделать? Я пытаюсь с VIM CTRL + V, но я не могу вставить многострочный код.

Вот пример:

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

Возможно, взгляните на несколько курсоров, которые могут дать вам некоторые идеи относительно написания собственной пользовательской функции для этой задачи: https://github.com/magnars/multiple-cursors.el – lawlist

ответ

2

Вы должны выбрать верхний левый угол с помощью курсора, введите Control + V, затем перейдите к последней строке и введите $, чтобы получить конец всех строк (это было пропущено в других ответах). Затем вы удаляете с d, переходите к пункту назначения и используете p.

Для вас точного образца, решение в Vim является:

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

разложено:

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. 

Альтернатива $ является обеспечение

:set virtualedit=all 

и что будет делать задание, если вы не можете поместить курсор в пункт назначения (когда он находится за пределами его строки).

+0

Спасибо, вы можете объяснить G0 {j $ hdggf (p Я новичок в VIM. Это кажется очень хорошим ответом .. –

+0

Вам следует попробовать выполнить команду: vimtutor, если у вас есть один час для инвестиций на VIM. – user2987828

+0

+ 1 Большое спасибо! (PS Я сделал это дважды, я должен попробовать еще раз.) –

3

Это работает для меня, используя CTRL + V, выбрать весь блок со стрелками или буквы движения (h, j, k и l), затем разрезать его с д, поместите курсор после первой скобки в первой строке и использовать р

+1

Вы уверены, что когда я спускаюсь, он выбирает следующую строку, и когда я вставляю его, он помещает все в одну строку ... – Johan

+1

@Johan: Конечно. Я проверил его. Моя версия: VIM-Vi IMproved 7.4' в Linux. – Birei

+0

@Johan Для меня это работает, как сказать Ingo обязательно сначала выберите CTRL + V 'viol3et'block, а затем скопируйте это и не используйте CTRL + V, чтобы вставить его ... Спасибо Birei! –

4

Вы можете использовать copy-rectangle-as-kill (C-x r M-w) и yank-rectangle (C-x r y) для достижения описанного вами поведения.

Подробнее см. В разделе Rectangles в руководстве emacs.

4

Как действует Vim во время паста определяется по типу выбора во время yank. Обязательно выберите viol3et блок в блочного режима визуального: Ctrl + V (или Q на многих установках Windows).

В качестве альтернативы, вы можете использовать мой UnconditionalPaste plugin просто дергать/удалить целые строки (например 6dd время на viol3et линии), а затем вставьте (между целевыми линиями) с gbp.

Смежные вопросы