2

作为清理 php 代码的一部分,我想在 '{' 和 '}' 周围放置换行符,而不是在带有单引号或双引号的字符串中找到的换行符。

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

我做了

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

但它会在每个 '{' 和 '}' 周围给出换行符,包括那些出现在字符串中的换行符。

echo 'Hello{world}';

变成

echo 'Hello
{
world
}
';

我不想要。请帮忙。

4

2 回答 2

0

这是一个 2 遍解决方案,它还将涵盖单行注释匹配。

第一次通过

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

第一部分:

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

: 省略单注释并包含“{”原子的行

第二部分:

\('\)\@<!{ 

忽略该字符前面的所有{匹配项。'

第三方:

\r{\r/g

用换行符将“{”括起来

第二遍

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

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

解决方案不包括注释在代码行内的情况,即

$('{improper}').count(function(){var string="lestring"}); //{is not ommited}
于 2013-08-31T09:57:06.083 回答
0

一个建议可能是在不发布 vimscript 的情况下(尽管我想不出一个可以一次性完成此操作的正则表达式)是决定一些标记方案(我更喜欢 3 个哈希)并分阶段进行。

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

第 1 步:使用搜索任何形式的正则表达式

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

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

第 2 步:现在使用正则表达式搜索与以下内容匹配的任何行:

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

(即任何带有大括号和不以标记开头的行)并放入您的退货

第三步:删除标记

于 2013-08-30T23:39:16.523 回答