我有这样的文字:
* configobj
* pymongo
* tornado
* pandas
并希望将其转换为:
configobj, pymongo, tornado, pandas
最有效的方法是什么?
补充:这是我自己想出来的:
- 从
configobj
c
开始,C-v e j j j y
拉动文本块。 - 然后
p
把它放在我想要的地方。 - 然后转到
configobj
行的末尾 - 击中
C-v
并j j j
到底部 -
A
然后插入,
并点击C-[
- 再次使用
C-v
和x
删除最后的空格并删除最后的逗号。
然后,意识到configobj
的最后一个字母被切断了,所以我必须回去添加它。
编辑:
我很抱歉没有指定这只是缓冲区的一部分,而不是整个缓冲区。
-
直观地选择您的块。
-
将后跟
*
的每个换行符替换为,
::'<,'>s/n*/,
-
删除第一个
*<space>
。xx
如果只是为了你问题中的例子,你可以一次性完成:
%s/^*//|%join|s/ /, /g
如果行有空格,则上述cmd将不起作用。
您也可以考虑安装Join
插件(https://github.com/sk1418/Join),然后按:
%s/^*//|%J ', '
如果行也有空间,这将适用于这种情况。
对于宏来说,这是一个不错的用例。
将光标放在第一颗星星上,运行以下内容(^[
为转义):
qqxxA,^[Jq3@qx
细分:
-
qq
- 开始将宏录制到寄存器q
-
xx
- 删除*
和空格 -
A,^[
- 将,
追加到行尾并退出插入模式 -
J
- 将下一行与当前行连接
起来 -
q
- 结束宏 -
3@q
- 运行宏三次 -
x
- 删除尾随逗号
事后的想法:如果你的列表元素以标点符号(.
、?
、!
)结尾,那么J的行为会受到joinspaces
选项的影响,所以在这些情况下,这个宏可能会在元素之间留下额外的空格。 有关详细信息,请参阅:help 'joinspaces'
。
这是否是最有效的方法,但它可以完成工作:
:execute "normal ggVGJ" | s/vs**s*// | s/s**s*/, /g
它产生:
configobj, pymongo, tornado, pandas
我会使用正则表达式:
%s/^s**s*// -- remove stars
%s/$n/, / -- join
%s/, $// -- remove the last trailing comma