我有以下文字:
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 这样的东西(使用它来选择两个 ' 之间的所有内容),然后以某种方式拉动它,但我已经失去了动力。
我不是一个纯粹主义者。 我不介意它是否不止一个命令。 我追求的是能够在整个文档上运行。
yi'
命令允许您在单引号之间拉动文本,但这一次仅适用于单个实例。
只要宽度相同(即您有一个矩形选择),您就可以使用块视觉模式,从<C-v>
开始(通常在 Windows 上<C-q>
)。
要获取单引号内的所有文本,您可以使用我的 ExtractMatches 插件。它提供以下命令:
:%YankMatchesToReg /'zs[^']+ze'/
之后,您只需p
文本并添加尾随逗号即可。如果所有匹配项都应该在一行中,那么我的 UnconditionalPaste 插件中的g,p
可以一举完成。
您可以将光标放在第一个 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,
我假设每个目标行中正好有两个单引号,就像您的示例文本一样。
我会在可视模式下选择所需的行,然后使用 : 进入 Ex 模式。 将自动插入范围"<",">"(代表视觉对象选择)。 我会完成它
:'<,'>v/'.*'/d
(删除所有不包含两个 ' 字符的行)以删除"联合"行。 然后 gv: 重新选择视觉对象选择,并完成命令行
:'<,'>s/^[^']*'|'.*//g
:'<,'>-s/$/,
或者,也许,而不是这两个命令,
:'<,'>s/.*'(.*)'.*/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
阅读它吗