我有这样的文字:
* configobj
* pymongo
* tornado
* pandas
并希望将其转换为:
configobj, pymongo, tornado, pandas
最有效的方法是什么?
加法:这就是我自己想出来的:
c
中的configobj
开始C-v e j j j y
来抓取文本块。p
将其放置在我想要的位置。configobj
行C-v
和j j j
到底部A
然后插入,
并点击C-[
C-v
和x
删除最终空格并删除最后一个逗号。然后,意识到configobj
的最后一个字母被切断了,所以我必须回过头来添加它。
修改:
我很抱歉没有指定这只是缓冲区的 part ,而不是整个缓冲区。
答案 0 :(得分:5)
直观地选择您的区块。
替换每个换行符后跟*
替换为,
:
:'<,'>s/\n\*/,
删除第一个*<space>
。
xx
答案 1 :(得分:2)
如果仅针对您问题中的示例,您可以一次性完成:
%s/^\*//|%join|s/ /, /g
如果该行有空格,则上述cmd将无效。
您还可以考虑安装Join
插件(https://github.com/sk1418/Join)并按:
%s/^\*//|%J ', '
如果行也有空格,这将适用于该情况。
答案 2 :(得分:2)
对于宏来说,这是一个不错的用例。
将光标放在第一颗星上,运行以下内容(^[
Escape ):
qqxxA,^[Jq3@qx
细分:
qq
- 开始将宏录制到注册表q
xx
- 删除*
和空格A,^[
- 在行尾添加,
并退出插入模式J
- 使用当前行加入下一行q
- 结束宏3@q
- 运行宏三次x
- 删除尾随逗号事后的想法:如果您的列表元素以标点符号(.
,?
,!
)结尾,则 J 的行为受{的影响{1}}选项,因此在这些情况下,此宏可能会在元素之间留下额外的空格。有关详细信息,请参阅joinspaces
。
答案 3 :(得分:1)
我会使用正则表达式:
%s/^\s*\*\s*// -- remove stars
%s/$\n/, / -- join
%s/, $// -- remove the last trailing comma
答案 4 :(得分:1)
我不知道这是否是最有效的方法,但它完成了工作:
:execute "normal ggVGJ" | s/\v\s*\*\s*// | s/\s*\*\s*/, /g
它产生:
configobj, pymongo, tornado, pandas