1

我有这段文字:

* configobj
* pymongo
* tornado
* pandas

并希望将其转换为:

configobj, pymongo, tornado, pandas

最有效的方法是什么?


补充:这是我自己想出的:

  1. cin configobjdo开始C-v e j j j y拉取文本块。
  2. 然后p把它放在我想要的地方。
  3. 然后走到configobj行尾
  4. 击中底部C-v_j j j
  5. A然后插入一个,并点击C-[
  6. C-v再次使用withx删除最后的空格并删除最后的逗号。

然后,意识到最后一个字母configobj被截断了,所以我必须回去补充。

编辑

我很抱歉没有指定这只是缓冲区的一部分,而不是整个缓冲区。

4

5 回答 5

5
  1. 直观地选择您的块。

  2. *用a替换后跟 a 的每个换行符,

    :'<,'>s/\n\*/,
    
  3. 删除第一个*<space>.

    xx
    
于 2013-10-24T13:37:30.990 回答
2

如果仅针对您问题中的示例,您可以一次性完成:

%s/^\*//|%join|s/ /, /g

如果该行有空格,上述 cmd 将不起作用。

您还可以考虑安装Join插件(https://github.com/sk1418/Join)并按:

%s/^\*//|%J ', '

如果行也有空间,这将适用于这种情况。

于 2013-10-24T13:19:14.847 回答
2

这是宏的一个不错的用例。

将光标放在第一个星上运行以下(^[Escape):

qqxxA,^[Jq3@qx

细分:

  • qq- 开始将宏记录到寄存器中q
  • xx- 删除*和空间
  • A,^[- 将 a 添加,到行尾并退出插入模式
  • J- 将下一行与当前行连接起来
  • q- 结束宏
  • 3@q- 运行宏 3 次
  • x- 删除尾随逗号

事后思考:如果您的列表元素以标点符号 ( ., ?, !) 结尾,那么 的行为J会受到该joinspaces选项的影响,因此在这些情况下,此宏可能会在元素之间留下额外的空格。有关:help 'joinspaces'更多信息,请参阅。

于 2013-10-24T13:34:05.167 回答
1

我会使用正则表达式:

%s/^\s*\*\s*//    -- remove stars
%s/$\n/, /        -- join
%s/, $//          -- remove the last trailing comma
于 2013-10-24T13:19:16.940 回答
1

我不知道这是否是最有效的方法,但它可以完成工作:

:execute "normal ggVGJ" | s/\v\s*\*\s*// | s/\s*\*\s*/, /g

它产生:

configobj, pymongo, tornado, pandas
于 2013-10-24T13:20:10.187 回答