vim:删除除最后一行之外的所有单词

时间:2013-04-05 20:10:45

标签: vim replace

我无法想出一个vim find / replace来删除除最后一行之外的所有单词,即在一点SQL中,很好地生成一堆所有别名的列表代码

select 
column_a alias_a,
column_b alias_b,
column_c alias_c

from 
...

我想生成列表

alias_a, alias_b, alias_c

所以我想我想要删除所有未紧跟逗号和行结尾的单词

4 个答案:

答案 0 :(得分:7)

选项1

%s/\v.*\s(\S+)$/\1/

选项2 : 使用宏

qa$T d0jq

然后x@a x是您要应用此宏的行数

选项3

转向外部命令:

:%!awk '$0=$NF'

选项4 : 如果您有Align或类似的插件,请将这些行对齐,然后使用c-v块选择并删除,只需离开最后一列。

答案 1 :(得分:4)

这应该这样做:

:%s/.* \(.*\)\n/\1 /

答案 2 :(得分:3)

我愿意:

:%s/\v(.*\s)(\w\+)/\2/

这意味着抓住所有内容直到最后一个空间进入捕获组1,之后一切都进入捕获组2,并将其替换为捕获组2。

取代这个:

select 
column_a blah blah blah alias_a,
column_b foo foo foo alias_b,
column_c bar bar bar alias_c

from 

要:

select 
alias_a,
alias_b,
alias_c

from 

然后,您可以按Shift-J几次,将别名放入逗号分隔的行中。

答案 3 :(得分:0)

目视选择行然后执行以下

:norm $bd0
:*j

注意::norm将显示为:'<,'>

如需更多帮助,请参阅:

:h :norm
:h :j