Vim:将列表拆分为新行

Vim: Splitting a list onto new lines

是否有可以更改的 Vim 命令(我猜是搜索和替换?):

listThing(["fish", "monkey", "cat", "penguin"])

进入:

listThing([
    "fish",
    "monkey",
    "cat",
    "penguin"
])

不仅仅是在逗号后添加换行符和制表符,因为首行和末行也需要分开。

不知道您的文件中还有什么可以匹配的简单方法是:

:1,$s/\("[^ ,]*"\|\])\)/\r    /g

哪个会让你:

listThing([
    "fish",
    "monkey",
    "cat",
    "penguin"
    ])

编辑: 如上所述,但我会再次强调:这对您的效果如何可能取决于您文件中的其他类似构造。其他选项是使用 Ingo 建议的插件,或者在 awkperl<insert-favorite-script-language-here>.

中编写单独的脚本

对于特定情况,@lurker 的回答提出的 :substitute 命令就足够了。不幸的是,对于许多编程语言,可能存在结构嵌套,并且很难正确处理所有这些。因此,对于稳健的 "don't make me think" 解决方案,我认为您需要一个插件。虽然我还没有尝试过,但 argwrap plugin 提供了这个。