如何使用VIM修复perl语法错误"缺少右侧卷曲或方括号"?

Mat*_*den 4 vim perl syntax-error

使用不匹配的数组括号("[]")或范围括号("{}")编译(或执行)perl程序会导致"缺少右侧卷曲或方括号"语法错误.Perl经常将源代码报告为您的最后一个代码行("at 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.
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*den 13

如何解决此错误:

  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 {
...
}
Run Code Online (Sandbox Code Playgroud)

要么

sub bar
{
...
}
Run Code Online (Sandbox Code Playgroud)


Eth*_*her 9

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


a p*_*erd 5

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

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

nmap \g mt:%!perltidy<CR>'t
Run Code Online (Sandbox Code Playgroud)