Vim:在'{'和'}'周围添加换行符,但不要用单引号或双引号括起来

时间:2013-08-29 08:05:02

标签: php vim

作为清理php代码的一部分,我想在“{”和“}”周围添加换行符,但不要在带有单引号或双引号的字符串中找到新行。

执行此操作的vim命令是什么?

我做了

/[{}]
:%s//\r&/g
:%s//&\r/g

但是它为每个'{'和'}'提供了换行符,包括在字符串中出现的那些。

echo 'Hello{world}';

变为

echo 'Hello
{
world
}
';

我不想要。 请帮忙。

2 个答案:

答案 0 :(得分:0)

也许有一个建议,如果没有发布vimscript(虽然我不能想到会在一次传递中执行此操作的正则表达式)是决定一些标记方案(我更喜欢3个哈希)并分阶段进行。

稍后我将使用正确的正则表达式回复(我熟悉的命令在我的windows gvim安装上运行得不好)

第1步:使用正则表达式搜索表单中的任何内容

.*["||'].*{.*}.*["||'] 

(即引号内的大括号)在匹配的行前加上你的标记

步骤2:现在使用正则表达式搜索符合以下内容的任何行:

^[^###]\+.*{.*} 

(即任何带有大括号和不以标记开头的行)并放入你的回报

第3步:删除标记

答案 1 :(得分:0)

这是一个2遍解决方案,也将涵盖单行评论匹配。

第一遍

 g/\(\/\/.*\)\@<!{/s/\('\)\@<!{/\r{\r/g 

第一部分:

\(\/\/.*\)\@<!{ 

:省略单个注释的行并包含'{'atom

第二部分:

\('\)\@<!{ 

取消所有以{字符开头的'个匹配。

第三部分:

\r{\r/g

用新行字符包含'{'

第二次传递

    g/\(\/\/.*\)\@<!}/s/}\('\)\@!/\r}\r/g

与第一次传递功能的唯一区别在于我们匹配任何 } 未跟随 '

解决方案不包括评论在代码行中的情况,即

$('{improper}').count(function(){var string="lestring"}); //{is not ommited}