我有一个带空格的短语列表:
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"
有没有办法在每个带下划线的逗号之前替换所有空格?作为上述正则表达式的修改还是作为第二个命令?
答案 0 :(得分:4)
假设原始数据中永远不会有逗号,您应该能够使用以下内容:
:%s/.*/\L\0\E,"\0"/ | %s/ \([^,]*,\)\@=/_/g
这只是在您当前替换逗号之前的所有空格之后再进行另一次替换(使用正向前瞻)。
答案 1 :(得分:1)
:g/./let @s='"'.getline('.').'"'|s/ /_/g|exec "norm! guuA,\<ESC>\"sp"
如果我这样做,我可以用宏来做。
答案 2 :(得分:0)
您可以尝试使用替换部分中的表达式,例如:
:%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"
答案 3 :(得分:0)
从你离开的地方开始,我会在逗号之后拆分所有行:
:%s/,/,\r/
然后你可以用逗号替换行上的空格并将你的行重新加入:
:g/,/:s/ /_/g|j!