作为清理 php 代码的一部分,我想在 '{' 和 '}' 周围放置换行符,而不是在带有单引号或双引号的字符串中找到的换行符。
执行此操作的 vim 命令是什么?
我做了
/[{}]
:%s//\r&/g
:%s//&\r/g
但它会在每个 '{' 和 '}' 周围给出换行符,包括那些出现在字符串中的换行符。
echo 'Hello{world}';
变成
echo 'Hello
{
world
}
';
我不想要。请帮忙。
这是一个 2 遍解决方案,它还将涵盖单行注释匹配。
第一次通过
g/\(\/\/.*\)\@<!{/s/\('\)\@<!{/\r{\r/g
第一部分:
\(\/\/.*\)\@<!{
: 省略单注释并包含“{”原子的行
第二部分:
\('\)\@<!{
忽略该字符前面的所有{
匹配项。'
第三方:
\r{\r/g
用换行符将“{”括起来
第二遍
g/\(\/\/.*\)\@<!}/s/}\('\)\@!/\r}\r/g
与第一次传递功能的唯一区别是我们匹配任何 }
未跟随的 '
此解决方案不包括注释在代码行内的情况,即
$('{improper}').count(function(){var string="lestring"}); //{is not ommited}
一个建议可能是在不发布 vimscript 的情况下(尽管我想不出一个可以一次性完成此操作的正则表达式)是决定一些标记方案(我更喜欢 3 个哈希)并分阶段进行。
我稍后会用正确的正则表达式回来(我熟悉的命令在我的 windows gvim 安装上运行得不太好)
第 1 步:使用搜索任何形式的正则表达式
.*["||'].*{.*}.*["||']
(即引号内的大括号)在您的标记前添加匹配的行
第 2 步:现在使用正则表达式搜索与以下内容匹配的任何行:
^[^###]\+.*{.*}
(即任何带有大括号和不以标记开头的行)并放入您的退货
第三步:删除标记