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