繁体   English   中英

Vim:我怎样才能在每一行的一部分上搜索和替换?

[英]Vim: How can I search and replace on just part of each line?

我有一个带空格的短语列表:

Part One
Part Two
Parts Three And Four

我想使用Vim处理列表来产生这个:

part_one,"Part One"
part_two,"Part Two"
parts_three_and_four,"Parts Three And Four"

我可以使用这个正则表达式:

:%s/.*/\L\0\E,"\0"/

让我这个,这非常接近:

part one,"Part One"
part two,"Part Two"
parts three and four,"Parts Three And Four"

是否有任何方法可以在每个带有下划线的逗号之前替换所有空格? 作为上述正则表达式的修改还是作为第二个命令?

假设原始数据中永远不会有逗号,您应该能够使用以下内容:

:%s/.*/\L\0\E,"\0"/ | %s/ \([^,]*,\)\@=/_/g

这只是在您当前的替换之后再替换逗号之前的所有空格(使用正向前瞻)。

:g/./let @s='"'.getline('.').'"'|s/ /_/g|exec "norm! guuA,\<ESC>\"sp"

如果我这样做,我可以用宏来做。

您可以尝试使用替换部件中的表达式,例如:

:%s/\v^.*$/\=tolower(substitute(submatch(0), "\\s\\+", "_", "g")) . ",\"" . submatch(0) . "\""/

它首先用_替换所有空格,返回的字符串是小写的。 然后它将结果与用双引号括起的匹配行连接起来。

它产生:

part_one,"Part One"
part_two,"Part Two"
parts_three_and_four,"Parts Three And Four"

从你离开的地方,我会在逗号之后拆分所有行:

:%s/,/,\r/

然后你可以用逗号替换行上的空格并将你的行重新加入:

:g/,/:s/ /_/g|j!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM