2014-02-13 5 views
1

Я следующий текст:выбрать все строки между одинарными кавычками с помощью Vim

select region_id, 'Males_Negative_Nil_income_Age_15_19_years' as category, Males_Negative_Nil_income_Age_15_19_years as number from income_mf_pivot 
union 
select region_id, 'Males_Negative_Nil_income_Age_20_24_years' as category, Males_Negative_Nil_income_Age_20_24_years as number from income_mf_pivot 
union 
select region_id, 'Males_Negative_Nil_income_Age_25_34_years' as category, Males_Negative_Nil_income_Age_25_34_years as number from income_mf_pivot 
union 
select region_id, 'Males_Negative_Nil_income_Age_35_44_years' as category, Males_Negative_Nil_income_Age_35_44_years as number from income_mf_pivot 

То, что я хотел бы закончить с (я полагаю, через выбор) является

Males_Negative_Nil_income_Age_15_19_years, 
Males_Negative_Nil_income_Age_20_24_years, 
Males_Negative_Nil_income_Age_25_34_years, 
Males_Negative_Nil_income_Age_35_44_years 

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

Я не являюсь чистом vim. Я не против, если это более чем одна команда. После этого я могу работать над всем документом.

ответ

2

The yi' команда позволяет вам выдернуть текст между одинарные кавычки, но это работает только для одного экземпляра за раз.

Пока ширина идентична (т.е. у Вас есть прямоугольное выделение), вы можете использовать покадрово режим визуального, начался с <C-v> (часто <C-q> на Windows).

Чтобы получить весь текст в одинарных кавычках, вы можете использовать мой ExtractMatches plugin. Он содержит следующую команду:

:%YankMatchesToReg /'\zs[^']\+\ze'/ 

После этого, вы можете просто p асты текст и добавьте хвостовые запятые. Если все совпадения должны быть в одной строке, g,p из моего UnconditionalPaste plugin может сделать это одним махом.

+1

Пока я не использовал ваш плагин напрямую, я нашел [vim-yankitute] (https://github.com/someboddy/vim-yankitute) через вашу страницу плагина, и я был более знаком с тем, как его установить , Регулярное выражение было таким же, хотя, что точно соответствовало тому, что я был после, спасибо очень. – kelso

2

Вы можете поместить курсор на первую M, а затем начать блок визуальный режим с CTRL-v, перейти на другой конец того, что вы хотите, чтобы дергать с 6je и дергать его с y. Это, конечно, дергает пустые строки, но их нужно легко избавиться от вставленного.

Другой способ, который бы также добавить запятые, чтобы использовать внешний фильтр, как sed:

:r!sed -n "s/.*'\(Males[^']*\).*/\1,/p" % 

Это приводит к

Males_Negative_Nil_income_Age_15_19_years, 
Males_Negative_Nil_income_Age_20_24_years, 
Males_Negative_Nil_income_Age_25_34_years, 
Males_Negative_Nil_income_Age_35_44_years, 
1

Чтобы выбрать

Males_Negative_Nil_income_Age_15_19_years 

из

select region_id, 'Males_Negative_Nil_income_Age_15_19_years' as category, Males_Negative_Nil_income_Age_15_19_years as number from income_mf_pivot 

Использование vi' (выберите внутренние одиночные кавычки)

ли :help object-select читать об этом

2

я буду считать, что есть точно две одиночные кавычки в каждой целевой строке, как в вашем пример текста.

Я бы выбрал нужные строки в визуальном режиме, затем введите режим Ex с :. Диапазон `'<,'> '(представляющий визуальный выбор) будет вставлен автоматически.Я хотел бы завершить, что

:'<,'>v/'.*'/d 

(удалить все строки, которые не содержат два ' символов), чтобы избавиться от „Союза“ линий. Затем гv: для повторного выбора визуального выделения, и завершить командную строку для

:'<,'>s/^[^']*'\|'.*//g 
:'<,'>-s/$/, 

или, может быть, вместо того, чтобы из этих двух команд,

:'<,'>s/.*'\(.*\)'.*/\1, 

, а затем удалить , из последней строки.

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