检查VIM语法区域是否存在并删除

发布于 2025-02-07 19:45:41 字数 696 浏览 2 评论 0原文

背景

  • perl文件的语法突出显示有时对于大文件(1k+ lines)的有时非常慢。。。

  • 我使用:

    进行了介绍
:syntime on
"*** Do some slow actions ***
:syntime report
  • 有许多慢慢执行的区域,例如:perlstatementproc

  • i 通过删除一些缓慢执行的语法区域(还有更多):

    ,可以显着提高性能

:syntax clear perlStatementProc
  • 现在,我想在可能没有定义的特定区域的其他机器上使用这些改进,并在其他机器上进行这些改进。

我看到此错误打开VIM时:

E28: No such highlight group name: perlStatementProc

如何检查语法区域名称PerlstatementProc是否存在?

Background:

  • Syntax highlighting for perl files is extremely slow at times for large files (1k+ lines).

  • I profiled using:

:syntime on
"*** Do some slow actions ***
:syntime report
  • There were many slowly performaning regions, like: perlStatementProc

  • I significantly improved performance by removing some of the slowly performing syntax regions (there are more):

:syntax clear perlStatementProc
  • Now I want to use this vimrc with these improvements on a different machine which may not have a specific region defined.

I am seeing this ERROR when opening Vim:

E28: No such highlight group name: perlStatementProc

How can I check if the syntax region name perlStatementProc exists?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把昨日还给我 2025-02-14 19:45:41

我发现了有关hlexists的信息,并在我的vimrc中实现了此解决方案:

" Remove some syntax highlighting from large perl files.
function! RemovePerlSyntax()
    if line('
) > 1000
        let perl_syntaxes = [
             \ "perlStatementProc",
             \ "perlMatch",
             \ "perlStatementPword",
             \ "perlQR",
             \ "perlQW",
             \ "perlQQ",
             \ "perlQ",
             \ "perlStatementIndirObjWrap",
             \ "perlVarPlain",
             \ "perlVarPlain",
             \ "perlOperator",
             \ "perlStatementFiledesc",
             \ "perlStatementScalar",
             \ "perlStatementInclude",
             \ "perlStatementNumeric",
             \ "perlStatementSocket",
             \ "perlFloat",
             \ "perlFormat",
             \ "perlStatementMisc",
             \ "perlStatementFiles",
             \ "perlStatementList",
             \ "perlStatementIPC",
             \ "perlStatementNetwork",
             \ "perlStatementTime",
             \ "perlStatementIOfunc",
             \ "perlStatementFlow",
             \ "perlStatementControl",
             \ "perlHereDoc",
             \ "perlHereDocStart",
             \ "perlVarPlain2",
             \ "perlVarBlock",
             \ "perlVarBlock2",
             \ "perlDATA",
             \ "perlControl",
             \ "perlStatementHash",
             \ "perlStatementVector",
             \ "perlIndentedHereDoc",
             \ "perlLabel",
             \ "perlConditional",
             \ "perlRepeat",
             \ "perlNumber",
             \ "perlStatementRegexp",
        \ ]

        for perl_syntax in perl_syntaxes
            " NEW - Was missing this check before.
            if hlexists( perl_syntax )
                exec "syntax clear " . perl_syntax
            endif
        endfor

        let b:remove_perl_syntax = 1
    else
        let b:remove_perl_syntax = 0
    endif
endfunction
augroup remove_perl_syntax
   autocmd!
   autocmd BufNewFile,BufRead,BufReadPost,FileType perl call RemovePerlSyntax()
augroup END

I found out about hlexists and implemented this solution in my vimrc:

" Remove some syntax highlighting from large perl files.
function! RemovePerlSyntax()
    if line('
) > 1000
        let perl_syntaxes = [
             \ "perlStatementProc",
             \ "perlMatch",
             \ "perlStatementPword",
             \ "perlQR",
             \ "perlQW",
             \ "perlQQ",
             \ "perlQ",
             \ "perlStatementIndirObjWrap",
             \ "perlVarPlain",
             \ "perlVarPlain",
             \ "perlOperator",
             \ "perlStatementFiledesc",
             \ "perlStatementScalar",
             \ "perlStatementInclude",
             \ "perlStatementNumeric",
             \ "perlStatementSocket",
             \ "perlFloat",
             \ "perlFormat",
             \ "perlStatementMisc",
             \ "perlStatementFiles",
             \ "perlStatementList",
             \ "perlStatementIPC",
             \ "perlStatementNetwork",
             \ "perlStatementTime",
             \ "perlStatementIOfunc",
             \ "perlStatementFlow",
             \ "perlStatementControl",
             \ "perlHereDoc",
             \ "perlHereDocStart",
             \ "perlVarPlain2",
             \ "perlVarBlock",
             \ "perlVarBlock2",
             \ "perlDATA",
             \ "perlControl",
             \ "perlStatementHash",
             \ "perlStatementVector",
             \ "perlIndentedHereDoc",
             \ "perlLabel",
             \ "perlConditional",
             \ "perlRepeat",
             \ "perlNumber",
             \ "perlStatementRegexp",
        \ ]

        for perl_syntax in perl_syntaxes
            " NEW - Was missing this check before.
            if hlexists( perl_syntax )
                exec "syntax clear " . perl_syntax
            endif
        endfor

        let b:remove_perl_syntax = 1
    else
        let b:remove_perl_syntax = 0
    endif
endfunction
augroup remove_perl_syntax
   autocmd!
   autocmd BufNewFile,BufRead,BufReadPost,FileType perl call RemovePerlSyntax()
augroup END
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文