Vi弄乱了我的perl脚本!
虽然代码末尾的{
与结束的大括号不匹配,但第27和28行末尾的{
匹配30的相同}
。
以下是Vi如何处理我的脚本行为的屏幕视频。
mini-screencast demonstrating the issue http://www.abbasinasab.com/data/uploads/sc-4.gif
这也是我的麻烦制造者代码:
#CODE
while ($data =~ m{
^foo_\s+ $X \s* \{
( (?: [^{}]+ | \{(?1)\} )* )
\}
}mgx)
{
my $Y = $1;
next if $Y !~ m{
bar_$Z \s* \{
( (?: [^{}]+ | \{(?1)\} )*? )
\}
}mx;
my $DO = $1;
#CODE
}
我的问题是:
答案 0 :(得分:4)
Vim中有两个功能可以被复杂的语法所欺骗:
'matchpairs'
突出显示和跳转使用内部启发式。这可能会受到轻微影响(cp。:help cpo-M
)::set cpo+=M
这样,%
正确跳转到预期的右括号(除非你有像 matchpairs.vim 这样的插件覆盖%
命令)。另请注意,'cpoptions'
设置是全局设置,因此可能会对其他文件类型产生负面影响。
一般情况下,我会避免重写代码,以便编辑器满意。其他人可能会使用不同的编辑器,很快代码就会被各种类似的"变通办法"大大扭曲。唯一的例外是当代码明显复杂和繁琐时,一般的可读性会从重组中得到改善。