使用vim选择单引号之间的所有字符串

时间:2014-02-13 08:13:33

标签: 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一样,然后以某种方式猛拉它,但我已经没有用了。

我不是一个纯粹的纯粹主义者。我不介意它是不止一个命令。我在此之后可以在整个文档上运行。

4 个答案:

答案 0 :(得分:2)

您可以将光标放在第一个M上,然后使用CTRL-v开始阻止视觉模式,移动到您希望用6je拉出的另一端并用{{1}猛拉它}。 这确实会使空行线猛拉,但一旦粘贴它们就应该很容易摆脱。

另一种方式,也会附加逗号,就是使用像y这样的外部过滤器:

sed

这导致

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

答案 1 :(得分:2)

yi'命令允许您在单引号之间移动文本,但这仅适用于单个实例。

只要宽度相同(即你有一个矩形选择),就可以使用 blockwise visual mode ,以<C-v>开头(在Windows上经常是<C-q>

要获取单引号内的所有文字,您可以使用我的ExtractMatches plugin。它提供以下命令:

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

之后,您只需p即可查看文本并添加尾随逗号。如果所有匹配项都在一行中,则UnconditionalPaste plugin中的g,p可以一次性完成。

答案 2 :(得分:2)

我将假设每个目标行中只有两个单引号,如示例文本中那样。

我会在可视模式下选择所需的行,然后使用进入Ex模式。范围''&lt;,'&gt;' (代表视觉选择)将自动插入。我会把它完成到

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

(删除所有不包含两个'字符的行)以删除“union”行。然后 g v 重新选择Visual选择,并完成命令行

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

或者也许,而不是那两个命令,

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

然后从最后一行删除

答案 3 :(得分: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阅读相关内容