neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

perl.vim (4130B)


      1 " Vim filetype plugin file
      2 " Language:      Perl
      3 " Maintainer:    vim-perl <vim-perl@googlegroups.com> (need to be subscribed to post)
      4 " Homepage:      https://github.com/vim-perl/vim-perl
      5 " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
      6 " License:       Vim License (see :help license)
      7 " Last Change:   2021 Nov 10
      8 "                2023 Sep 07 by Vim Project (safety check: don't execute perl
      9 "                    from current directory)
     10 "                2024 Jan 14 by Vim Project (browsefilter)
     11 "                2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring')
     12 
     13 if exists("b:did_ftplugin") | finish | endif
     14 let b:did_ftplugin = 1
     15 
     16 " Make sure the continuation lines below do not cause problems in
     17 " compatibility mode.
     18 let s:save_cpo = &cpo
     19 set cpo-=C
     20 
     21 setlocal formatoptions-=t
     22 setlocal formatoptions+=crqol
     23 setlocal keywordprg=perldoc\ -f
     24 
     25 setlocal comments=:#
     26 setlocal commentstring=#\ %s
     27 
     28 " Provided by Ned Konz <ned at bike-nomad dot com>
     29 "---------------------------------------------
     30 setlocal include=\\<\\(use\\\|require\\)\\>
     31 " '+' is removed to support plugins in Catalyst or DBIx::Class
     32 " where the leading plus indicates a fully-qualified module name.
     33 setlocal includeexpr=substitute(substitute(substitute(substitute(v:fname,'+','',''),'::','/','g'),'->\*','',''),'$','.pm','')
     34 setlocal define=[^A-Za-z_]
     35 setlocal iskeyword+=:
     36 
     37 " The following line changes a global variable but is necessary to make
     38 " gf and similar commands work. Thanks to Andrew Pimlott for pointing
     39 " out the problem.
     40 let s:old_isfname = &isfname
     41 set isfname+=:
     42 let s:new_isfname = &isfname
     43 
     44 augroup perl_global_options
     45  au!
     46  exe "au BufEnter * if &filetype == 'perl' | let &isfname = '" . s:new_isfname . "' | endif"
     47  exe "au BufLeave * if &filetype == 'perl' | let &isfname = '" . s:old_isfname . "' | endif"
     48 augroup END
     49 
     50 " Undo the stuff we changed.
     51 let b:undo_ftplugin = "setlocal fo< kp< com< cms< inc< inex< def< isk<" .
     52      \               " | let &isfname = '" .  s:old_isfname . "'"
     53 
     54 if get(g:, 'perl_fold', 0)
     55  setlocal foldmethod=syntax
     56  let b:undo_ftplugin .= " | setlocal fdm<"
     57 endif
     58 
     59 " Set this once, globally.
     60 if !exists("perlpath")
     61    " safety check: don't execute perl binary by default
     62    if dist#vim#IsSafeExecutable('perl', 'perl')
     63      try
     64 if &shellxquote != '"'
     65     let perlpath = system('perl -e "print join(q/,/,@INC)"')
     66 else
     67     let perlpath = system("perl -e 'print join(q/,/,@INC)'")
     68 endif
     69 let perlpath = substitute(perlpath,',.$',',,','')
     70      catch /E145:/
     71 let perlpath = ".,,"
     72      endtry
     73    else
     74 " If we can't call perl to get its path, just default to using the
     75 " current directory and the directory of the current file.
     76 let perlpath = ".,,"
     77    endif
     78 endif
     79 
     80 " Append perlpath to the existing path value, if it is set.  Since we don't
     81 " use += to do it because of the commas in perlpath, we have to handle the
     82 " global / local settings, too.
     83 if &l:path == ""
     84    if &g:path == ""
     85        let &l:path=perlpath
     86    else
     87        let &l:path=&g:path.",".perlpath
     88    endif
     89 else
     90    let &l:path=&l:path.",".perlpath
     91 endif
     92 
     93 let b:undo_ftplugin .= " | setlocal pa<"
     94 "---------------------------------------------
     95 
     96 " Change the browse dialog to show mainly Perl-related files
     97 if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
     98    let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
     99 	       \ "Perl Modules (*.pm)\t*.pm\n" .
    100 	       \ "Perl Documentation Files (*.pod)\t*.pod\n"
    101    if has("win32")
    102 let b:browsefilter .= "All Files (*.*)\t*\n"
    103    else
    104 let b:browsefilter .= "All Files (*)\t*\n"
    105    endif
    106    let b:undo_ftplugin .= " | unlet! b:browsefilter"
    107 endif
    108 
    109 " Proper matching for matchit plugin
    110 if exists("loaded_matchit") && !exists("b:match_words")
    111    let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField'
    112    let b:match_words = '\<if\>:\<elsif\>:\<else\>'
    113    let b:undo_ftplugin .= " | unlet! b:match_words b:match_skip"
    114 endif
    115 
    116 " Restore the saved compatibility options.
    117 let &cpo = s:save_cpo
    118 unlet s:save_cpo s:old_isfname s:new_isfname