作为清理php代码的一部分,我想在“{”和“}”周围添加换行符,但不要在带有单引号或双引号的字符串中找到新行。
执行此操作的vim命令是什么?
我做了
/[{}]
:%s//\r&/g
:%s//&\r/g
但是它为每个'{'和'}'提供了换行符,包括在字符串中出现的那些。
echo 'Hello{world}';
变为
echo 'Hello
{
world
}
';
我不想要。 请帮忙。
答案 0 :(得分:0)
也许有一个建议,如果没有发布vimscript(虽然我不能想到会在一次传递中执行此操作的正则表达式)是决定一些标记方案(我更喜欢3个哈希)并分阶段进行。
稍后我将使用正确的正则表达式回复(我熟悉的命令在我的windows gvim安装上运行得不好)
第1步:使用正则表达式搜索表单中的任何内容
.*["||'].*{.*}.*["||']
(即引号内的大括号)在匹配的行前加上你的标记
步骤2:现在使用正则表达式搜索符合以下内容的任何行:
^[^###]\+.*{.*}
(即任何带有大括号和不以标记开头的行)并放入你的回报
第3步:删除标记 p>
答案 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}