繁体   English   中英

如何使用 VIM 修复 perl 语法错误“缺少右花括号或方括号”?

[英]How do I fix the perl syntax error "missing right curly or square bracket" using VIM?

使用不匹配的数组大括号 ("[ ]") 或范围括号 ("{ }") 编译(或执行)perl 程序会导致“缺少右花括号或方括号”语法错误。 Perl 经常将源报告为您的最后一个代码行(“在 EOF”),这可能与实际缺失的部分相去甚远。

示例 perl 错误消息:

Missing right curly or square bracket at ./foo.pl line 100, at end of line
syntax error at ./foo.pl line 100, at EOF
Execution of ./foo.pl aborted due to compilation errors.

vi 或 Vi IMproved (VIM) 用户如何解决此错误消息? 我添加了一些 VIM 增强的答案。 请添加您自己的想法、实践或 vi 插件。

注意:使用 VIM 版本发布的原始问题没有突出显示 perl 大括号和方括号。 许多较新的版本都是这样做的; 有关更多信息,请参见vim.org

如何解决此错误:

  1. 在VIM中,选择一个开口{,[,或(符号。 %命令在匹配的{},[]和()对之间跳转。不匹配将跳转到意外的位置。

  2. 安装perltidy ,运行它,并寻找奇怪的缩进代码块。

如何防止未来的错误:

  1. StackOverflow问题719476显示如何修改大括号/括号的VIM大括号/括号语法着色。 (默认情况下,某些版本不会这样做。)

  2. Karl Guertin的AutoClose插件在输入时自动匹配[,(,{,“,''符号。

  3. perltidy脚本重新格式化perl以提高可读性,这可能会暴露不匹配的符号。

  4. 用户付费书呆子说:“使用perltidy VIM编辑器中的nmap 。”

    nmap \\g mt:%!perltidy<CR>'t

  5. 使用一致的{}匹配缩进(一般提示,不特定于此perl错误)。

sub foo {
...
}

要么

sub bar
{
...
}

您可以使用命令匹配vim中的大括号/括号/括号。 所以用它来搜索不匹配的字符。

我经常使用perltidy来重新格式化我的代码。 当我重新格式化缺少终结符的代码时,进一步的代码会奇怪地缩进,我可以快速向上追踪以找到问题。

额外 :我使用此映射立即重新格式化文件,而不是丢失光标位置:

nmap \g mt:%!perltidy<CR>'t

使用padre。 单击Perl-> Find Unmatched Brace。 它会将光标向右移动到问题所在。

我带着同样的问题来到这个页面。 使用perltidy和vim没有任何帮助,perltidy后缩进看起来很好。 出于某种原因,我在'sub'关键字之前有一个额外的开放式大括号。 Padre一键式解决了这个问题。

http://padre.perlide.org/

使用语法高亮,vim几乎总能得到这个,并且有一个非常复杂的perl语法高亮方案。

:syntax on

如果你没有看到任何缺失的大括号:
with can help to fix this issue if the file created in windows and trying to use in Linux. 如果在Windows中创建文件并尝试在Linux中使用,则用替换可以帮助解决此问题。

听起来你可能在谈论教学情况,在这种情况下,教学良好的缩进将解决大多数这些问题。

但是,有时我在服务器上没有像vim和perltidy那样的细节,我使用quick'n'dirty技术来查找语法错误 - 只需在代码中的不同点添加右卷曲,直到行号更改为止,这是你的麻烦点。

我在脚本中得到了这个错误,似乎有完美匹配的大括号和括号...除了我使用了bash风格的语法,它实际上注释掉了一行的后半部分(使用大括号对的后半部分) 。

当我更改此行时,错误消失了:

$data_len="${#insert_data}";

对此:

$data_len=length($insert_data);

使用正则表达式缩小违规代码的范围。 使用shell, pcregrep的示例

cat index.pl |pcregrep '[\{]{1}[\w\W^}^{]{90,}'

在期望结束支撑之前根据需要改变90以限制块长度。

作为@Ether 和@Matthew Glidden 的简单重新陈述和组合:

像这样显示的意图(这样的vi command like this

  1. 转到文件顶部( 1G
  2. 搜索括号( /[[({]然后按 "Enter" )
    • 那是“斜线”“开口方括号”“开口方括号”“开口圆括号”“开口花括号”“闭合方括号”
    • 作为一个正则表达式,我们正在寻找一个全是左大括号的自定义字符类。
  3. 查找结束匹配括号 ( % )
  4. 再次查找起始括号( %
  5. 查找下一个左括号 ( n )
  6. 从 3 开始重复,直到您检查了文件中的所有括号。

早在 HP-UX 11.11(如 ~2001)上的 vi 就可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM