我无法想出一个vim find / replace来删除除最后一行之外的所有单词,即在一点SQL中,很好地生成一堆所有别名的列表代码
select
column_a alias_a,
column_b alias_b,
column_c alias_c
from
...
我想生成列表
alias_a, alias_b, alias_c
所以我想我想要删除所有未紧跟逗号和行结尾的单词
答案 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