1" Vim support file to detect file types 2" 3" Maintainer: Bram Moolenaar <[email protected]> 4" Last Change: 2013 Nov 13 5 6" Listen very carefully, I will say this only once 7if exists("did_load_filetypes") 8 finish 9endif 10let did_load_filetypes = 1 11 12" Line continuation is used here, remove 'C' from 'cpoptions' 13let s:cpo_save = &cpo 14set cpo&vim 15 16augroup filetypedetect 17 18" Ignored extensions 19if exists("*fnameescape") 20au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.dpkg-new,?\+.dpkg-bak,?\+.rpmsave,?\+.rpmnew 21 \ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) 22au BufNewFile,BufRead *~ 23 \ let s:name = expand("<afile>") | 24 \ let s:short = substitute(s:name, '\~$', '', '') | 25 \ if s:name != s:short && s:short != "" | 26 \ exe "doau filetypedetect BufRead " . fnameescape(s:short) | 27 \ endif | 28 \ unlet! s:name s:short 29au BufNewFile,BufRead ?\+.in 30 \ if expand("<afile>:t") != "configure.in" | 31 \ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) | 32 \ endif 33elseif &verbose > 0 34 echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()" 35endif 36 37" Pattern used to match file names which should not be inspected. 38" Currently finds compressed files. 39if !exists("g:ft_ignore_pat") 40 let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$' 41endif 42 43" Function used for patterns that end in a star: don't set the filetype if the 44" file name matches ft_ignore_pat. 45func! s:StarSetf(ft) 46 if expand("<amatch>") !~ g:ft_ignore_pat 47 exe 'setf ' . a:ft 48 endif 49endfunc 50 51" Abaqus or Trasys 52au BufNewFile,BufRead *.inp call s:Check_inp() 53 54func! s:Check_inp() 55 if getline(1) =~ '^\*' 56 setf abaqus 57 else 58 let n = 1 59 if line("$") > 500 60 let nmax = 500 61 else 62 let nmax = line("$") 63 endif 64 while n <= nmax 65 if getline(n) =~? "^header surface data" 66 setf trasys 67 break 68 endif 69 let n = n + 1 70 endwhile 71 endif 72endfunc 73 74" A-A-P recipe 75au BufNewFile,BufRead *.aap setf aap 76 77" A2ps printing utility 78au BufNewFile,BufRead */etc/a2ps.cfg,*/etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps 79 80" ABAB/4 81au BufNewFile,BufRead *.abap setf abap 82 83" ABC music notation 84au BufNewFile,BufRead *.abc setf abc 85 86" ABEL 87au BufNewFile,BufRead *.abl setf abel 88 89" AceDB 90au BufNewFile,BufRead *.wrm setf acedb 91 92" Ada (83, 9X, 95) 93au BufNewFile,BufRead *.adb,*.ads,*.ada setf ada 94if has("vms") 95 au BufNewFile,BufRead *.gpr,*.ada_m,*.adc setf ada 96else 97 au BufNewFile,BufRead *.gpr setf ada 98endif 99 100" AHDL 101au BufNewFile,BufRead *.tdf setf ahdl 102 103" AMPL 104au BufNewFile,BufRead *.run setf ampl 105 106" Ant 107au BufNewFile,BufRead build.xml setf ant 108 109" Apache style config file 110au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle') 111 112" Apache config file 113au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf setf apache 114 115" XA65 MOS6510 cross assembler 116au BufNewFile,BufRead *.a65 setf a65 117 118" Applescript 119au BufNewFile,BufRead *.scpt setf applescript 120 121" Applix ELF 122au BufNewFile,BufRead *.am 123 \ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif 124 125" ALSA configuration 126au BufNewFile,BufRead .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf setf alsaconf 127 128" Arc Macro Language 129au BufNewFile,BufRead *.aml setf aml 130 131" APT config file 132au BufNewFile,BufRead apt.conf setf aptconf 133au BufNewFile,BufRead */.aptitude/config setf aptconf 134au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} setf aptconf 135 136" Arch Inventory file 137au BufNewFile,BufRead .arch-inventory,=tagging-method setf arch 138 139" ART*Enterprise (formerly ART-IM) 140au BufNewFile,BufRead *.art setf art 141 142" AsciiDoc 143au BufNewFile,BufRead *.asciidoc setf asciidoc 144 145" ASN.1 146au BufNewFile,BufRead *.asn,*.asn1 setf asn 147 148" Active Server Pages (with Visual Basic Script) 149au BufNewFile,BufRead *.asa 150 \ if exists("g:filetype_asa") | 151 \ exe "setf " . g:filetype_asa | 152 \ else | 153 \ setf aspvbs | 154 \ endif 155 156" Active Server Pages (with Perl or Visual Basic Script) 157au BufNewFile,BufRead *.asp 158 \ if exists("g:filetype_asp") | 159 \ exe "setf " . g:filetype_asp | 160 \ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" | 161 \ setf aspperl | 162 \ else | 163 \ setf aspvbs | 164 \ endif 165 166" Grub (must be before catch *.lst) 167au BufNewFile,BufRead */boot/grub/menu.lst,*/boot/grub/grub.conf,*/etc/grub.conf setf grub 168 169" Assembly (all kinds) 170" *.lst is not pure assembly, it has two extra columns (address, byte codes) 171au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call s:FTasm() 172 173" This function checks for the kind of assembly that is wanted by the user, or 174" can be detected from the first five lines of the file. 175func! s:FTasm() 176 " make sure b:asmsyntax exists 177 if !exists("b:asmsyntax") 178 let b:asmsyntax = "" 179 endif 180 181 if b:asmsyntax == "" 182 call s:FTasmsyntax() 183 endif 184 185 " if b:asmsyntax still isn't set, default to asmsyntax or GNU 186 if b:asmsyntax == "" 187 if exists("g:asmsyntax") 188 let b:asmsyntax = g:asmsyntax 189 else 190 let b:asmsyntax = "asm" 191 endif 192 endif 193 194 exe "setf " . fnameescape(b:asmsyntax) 195endfunc 196 197func! s:FTasmsyntax() 198 " see if file contains any asmsyntax=foo overrides. If so, change 199 " b:asmsyntax appropriately 200 let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4). 201 \" ".getline(5)." " 202 let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s') 203 if match != '' 204 let b:asmsyntax = match 205 elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library')) 206 let b:asmsyntax = "vmasm" 207 endif 208endfunc 209 210" Macro (VAX) 211au BufNewFile,BufRead *.mar setf vmasm 212 213" Atlas 214au BufNewFile,BufRead *.atl,*.as setf atlas 215 216" Autoit v3 217au BufNewFile,BufRead *.au3 setf autoit 218 219" Autohotkey 220au BufNewFile,BufRead *.ahk setf autohotkey 221 222" Automake 223au BufNewFile,BufRead [mM]akefile.am,GNUmakefile.am setf automake 224 225" Autotest .at files are actually m4 226au BufNewFile,BufRead *.at setf m4 227 228" Avenue 229au BufNewFile,BufRead *.ave setf ave 230 231" Awk 232au BufNewFile,BufRead *.awk setf awk 233 234" B 235au BufNewFile,BufRead *.mch,*.ref,*.imp setf b 236 237" BASIC or Visual Basic 238au BufNewFile,BufRead *.bas call s:FTVB("basic") 239 240" Check if one of the first five lines contains "VB_Name". In that case it is 241" probably a Visual Basic file. Otherwise it's assumed to be "alt" filetype. 242func! s:FTVB(alt) 243 if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)' 244 setf vb 245 else 246 exe "setf " . a:alt 247 endif 248endfunc 249 250" Visual Basic Script (close to Visual Basic) or Visual Basic .NET 251au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl setf vb 252 253" IBasic file (similar to QBasic) 254au BufNewFile,BufRead *.iba,*.ibi setf ibasic 255 256" FreeBasic file (similar to QBasic) 257au BufNewFile,BufRead *.fb,*.bi setf freebasic 258 259" Batch file for MSDOS. 260au BufNewFile,BufRead *.bat,*.sys setf dosbatch 261" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd. 262au BufNewFile,BufRead *.cmd 263 \ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif 264 265" Batch file for 4DOS 266au BufNewFile,BufRead *.btm call s:FTbtm() 267func! s:FTbtm() 268 if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm 269 setf dosbatch 270 else 271 setf btm 272 endif 273endfunc 274 275" BC calculator 276au BufNewFile,BufRead *.bc setf bc 277 278" BDF font 279au BufNewFile,BufRead *.bdf setf bdf 280 281" BibTeX bibliography database file 282au BufNewFile,BufRead *.bib setf bib 283 284" BibTeX Bibliography Style 285au BufNewFile,BufRead *.bst setf bst 286 287" BIND configuration 288au BufNewFile,BufRead named.conf,rndc.conf setf named 289 290" BIND zone 291au BufNewFile,BufRead named.root setf bindzone 292au BufNewFile,BufRead *.db call s:BindzoneCheck('') 293 294func! s:BindzoneCheck(default) 295 if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA' 296 setf bindzone 297 elseif a:default != '' 298 exe 'setf ' . a:default 299 endif 300endfunc 301 302" Blank 303au BufNewFile,BufRead *.bl setf blank 304 305" Blkid cache file 306au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old setf xml 307 308" C or lpc 309au BufNewFile,BufRead *.c call s:FTlpc() 310 311func! s:FTlpc() 312 if exists("g:lpc_syntax_for_c") 313 let lnum = 1 314 while lnum <= 12 315 if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)' 316 setf lpc 317 return 318 endif 319 let lnum = lnum + 1 320 endwhile 321 endif 322 setf c 323endfunc 324 325" Calendar 326au BufNewFile,BufRead calendar setf calendar 327 328" C# 329au BufNewFile,BufRead *.cs setf cs 330 331" CSDL 332au BufNewFile,BufRead *.csdl setf csdl 333 334" Cabal 335au BufNewFile,BufRead *.cabal setf cabal 336 337" Cdrdao TOC 338au BufNewFile,BufRead *.toc setf cdrtoc 339 340" Cdrdao config 341au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao setf cdrdaoconf 342 343" Cfengine 344au BufNewFile,BufRead cfengine.conf setf cfengine 345 346" ChaiScript 347au BufRead,BufNewFile *.chai setf chaiscript 348 349" Comshare Dimension Definition Language 350au BufNewFile,BufRead *.cdl setf cdl 351 352" Conary Recipe 353au BufNewFile,BufRead *.recipe setf conaryrecipe 354 355" Controllable Regex Mutilator 356au BufNewFile,BufRead *.crm setf crm 357 358" Cyn++ 359au BufNewFile,BufRead *.cyn setf cynpp 360 361" Cynlib 362" .cc and .cpp files can be C++ or Cynlib. 363au BufNewFile,BufRead *.cc 364 \ if exists("cynlib_syntax_for_cc")|setf cynlib|else|setf cpp|endif 365au BufNewFile,BufRead *.cpp 366 \ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif 367 368" C++ 369au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp 370if has("fname_case") 371 au BufNewFile,BufRead *.C,*.H setf cpp 372endif 373 374" .h files can be C, Ch C++, ObjC or ObjC++. 375" Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is 376" detected automatically. 377au BufNewFile,BufRead *.h call s:FTheader() 378 379func! s:FTheader() 380 if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1 381 if exists("g:c_syntax_for_h") 382 setf objc 383 else 384 setf objcpp 385 endif 386 elseif exists("g:c_syntax_for_h") 387 setf c 388 elseif exists("g:ch_syntax_for_h") 389 setf ch 390 else 391 setf cpp 392 endif 393endfunc 394 395" Ch (CHscript) 396au BufNewFile,BufRead *.chf setf ch 397 398" TLH files are C++ headers generated by Visual C++'s #import from typelibs 399au BufNewFile,BufRead *.tlh setf cpp 400 401" Cascading Style Sheets 402au BufNewFile,BufRead *.css setf css 403 404" Century Term Command Scripts (*.cmd too) 405au BufNewFile,BufRead *.con setf cterm 406 407" Changelog 408au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch 409 \ setf debchangelog 410 411au BufNewFile,BufRead [cC]hange[lL]og 412 \ if getline(1) =~ '; urgency=' 413 \| setf debchangelog 414 \| else 415 \| setf changelog 416 \| endif 417 418au BufNewFile,BufRead NEWS 419 \ if getline(1) =~ '; urgency=' 420 \| setf debchangelog 421 \| endif 422 423" CHILL 424au BufNewFile,BufRead *..ch setf chill 425 426" Changes for WEB and CWEB or CHILL 427au BufNewFile,BufRead *.ch call s:FTchange() 428 429" This function checks if one of the first ten lines start with a '@'. In 430" that case it is probably a change file. 431" If the first line starts with # or ! it's probably a ch file. 432" If a line has "main", "include", "//" ir "/*" it's probably ch. 433" Otherwise CHILL is assumed. 434func! s:FTchange() 435 let lnum = 1 436 while lnum <= 10 437 if getline(lnum)[0] == '@' 438 setf change 439 return 440 endif 441 if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!') 442 setf ch 443 return 444 endif 445 if getline(lnum) =~ "MODULE" 446 setf chill 447 return 448 endif 449 if getline(lnum) =~ 'main\s*(\|#\s*include\|//' 450 setf ch 451 return 452 endif 453 let lnum = lnum + 1 454 endwhile 455 setf chill 456endfunc 457 458" ChordPro 459au BufNewFile,BufRead *.chopro,*.crd,*.cho,*.crdpro,*.chordpro setf chordpro 460 461" Clean 462au BufNewFile,BufRead *.dcl,*.icl setf clean 463 464" Clever 465au BufNewFile,BufRead *.eni setf cl 466 467" Clever or dtd 468au BufNewFile,BufRead *.ent call s:FTent() 469 470func! s:FTent() 471 " This function checks for valid cl syntax in the first five lines. 472 " Look for either an opening comment, '#', or a block start, '{". 473 " If not found, assume SGML. 474 let lnum = 1 475 while lnum < 6 476 let line = getline(lnum) 477 if line =~ '^\s*[#{]' 478 setf cl 479 return 480 elseif line !~ '^\s*$' 481 " Not a blank line, not a comment, and not a block start, 482 " so doesn't look like valid cl code. 483 break 484 endif 485 let lnum = lnum + 1 486 endw 487 setf dtd 488endfunc 489 490" Clipper (or FoxPro; could also be eviews) 491au BufNewFile,BufRead *.prg 492 \ if exists("g:filetype_prg") | 493 \ exe "setf " . g:filetype_prg | 494 \ else | 495 \ setf clipper | 496 \ endif 497 498" Clojure 499au BufNewFile,BufRead *.clj,*.cljs setf clojure 500 501" Cmake 502au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in setf cmake 503 504" Cmusrc 505au BufNewFile,BufRead */.cmus/{autosave,rc,command-history,*.theme} setf cmusrc 506au BufNewFile,BufRead */cmus/{rc,*.theme} setf cmusrc 507 508" Cobol 509au BufNewFile,BufRead *.cbl,*.cob,*.lib setf cobol 510" cobol or zope form controller python script? (heuristic) 511au BufNewFile,BufRead *.cpy 512 \ if getline(1) =~ '^##' | 513 \ setf python | 514 \ else | 515 \ setf cobol | 516 \ endif 517 518" Coco/R 519au BufNewFile,BufRead *.atg setf coco 520 521" Cold Fusion 522au BufNewFile,BufRead *.cfm,*.cfi,*.cfc setf cf 523 524" Configure scripts 525au BufNewFile,BufRead configure.in,configure.ac setf config 526 527" CUDA Cumpute Unified Device Architecture 528au BufNewFile,BufRead *.cu setf cuda 529 530" WildPackets EtherPeek Decoder 531au BufNewFile,BufRead *.dcd setf dcd 532 533" Enlightenment configuration files 534au BufNewFile,BufRead *enlightenment/*.cfg setf c 535 536" Eterm 537au BufNewFile,BufRead *Eterm/*.cfg setf eterm 538 539" Lynx config files 540au BufNewFile,BufRead lynx.cfg setf lynx 541 542" Quake 543au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg setf quake 544au BufNewFile,BufRead *quake[1-3]/*.cfg setf quake 545 546" Quake C 547au BufNewFile,BufRead *.qc setf c 548 549" Configure files 550au BufNewFile,BufRead *.cfg setf cfg 551 552" Cucumber 553au BufNewFile,BufRead *.feature setf cucumber 554 555" Communicating Sequential Processes 556au BufNewFile,BufRead *.csp,*.fdr setf csp 557 558" CUPL logic description and simulation 559au BufNewFile,BufRead *.pld setf cupl 560au BufNewFile,BufRead *.si setf cuplsim 561 562" Debian Control 563au BufNewFile,BufRead */debian/control setf debcontrol 564au BufNewFile,BufRead control 565 \ if getline(1) =~ '^Source:' 566 \| setf debcontrol 567 \| endif 568 569" Debian Sources.list 570au BufNewFile,BufRead */etc/apt/sources.list setf debsources 571au BufNewFile,BufRead */etc/apt/sources.list.d/*.list setf debsources 572 573" Deny hosts 574au BufNewFile,BufRead denyhosts.conf setf denyhosts 575 576" dnsmasq(8) configuration files 577au BufNewFile,BufRead */etc/dnsmasq.conf setf dnsmasq 578 579" ROCKLinux package description 580au BufNewFile,BufRead *.desc setf desc 581 582" the D language or dtrace 583au BufNewFile,BufRead *.d call s:DtraceCheck() 584 585func! s:DtraceCheck() 586 let lines = getline(1, min([line("$"), 100])) 587 if match(lines, '^module\>\|^import\>') > -1 588 " D files often start with a module and/or import statement. 589 setf d 590 elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1 591 setf dtrace 592 else 593 setf d 594 endif 595endfunc 596 597" Desktop files 598au BufNewFile,BufRead *.desktop,.directory setf desktop 599 600" Dict config 601au BufNewFile,BufRead dict.conf,.dictrc setf dictconf 602 603" Dictd config 604au BufNewFile,BufRead dictd.conf setf dictdconf 605 606" Diff files 607au BufNewFile,BufRead *.diff,*.rej,*.patch setf diff 608 609" Dircolors 610au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS setf dircolors 611 612" Diva (with Skill) or InstallShield 613au BufNewFile,BufRead *.rul 614 \ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield' | 615 \ setf ishd | 616 \ else | 617 \ setf diva | 618 \ endif 619 620" DCL (Digital Command Language - vms) or DNS zone file 621au BufNewFile,BufRead *.com call s:BindzoneCheck('dcl') 622 623" DOT 624au BufNewFile,BufRead *.dot setf dot 625 626" Dylan - lid files 627au BufNewFile,BufRead *.lid setf dylanlid 628 629" Dylan - intr files (melange) 630au BufNewFile,BufRead *.intr setf dylanintr 631 632" Dylan 633au BufNewFile,BufRead *.dylan setf dylan 634 635" Microsoft Module Definition 636au BufNewFile,BufRead *.def setf def 637 638" Dracula 639au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe setf dracula 640 641" Datascript 642au BufNewFile,BufRead *.ds setf datascript 643 644" dsl 645au BufNewFile,BufRead *.dsl setf dsl 646 647" DTD (Document Type Definition for XML) 648au BufNewFile,BufRead *.dtd setf dtd 649 650" DTS/DSTI (device tree files) 651au BufNewFile,BufRead *.dts,*.dtsi setf dts 652 653" EDIF (*.edf,*.edif,*.edn,*.edo) 654au BufNewFile,BufRead *.ed\(f\|if\|n\|o\) setf edif 655 656" Embedix Component Description 657au BufNewFile,BufRead *.ecd setf ecd 658 659" Eiffel or Specman 660au BufNewFile,BufRead *.e,*.E call s:FTe() 661 662" Elinks configuration 663au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf setf elinks 664 665func! s:FTe() 666 let n = 1 667 while n < 100 && n < line("$") 668 if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$" 669 setf specman 670 return 671 endif 672 let n = n + 1 673 endwhile 674 setf eiffel 675endfunc 676 677" ERicsson LANGuage; Yaws is erlang too 678au BufNewFile,BufRead *.erl,*.hrl,*.yaws setf erlang 679 680" Elm Filter Rules file 681au BufNewFile,BufRead filter-rules setf elmfilt 682 683" ESMTP rc file 684au BufNewFile,BufRead *esmtprc setf esmtprc 685 686" ESQL-C 687au BufNewFile,BufRead *.ec,*.EC setf esqlc 688 689" Esterel 690au BufNewFile,BufRead *.strl setf esterel 691 692" Essbase script 693au BufNewFile,BufRead *.csc setf csc 694 695" Exim 696au BufNewFile,BufRead exim.conf setf exim 697 698" Expect 699au BufNewFile,BufRead *.exp setf expect 700 701" Exports 702au BufNewFile,BufRead exports setf exports 703 704" Falcon 705au BufNewFile,BufRead *.fal setf falcon 706 707" Fantom 708au BufNewFile,BufRead *.fan,*.fwt setf fan 709 710" Factor 711au BufNewFile,BufRead *.factor setf factor 712 713" Fetchmail RC file 714au BufNewFile,BufRead .fetchmailrc setf fetchmail 715 716" FlexWiki - disabled, because it has side effects when a .wiki file 717" is not actually FlexWiki 718"au BufNewFile,BufRead *.wiki setf flexwiki 719 720" Focus Executable 721au BufNewFile,BufRead *.fex,*.focexec setf focexec 722 723" Focus Master file (but not for auto.master) 724au BufNewFile,BufRead auto.master setf conf 725au BufNewFile,BufRead *.mas,*.master setf master 726 727" Forth 728au BufNewFile,BufRead *.fs,*.ft setf forth 729 730" Reva Forth 731au BufNewFile,BufRead *.frt setf reva 732 733" Fortran 734if has("fname_case") 735 au BufNewFile,BufRead *.F,*.FOR,*.FPP,*.FTN,*.F77,*.F90,*.F95,*.F03,*.F08 setf fortran 736endif 737au BufNewFile,BufRead *.f,*.for,*.fortran,*.fpp,*.ftn,*.f77,*.f90,*.f95,*.f03,*.f08 setf fortran 738 739" Framescript 740au BufNewFile,BufRead *.fsl setf framescript 741 742" FStab 743au BufNewFile,BufRead fstab,mtab setf fstab 744 745" GDB command files 746au BufNewFile,BufRead .gdbinit setf gdb 747 748" GDMO 749au BufNewFile,BufRead *.mo,*.gdmo setf gdmo 750 751" Gedcom 752au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom 753 754" Git 755au BufNewFile,BufRead *.git/COMMIT_EDITMSG setf gitcommit 756au BufNewFile,BufRead *.git/MERGE_MSG setf gitcommit 757au BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig 758au BufNewFile,BufRead *.git/modules/*/COMMIT_EDITMSG setf gitcommit 759au BufNewFile,BufRead *.git/modules/*/config setf gitconfig 760au BufNewFile,BufRead */.config/git/config setf gitconfig 761au BufNewFile,BufRead git-rebase-todo setf gitrebase 762au BufNewFile,BufRead .msg.[0-9]* 763 \ if getline(1) =~ '^From.*# This line is ignored.$' | 764 \ setf gitsendemail | 765 \ endif 766au BufNewFile,BufRead *.git/* 767 \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' | 768 \ setf git | 769 \ endif 770 771" Gkrellmrc 772au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc 773 774" GP scripts (2.0 and onward) 775au BufNewFile,BufRead *.gp,.gprc setf gp 776 777" GPG 778au BufNewFile,BufRead */.gnupg/options setf gpg 779au BufNewFile,BufRead */.gnupg/gpg.conf setf gpg 780au BufNewFile,BufRead */usr/*/gnupg/options.skel setf gpg 781 782" gnash(1) configuration files 783au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash 784 785" Gitolite 786au BufNewFile,BufRead gitolite.conf setf gitolite 787au BufNewFile,BufRead */gitolite-admin/conf/* call s:StarSetf('gitolite') 788au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc setf perl 789 790" Gnuplot scripts 791au BufNewFile,BufRead *.gpi setf gnuplot 792 793" GrADS scripts 794au BufNewFile,BufRead *.gs setf grads 795 796" Gretl 797au BufNewFile,BufRead *.gretl setf gretl 798 799" Groovy 800au BufNewFile,BufRead *.groovy setf groovy 801 802" GNU Server Pages 803au BufNewFile,BufRead *.gsp setf gsp 804 805" Group file 806au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/etc/gshadow-,*/etc/gshadow.edit,*/var/backups/group.bak,*/var/backups/gshadow.bak setf group 807 808" GTK RC 809au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc 810 811" Haml 812au BufNewFile,BufRead *.haml setf haml 813 814" Hamster Classic | Playground files 815au BufNewFile,BufRead *.hsc,*.hsm setf hamster 816 817" Haskell 818au BufNewFile,BufRead *.hs,*.hs-boot setf haskell 819au BufNewFile,BufRead *.lhs setf lhaskell 820au BufNewFile,BufRead *.chs setf chaskell 821 822" Haste 823au BufNewFile,BufRead *.ht setf haste 824au BufNewFile,BufRead *.htpp setf hastepreproc 825 826" Hercules 827au BufNewFile,BufRead *.vc,*.ev,*.rs,*.sum,*.errsum setf hercules 828 829" HEX (Intel) 830au BufNewFile,BufRead *.hex,*.h32 setf hex 831 832" Tilde (must be before HTML) 833au BufNewFile,BufRead *.t.html setf tilde 834 835" HTML (.shtml and .stm for server side) 836au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm call s:FThtml() 837 838" Distinguish between HTML, XHTML and Django 839func! s:FThtml() 840 let n = 1 841 while n < 10 && n < line("$") 842 if getline(n) =~ '\<DTD\s\+XHTML\s' 843 setf xhtml 844 return 845 endif 846 if getline(n) =~ '{%\s*\(extends\|block\)\>' 847 setf htmldjango 848 return 849 endif 850 let n = n + 1 851 endwhile 852 setf html 853endfunc 854 855" HTML with Ruby - eRuby 856au BufNewFile,BufRead *.erb,*.rhtml setf eruby 857 858" HTML with M4 859au BufNewFile,BufRead *.html.m4 setf htmlm4 860 861" HTML Cheetah template 862au BufNewFile,BufRead *.tmpl setf htmlcheetah 863 864" Host config 865au BufNewFile,BufRead */etc/host.conf setf hostconf 866 867" Hosts access 868au BufNewFile,BufRead */etc/hosts.allow,*/etc/hosts.deny setf hostsaccess 869 870" Hyper Builder 871au BufNewFile,BufRead *.hb setf hb 872 873" Httest 874au BufNewFile,BufRead *.htt,*.htb setf httest 875 876" Icon 877au BufNewFile,BufRead *.icn setf icon 878 879" IDL (Interface Description Language) 880au BufNewFile,BufRead *.idl call s:FTidl() 881 882" Distinguish between standard IDL and MS-IDL 883func! s:FTidl() 884 let n = 1 885 while n < 50 && n < line("$") 886 if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"' 887 setf msidl 888 return 889 endif 890 let n = n + 1 891 endwhile 892 setf idl 893endfunc 894 895" Microsoft IDL (Interface Description Language) Also *.idl 896" MOF = WMI (Windows Management Instrumentation) Managed Object Format 897au BufNewFile,BufRead *.odl,*.mof setf msidl 898 899" Icewm menu 900au BufNewFile,BufRead */.icewm/menu setf icemenu 901 902" Indent profile (must come before IDL *.pro!) 903au BufNewFile,BufRead .indent.pro setf indent 904au BufNewFile,BufRead indent.pro call s:ProtoCheck('indent') 905 906" IDL (Interactive Data Language) 907au BufNewFile,BufRead *.pro call s:ProtoCheck('idlang') 908 909" Distinguish between "default" and Cproto prototype file. */ 910func! s:ProtoCheck(default) 911 " Cproto files have a comment in the first line and a function prototype in 912 " the second line, it always ends in ";". Indent files may also have 913 " comments, thus we can't match comments to see the difference. 914 " IDL files can have a single ';' in the second line, require at least one 915 " chacter before the ';'. 916 if getline(2) =~ '.;$' 917 setf cpp 918 else 919 exe 'setf ' . a:default 920 endif 921endfunc 922 923 924" Indent RC 925au BufNewFile,BufRead indentrc setf indent 926 927" Inform 928au BufNewFile,BufRead *.inf,*.INF setf inform 929 930" Initng 931au BufNewFile,BufRead */etc/initng/*/*.i,*.ii setf initng 932 933" Innovation Data Processing 934au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c setf upstreamdat 935au BufRead,BufNewFile upstream.log\c,upstream.*.log\c,*.upstream.log\c setf upstreamlog 936au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog 937au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c setf usserverlog 938au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c setf usw2kagtlog 939 940" Ipfilter 941au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules setf ipfilter 942 943" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.) 944au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl setf fgl 945 946" .INI file for MSDOS 947au BufNewFile,BufRead *.ini setf dosini 948 949" SysV Inittab 950au BufNewFile,BufRead inittab setf inittab 951 952" Inno Setup 953au BufNewFile,BufRead *.iss setf iss 954 955" J 956au BufNewFile,BufRead *.ijs setf j 957 958" JAL 959au BufNewFile,BufRead *.jal,*.JAL setf jal 960 961" Jam 962au BufNewFile,BufRead *.jpl,*.jpr setf jam 963 964" Java 965au BufNewFile,BufRead *.java,*.jav setf java 966 967" JavaCC 968au BufNewFile,BufRead *.jj,*.jjt setf javacc 969 970" JavaScript, ECMAScript 971au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx,*.json setf javascript 972 973" Java Server Pages 974au BufNewFile,BufRead *.jsp setf jsp 975 976" Java Properties resource file (note: doesn't catch font.properties.pl) 977au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_?? setf jproperties 978au BufNewFile,BufRead *.properties_??_??_* call s:StarSetf('jproperties') 979 980" Jess 981au BufNewFile,BufRead *.clp setf jess 982 983" Jgraph 984au BufNewFile,BufRead *.jgr setf jgraph 985 986" Jovial 987au BufNewFile,BufRead *.jov,*.j73,*.jovial setf jovial 988 989" Kixtart 990au BufNewFile,BufRead *.kix setf kix 991 992" Kimwitu[++] 993au BufNewFile,BufRead *.k setf kwt 994 995" KDE script 996au BufNewFile,BufRead *.ks setf kscript 997 998" Kconfig 999au BufNewFile,BufRead Kconfig,Kconfig.debug setf kconfig 1000 1001" Lace (ISE) 1002au BufNewFile,BufRead *.ace,*.ACE setf lace 1003 1004" Latte 1005au BufNewFile,BufRead *.latte,*.lte setf latte 1006 1007" Limits 1008au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf setf limits 1009 1010" LambdaProlog (*.mod too, see Modsim) 1011au BufNewFile,BufRead *.sig setf lprolog 1012 1013" LDAP LDIF 1014au BufNewFile,BufRead *.ldif setf ldif 1015 1016" Ld loader 1017au BufNewFile,BufRead *.ld setf ld 1018 1019" Lex 1020au BufNewFile,BufRead *.lex,*.l setf lex 1021 1022" Libao 1023au BufNewFile,BufRead */etc/libao.conf,*/.libao setf libao 1024 1025" Libsensors 1026au BufNewFile,BufRead */etc/sensors.conf,*/etc/sensors3.conf setf sensors 1027 1028" LFTP 1029au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc setf lftp 1030 1031" Lifelines (or Lex for C++!) 1032au BufNewFile,BufRead *.ll setf lifelines 1033 1034" Lilo: Linux loader 1035au BufNewFile,BufRead lilo.conf setf lilo 1036 1037" Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp) 1038if has("fname_case") 1039 au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,*.L,.emacs,.sawfishrc setf lisp 1040else 1041 au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,.emacs,.sawfishrc setf lisp 1042endif 1043 1044" SBCL implementation of Common Lisp 1045au BufNewFile,BufRead sbclrc,.sbclrc setf lisp 1046 1047" Liquid 1048au BufNewFile,BufRead *.liquid setf liquid 1049 1050" Lite 1051au BufNewFile,BufRead *.lite,*.lt setf lite 1052 1053" LiteStep RC files 1054au BufNewFile,BufRead */LiteStep/*/*.rc setf litestep 1055 1056" Login access 1057au BufNewFile,BufRead */etc/login.access setf loginaccess 1058 1059" Login defs 1060au BufNewFile,BufRead */etc/login.defs setf logindefs 1061 1062" Logtalk 1063au BufNewFile,BufRead *.lgt setf logtalk 1064 1065" LOTOS 1066au BufNewFile,BufRead *.lot,*.lotos setf lotos 1067 1068" Lout (also: *.lt) 1069au BufNewFile,BufRead *.lou,*.lout setf lout 1070 1071" Lua 1072au BufNewFile,BufRead *.lua setf lua 1073 1074" Linden Scripting Language (Second Life) 1075au BufNewFile,BufRead *.lsl setf lsl 1076 1077" Lynx style file (or LotusScript!) 1078au BufNewFile,BufRead *.lss setf lss 1079 1080" M4 1081au BufNewFile,BufRead *.m4 1082 \ if expand("<afile>") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif 1083 1084" MaGic Point 1085au BufNewFile,BufRead *.mgp setf mgp 1086 1087" Mail (for Elm, trn, mutt, muttng, rn, slrn) 1088au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\\\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail 1089 1090" Mail aliases 1091au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases setf mailaliases 1092 1093" Mailcap configuration file 1094au BufNewFile,BufRead .mailcap,mailcap setf mailcap 1095 1096" Makefile 1097au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make 1098 1099" MakeIndex 1100au BufNewFile,BufRead *.ist,*.mst setf ist 1101 1102" Mallard 1103au BufNewFile,BufRead *.page setf mallard 1104 1105" Manpage 1106au BufNewFile,BufRead *.man setf man 1107 1108" Man config 1109au BufNewFile,BufRead */etc/man.conf,man.config setf manconf 1110 1111" Maple V 1112au BufNewFile,BufRead *.mv,*.mpl,*.mws setf maple 1113 1114" Map (UMN mapserver config file) 1115au BufNewFile,BufRead *.map setf map 1116 1117" Markdown 1118au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,README.md setf markdown 1119 1120" Mason 1121au BufNewFile,BufRead *.mason,*.mhtml setf mason 1122 1123" Matlab or Objective C 1124au BufNewFile,BufRead *.m call s:FTm() 1125 1126func! s:FTm() 1127 let n = 1 1128 while n < 10 1129 let line = getline(n) 1130 if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\|//\)' 1131 setf objc 1132 return 1133 endif 1134 if line =~ '^\s*%' 1135 setf matlab 1136 return 1137 endif 1138 if line =~ '^\s*(\*' 1139 setf mma 1140 return 1141 endif 1142 let n = n + 1 1143 endwhile 1144 if exists("g:filetype_m") 1145 exe "setf " . g:filetype_m 1146 else 1147 setf matlab 1148 endif 1149endfunc 1150 1151" Mathematica notebook 1152au BufNewFile,BufRead *.nb setf mma 1153 1154" Maya Extension Language 1155au BufNewFile,BufRead *.mel setf mel 1156 1157" Mercurial (hg) commit file 1158au BufNewFile,BufRead hg-editor-*.txt setf hgcommit 1159 1160" Mercurial config (looks like generic config file) 1161au BufNewFile,BufRead *.hgrc,*hgrc setf cfg 1162 1163" Messages (logs mostly) 1164au BufNewFile,BufRead */log/{auth,cron,daemon,debug,kern,lpr,mail,messages,news/news,syslog,user}{,.log,.err,.info,.warn,.crit,.notice}{,.[0-9]*,-[0-9]*} setf messages 1165 1166" Metafont 1167au BufNewFile,BufRead *.mf setf mf 1168 1169" MetaPost 1170au BufNewFile,BufRead *.mp setf mp 1171 1172" MGL 1173au BufNewFile,BufRead *.mgl setf mgl 1174 1175" MIX - Knuth assembly 1176au BufNewFile,BufRead *.mix,*.mixal setf mix 1177 1178" MMIX or VMS makefile 1179au BufNewFile,BufRead *.mms call s:FTmms() 1180 1181" Symbian meta-makefile definition (MMP) 1182au BufNewFile,BufRead *.mmp setf mmp 1183 1184func! s:FTmms() 1185 let n = 1 1186 while n < 10 1187 let line = getline(n) 1188 if line =~ '^\s*\(%\|//\)' || line =~ '^\*' 1189 setf mmix 1190 return 1191 endif 1192 if line =~ '^\s*#' 1193 setf make 1194 return 1195 endif 1196 let n = n + 1 1197 endwhile 1198 setf mmix 1199endfunc 1200 1201 1202" Modsim III (or LambdaProlog) 1203au BufNewFile,BufRead *.mod 1204 \ if getline(1) =~ '\<module\>' | 1205 \ setf lprolog | 1206 \ else | 1207 \ setf modsim3 | 1208 \ endif 1209 1210" Modula 2 1211au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi setf modula2 1212 1213" Modula 3 (.m3, .i3, .mg, .ig) 1214au BufNewFile,BufRead *.[mi][3g] setf modula3 1215 1216" Monk 1217au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc setf monk 1218 1219" MOO 1220au BufNewFile,BufRead *.moo setf moo 1221 1222" Modconf 1223au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf 1224 1225" Mplayer config 1226au BufNewFile,BufRead mplayer.conf,*/.mplayer/config setf mplayerconf 1227 1228" Moterola S record 1229au BufNewFile,BufRead *.s19,*.s28,*.s37 setf srec 1230 1231" Mrxvtrc 1232au BufNewFile,BufRead mrxvtrc,.mrxvtrc setf mrxvtrc 1233 1234" Msql 1235au BufNewFile,BufRead *.msql setf msql 1236 1237" Mysql 1238au BufNewFile,BufRead *.mysql setf mysql 1239 1240" Mutt setup files (must be before catch *.rc) 1241au BufNewFile,BufRead */etc/Muttrc.d/* call s:StarSetf('muttrc') 1242 1243" M$ Resource files 1244au BufNewFile,BufRead *.rc,*.rch setf rc 1245 1246" MuPAD source 1247au BufRead,BufNewFile *.mu setf mupad 1248 1249" Mush 1250au BufNewFile,BufRead *.mush setf mush 1251 1252" Mutt setup file (also for Muttng) 1253au BufNewFile,BufRead Mutt{ng,}rc setf muttrc 1254 1255" Nano 1256au BufNewFile,BufRead */etc/nanorc,.nanorc setf nanorc 1257 1258" Nastran input/DMAP 1259"au BufNewFile,BufRead *.dat setf nastran 1260 1261" Natural 1262au BufNewFile,BufRead *.NS[ACGLMNPS] setf natural 1263 1264" Netrc 1265au BufNewFile,BufRead .netrc setf netrc 1266 1267" Ninja file 1268au BufNewFile,BufRead *.ninja setf ninja 1269 1270" Novell netware batch files 1271au BufNewFile,BufRead *.ncf setf ncf 1272 1273" Nroff/Troff (*.ms and *.t are checked below) 1274au BufNewFile,BufRead *.me 1275 \ if expand("<afile>") != "read.me" && expand("<afile>") != "click.me" | 1276 \ setf nroff | 1277 \ endif 1278au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff 1279au BufNewFile,BufRead *.[1-9] call s:FTnroff() 1280 1281" This function checks if one of the first five lines start with a dot. In 1282" that case it is probably an nroff file: 'filetype' is set and 1 is returned. 1283func! s:FTnroff() 1284 if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.' 1285 setf nroff 1286 return 1 1287 endif 1288 return 0 1289endfunc 1290 1291" Nroff or Objective C++ 1292au BufNewFile,BufRead *.mm call s:FTmm() 1293 1294func! s:FTmm() 1295 let n = 1 1296 while n < 10 1297 let line = getline(n) 1298 if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)' 1299 setf objcpp 1300 return 1301 endif 1302 let n = n + 1 1303 endwhile 1304 setf nroff 1305endfunc 1306 1307" Not Quite C 1308au BufNewFile,BufRead *.nqc setf nqc 1309 1310" NSIS 1311au BufNewFile,BufRead *.nsi,*.nsh setf nsis 1312 1313" OCAML 1314au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit setf ocaml 1315 1316" Occam 1317au BufNewFile,BufRead *.occ setf occam 1318 1319" Omnimark 1320au BufNewFile,BufRead *.xom,*.xin setf omnimark 1321 1322" OpenROAD 1323au BufNewFile,BufRead *.or setf openroad 1324 1325" OPL 1326au BufNewFile,BufRead *.[Oo][Pp][Ll] setf opl 1327 1328" Oracle config file 1329au BufNewFile,BufRead *.ora setf ora 1330 1331" Packet filter conf 1332au BufNewFile,BufRead pf.conf setf pf 1333 1334" Pam conf 1335au BufNewFile,BufRead */etc/pam.conf setf pamconf 1336 1337" PApp 1338au BufNewFile,BufRead *.papp,*.pxml,*.pxsl setf papp 1339 1340" Password file 1341au BufNewFile,BufRead */etc/passwd,*/etc/passwd-,*/etc/passwd.edit,*/etc/shadow,*/etc/shadow-,*/etc/shadow.edit,*/var/backups/passwd.bak,*/var/backups/shadow.bak setf passwd 1342 1343" Pascal (also *.p) 1344au BufNewFile,BufRead *.pas setf pascal 1345 1346" Delphi project file 1347au BufNewFile,BufRead *.dpr setf pascal 1348 1349" PDF 1350au BufNewFile,BufRead *.pdf setf pdf 1351 1352" Perl 1353if has("fname_case") 1354 au BufNewFile,BufRead *.pl,*.PL call s:FTpl() 1355else 1356 au BufNewFile,BufRead *.pl call s:FTpl() 1357endif 1358au BufNewFile,BufRead *.plx,*.al setf perl 1359au BufNewFile,BufRead *.p6,*.pm6 setf perl6 1360 1361func! s:FTpl() 1362 if exists("g:filetype_pl") 1363 exe "setf " . g:filetype_pl 1364 else 1365 " recognize Prolog by specific text in the first non-empty line 1366 " require a blank after the '%' because Perl uses "%list" and "%translate" 1367 let l = getline(nextnonblank(1)) 1368 if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-' 1369 setf prolog 1370 else 1371 setf perl 1372 endif 1373 endif 1374endfunc 1375 1376" Perl, XPM or XPM2 1377au BufNewFile,BufRead *.pm 1378 \ if getline(1) =~ "XPM2" | 1379 \ setf xpm2 | 1380 \ elseif getline(1) =~ "XPM" | 1381 \ setf xpm | 1382 \ else | 1383 \ setf perl | 1384 \ endif 1385 1386" Perl POD 1387au BufNewFile,BufRead *.pod setf pod 1388 1389" Php, php3, php4, etc. 1390" Also Phtml (was used for PHP 2 in the past) 1391" Also .ctp for Cake template file 1392au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php 1393 1394" Pike 1395au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike 1396 1397" Pinfo config 1398au BufNewFile,BufRead */etc/pinforc,*/.pinforc setf pinfo 1399 1400" Palm Resource compiler 1401au BufNewFile,BufRead *.rcp setf pilrc 1402 1403" Pine config 1404au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex setf pine 1405 1406" PL/1, PL/I 1407au BufNewFile,BufRead *.pli,*.pl1 setf pli 1408 1409" PL/M (also: *.inp) 1410au BufNewFile,BufRead *.plm,*.p36,*.pac setf plm 1411 1412" PL/SQL 1413au BufNewFile,BufRead *.pls,*.plsql setf plsql 1414 1415" PLP 1416au BufNewFile,BufRead *.plp setf plp 1417 1418" PO and PO template (GNU gettext) 1419au BufNewFile,BufRead *.po,*.pot setf po 1420 1421" Postfix main config 1422au BufNewFile,BufRead main.cf setf pfmain 1423 1424" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator) 1425au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai setf postscr 1426 1427" PostScript Printer Description 1428au BufNewFile,BufRead *.ppd setf ppd 1429 1430" Povray 1431au BufNewFile,BufRead *.pov setf pov 1432 1433" Povray configuration 1434au BufNewFile,BufRead .povrayrc setf povini 1435 1436" Povray, PHP or assembly 1437au BufNewFile,BufRead *.inc call s:FTinc() 1438 1439func! s:FTinc() 1440 if exists("g:filetype_inc") 1441 exe "setf " . g:filetype_inc 1442 else 1443 let lines = getline(1).getline(2).getline(3) 1444 if lines =~? "perlscript" 1445 setf aspperl 1446 elseif lines =~ "<%" 1447 setf aspvbs 1448 elseif lines =~ "<?" 1449 setf php 1450 else 1451 call s:FTasmsyntax() 1452 if exists("b:asmsyntax") 1453 exe "setf " . fnameescape(b:asmsyntax) 1454 else 1455 setf pov 1456 endif 1457 endif 1458 endif 1459endfunc 1460 1461" Printcap and Termcap 1462au BufNewFile,BufRead *printcap 1463 \ let b:ptcap_type = "print" | setf ptcap 1464au BufNewFile,BufRead *termcap 1465 \ let b:ptcap_type = "term" | setf ptcap 1466 1467" PCCTS / ANTRL 1468"au BufNewFile,BufRead *.g setf antrl 1469au BufNewFile,BufRead *.g setf pccts 1470 1471" PPWizard 1472au BufNewFile,BufRead *.it,*.ih setf ppwiz 1473 1474" Obj 3D file format 1475" TODO: is there a way to avoid MS-Windows Object files? 1476au BufNewFile,BufRead *.obj setf obj 1477 1478" Oracle Pro*C/C++ 1479au BufNewFile,BufRead *.pc setf proc 1480 1481" Privoxy actions file 1482au BufNewFile,BufRead *.action setf privoxy 1483 1484" Procmail 1485au BufNewFile,BufRead .procmail,.procmailrc setf procmail 1486 1487" Progress or CWEB 1488au BufNewFile,BufRead *.w call s:FTprogress_cweb() 1489 1490func! s:FTprogress_cweb() 1491 if exists("g:filetype_w") 1492 exe "setf " . g:filetype_w 1493 return 1494 endif 1495 if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE' 1496 setf progress 1497 else 1498 setf cweb 1499 endif 1500endfunc 1501 1502" Progress or assembly 1503au BufNewFile,BufRead *.i call s:FTprogress_asm() 1504 1505func! s:FTprogress_asm() 1506 if exists("g:filetype_i") 1507 exe "setf " . g:filetype_i 1508 return 1509 endif 1510 " This function checks for an assembly comment the first ten lines. 1511 " If not found, assume Progress. 1512 let lnum = 1 1513 while lnum <= 10 && lnum < line('$') 1514 let line = getline(lnum) 1515 if line =~ '^\s*;' || line =~ '^\*' 1516 call s:FTasm() 1517 return 1518 elseif line !~ '^\s*$' || line =~ '^/\*' 1519 " Not an empty line: Doesn't look like valid assembly code. 1520 " Or it looks like a Progress /* comment 1521 break 1522 endif 1523 let lnum = lnum + 1 1524 endw 1525 setf progress 1526endfunc 1527 1528" Progress or Pascal 1529au BufNewFile,BufRead *.p call s:FTprogress_pascal() 1530 1531func! s:FTprogress_pascal() 1532 if exists("g:filetype_p") 1533 exe "setf " . g:filetype_p 1534 return 1535 endif 1536 " This function checks for valid Pascal syntax in the first ten lines. 1537 " Look for either an opening comment or a program start. 1538 " If not found, assume Progress. 1539 let lnum = 1 1540 while lnum <= 10 && lnum < line('$') 1541 let line = getline(lnum) 1542 if line =~ '^\s*\(program\|unit\|procedure\|function\|const\|type\|var\)\>' 1543 \ || line =~ '^\s*{' || line =~ '^\s*(\*' 1544 setf pascal 1545 return 1546 elseif line !~ '^\s*$' || line =~ '^/\*' 1547 " Not an empty line: Doesn't look like valid Pascal code. 1548 " Or it looks like a Progress /* comment 1549 break 1550 endif 1551 let lnum = lnum + 1 1552 endw 1553 setf progress 1554endfunc 1555 1556 1557" Software Distributor Product Specification File (POSIX 1387.2-1995) 1558au BufNewFile,BufRead *.psf setf psf 1559au BufNewFile,BufRead INDEX,INFO 1560 \ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' | 1561 \ setf psf | 1562 \ endif 1563 1564" Prolog 1565au BufNewFile,BufRead *.pdb setf prolog 1566 1567" Promela 1568au BufNewFile,BufRead *.pml setf promela 1569 1570" Google protocol buffers 1571au BufNewFile,BufRead *.proto setf proto 1572 1573" Protocols 1574au BufNewFile,BufRead */etc/protocols setf protocols 1575 1576" Pyrex 1577au BufNewFile,BufRead *.pyx,*.pxd setf pyrex 1578 1579" Python 1580au BufNewFile,BufRead *.py,*.pyw setf python 1581 1582" Quixote (Python-based web framework) 1583au BufNewFile,BufRead *.ptl setf python 1584 1585" Radiance 1586au BufNewFile,BufRead *.rad,*.mat setf radiance 1587 1588" Ratpoison config/command files 1589au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison 1590 1591" RCS file 1592au BufNewFile,BufRead *\,v setf rcs 1593 1594" Readline 1595au BufNewFile,BufRead .inputrc,inputrc setf readline 1596 1597" Registry for MS-Windows 1598au BufNewFile,BufRead *.reg 1599 \ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif 1600 1601" Renderman Interface Bytestream 1602au BufNewFile,BufRead *.rib setf rib 1603 1604" Rexx 1605au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit setf rexx 1606 1607" R (Splus) 1608if has("fname_case") 1609 au BufNewFile,BufRead *.s,*.S setf r 1610else 1611 au BufNewFile,BufRead *.s setf r 1612endif 1613 1614" R Help file 1615if has("fname_case") 1616 au BufNewFile,BufRead *.rd,*.Rd setf rhelp 1617else 1618 au BufNewFile,BufRead *.rd setf rhelp 1619endif 1620 1621" R noweb file 1622if has("fname_case") 1623 au BufNewFile,BufRead *.Rnw,*.rnw,*.Snw,*.snw setf rnoweb 1624else 1625 au BufNewFile,BufRead *.rnw,*.snw setf rnoweb 1626endif 1627 1628" Rexx, Rebol or R 1629au BufNewFile,BufRead *.r,*.R call s:FTr() 1630 1631func! s:FTr() 1632 let max = line("$") > 50 ? 50 : line("$") 1633 1634 for n in range(1, max) 1635 " Rebol is easy to recognize, check for that first 1636 if getline(n) =~? '\<REBOL\>' 1637 setf rebol 1638 return 1639 endif 1640 endfor 1641 1642 for n in range(1, max) 1643 " R has # comments 1644 if getline(n) =~ '^\s*#' 1645 setf r 1646 return 1647 endif 1648 " Rexx has /* comments */ 1649 if getline(n) =~ '^\s*/\*' 1650 setf rexx 1651 return 1652 endif 1653 endfor 1654 1655 " Nothing recognized, use user default or assume Rexx 1656 if exists("g:filetype_r") 1657 exe "setf " . g:filetype_r 1658 else 1659 " Rexx used to be the default, but R appears to be much more popular. 1660 setf r 1661 endif 1662endfunc 1663 1664" Remind 1665au BufNewFile,BufRead .reminders,*.remind,*.rem setf remind 1666 1667" Resolv.conf 1668au BufNewFile,BufRead resolv.conf setf resolv 1669 1670" Relax NG Compact 1671au BufNewFile,BufRead *.rnc setf rnc 1672 1673" Relax NG XML 1674au BufNewFile,BufRead *.rng setf rng 1675 1676" RPL/2 1677au BufNewFile,BufRead *.rpl setf rpl 1678 1679" Robots.txt 1680au BufNewFile,BufRead robots.txt setf robots 1681 1682" Rpcgen 1683au BufNewFile,BufRead *.x setf rpcgen 1684 1685" reStructuredText Documentation Format 1686au BufNewFile,BufRead *.rst setf rst 1687 1688" RTF 1689au BufNewFile,BufRead *.rtf setf rtf 1690 1691" Interactive Ruby shell 1692au BufNewFile,BufRead .irbrc,irbrc setf ruby 1693 1694" Ruby 1695au BufNewFile,BufRead *.rb,*.rbw setf ruby 1696 1697" RubyGems 1698au BufNewFile,BufRead *.gemspec setf ruby 1699 1700" Rackup 1701au BufNewFile,BufRead *.ru setf ruby 1702 1703" Bundler 1704au BufNewFile,BufRead Gemfile setf ruby 1705 1706" Ruby on Rails 1707au BufNewFile,BufRead *.builder,*.rxml,*.rjs setf ruby 1708 1709" Rantfile and Rakefile is like Ruby 1710au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake setf ruby 1711 1712" S-lang (or shader language, or SmallLisp) 1713au BufNewFile,BufRead *.sl setf slang 1714 1715" Samba config 1716au BufNewFile,BufRead smb.conf setf samba 1717 1718" SAS script 1719au BufNewFile,BufRead *.sas setf sas 1720 1721" Sass 1722au BufNewFile,BufRead *.sass setf sass 1723 1724" Sather 1725au BufNewFile,BufRead *.sa setf sather 1726 1727" Scilab 1728au BufNewFile,BufRead *.sci,*.sce setf scilab 1729 1730" SCSS 1731au BufNewFile,BufRead *.scss setf scss 1732 1733" SD: Streaming Descriptors 1734au BufNewFile,BufRead *.sd setf sd 1735 1736" SDL 1737au BufNewFile,BufRead *.sdl,*.pr setf sdl 1738 1739" sed 1740au BufNewFile,BufRead *.sed setf sed 1741 1742" Sieve (RFC 3028) 1743au BufNewFile,BufRead *.siv setf sieve 1744 1745" Sendmail 1746au BufNewFile,BufRead sendmail.cf setf sm 1747 1748" Sendmail .mc files are actually m4. Could also be MS Message text file. 1749au BufNewFile,BufRead *.mc call s:McSetf() 1750 1751func! s:McSetf() 1752 " Rely on the file to start with a comment. 1753 " MS message text files use ';', Sendmail files use '#' or 'dnl' 1754 for lnum in range(1, min([line("$"), 20])) 1755 let line = getline(lnum) 1756 if line =~ '^\s*\(#\|dnl\)' 1757 setf m4 " Sendmail .mc file 1758 return 1759 elseif line =~ '^\s*;' 1760 setf msmessages " MS Message text file 1761 return 1762 endif 1763 endfor 1764 setf m4 " Default: Sendmail .mc file 1765endfunc 1766 1767" Services 1768au BufNewFile,BufRead */etc/services setf services 1769 1770" Service Location config 1771au BufNewFile,BufRead */etc/slp.conf setf slpconf 1772 1773" Service Location registration 1774au BufNewFile,BufRead */etc/slp.reg setf slpreg 1775 1776" Service Location SPI 1777au BufNewFile,BufRead */etc/slp.spi setf slpspi 1778 1779" Setserial config 1780au BufNewFile,BufRead */etc/serial.conf setf setserial 1781 1782" SGML 1783au BufNewFile,BufRead *.sgm,*.sgml 1784 \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' | 1785 \ setf sgmllnx | 1786 \ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' | 1787 \ let b:docbk_type = "sgml" | 1788 \ let b:docbk_ver = 4 | 1789 \ setf docbk | 1790 \ else | 1791 \ setf sgml | 1792 \ endif 1793 1794" SGMLDECL 1795au BufNewFile,BufRead *.decl,*.dcl,*.dec 1796 \ if getline(1).getline(2).getline(3) =~? '^<!SGML' | 1797 \ setf sgmldecl | 1798 \ endif 1799 1800" SGML catalog file 1801au BufNewFile,BufRead catalog setf catalog 1802au BufNewFile,BufRead sgml.catalog* call s:StarSetf('catalog') 1803 1804" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc. 1805" Gentoo ebuilds are actually bash scripts 1806au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash") 1807au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh") 1808au BufNewFile,BufRead */etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1)) 1809 1810" Also called from scripts.vim. 1811func! SetFileTypeSH(name) 1812 if expand("<amatch>") =~ g:ft_ignore_pat 1813 return 1814 endif 1815 if a:name =~ '\<csh\>' 1816 " Some .sh scripts contain #!/bin/csh. 1817 call SetFileTypeShell("csh") 1818 return 1819 elseif a:name =~ '\<tcsh\>' 1820 " Some .sh scripts contain #!/bin/tcsh. 1821 call SetFileTypeShell("tcsh") 1822 return 1823 elseif a:name =~ '\<zsh\>' 1824 " Some .sh scripts contain #!/bin/zsh. 1825 call SetFileTypeShell("zsh") 1826 return 1827 elseif a:name =~ '\<ksh\>' 1828 let b:is_kornshell = 1 1829 if exists("b:is_bash") 1830 unlet b:is_bash 1831 endif 1832 if exists("b:is_sh") 1833 unlet b:is_sh 1834 endif 1835 elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>' 1836 let b:is_bash = 1 1837 if exists("b:is_kornshell") 1838 unlet b:is_kornshell 1839 endif 1840 if exists("b:is_sh") 1841 unlet b:is_sh 1842 endif 1843 elseif a:name =~ '\<sh\>' 1844 let b:is_sh = 1 1845 if exists("b:is_kornshell") 1846 unlet b:is_kornshell 1847 endif 1848 if exists("b:is_bash") 1849 unlet b:is_bash 1850 endif 1851 endif 1852 call SetFileTypeShell("sh") 1853endfunc 1854 1855" For shell-like file types, check for an "exec" command hidden in a comment, 1856" as used for Tcl. 1857" Also called from scripts.vim, thus can't be local to this script. 1858func! SetFileTypeShell(name) 1859 if expand("<amatch>") =~ g:ft_ignore_pat 1860 return 1861 endif 1862 let l = 2 1863 while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)' 1864 " Skip empty and comment lines. 1865 let l = l + 1 1866 endwhile 1867 if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$' 1868 " Found an "exec" line after a comment with continuation 1869 let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '') 1870 if n =~ '\<tclsh\|\<wish' 1871 setf tcl 1872 return 1873 endif 1874 endif 1875 exe "setf " . a:name 1876endfunc 1877 1878" tcsh scripts 1879au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login call SetFileTypeShell("tcsh") 1880 1881" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh) 1882au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias call s:CSH() 1883 1884func! s:CSH() 1885 if exists("g:filetype_csh") 1886 call SetFileTypeShell(g:filetype_csh) 1887 elseif &shell =~ "tcsh" 1888 call SetFileTypeShell("tcsh") 1889 else 1890 call SetFileTypeShell("csh") 1891 endif 1892endfunc 1893 1894" Z-Shell script 1895au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks setf zsh 1896au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump* call s:StarSetf('zsh') 1897au BufNewFile,BufRead *.zsh setf zsh 1898 1899" Scheme 1900au BufNewFile,BufRead *.scm,*.ss,*.rkt setf scheme 1901 1902" Screen RC 1903au BufNewFile,BufRead .screenrc,screenrc setf screen 1904 1905" Simula 1906au BufNewFile,BufRead *.sim setf simula 1907 1908" SINDA 1909au BufNewFile,BufRead *.sin,*.s85 setf sinda 1910 1911" SiSU 1912au BufNewFile,BufRead *.sst,*.ssm,*.ssi,*.-sst,*._sst setf sisu 1913au BufNewFile,BufRead *.sst.meta,*.-sst.meta,*._sst.meta setf sisu 1914 1915" SKILL 1916au BufNewFile,BufRead *.il,*.ils,*.cdf setf skill 1917 1918" SLRN 1919au BufNewFile,BufRead .slrnrc setf slrnrc 1920au BufNewFile,BufRead *.score setf slrnsc 1921 1922" Smalltalk (and TeX) 1923au BufNewFile,BufRead *.st setf st 1924au BufNewFile,BufRead *.cls 1925 \ if getline(1) =~ '^%' | 1926 \ setf tex | 1927 \ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' | 1928 \ setf rexx | 1929 \ else | 1930 \ setf st | 1931 \ endif 1932 1933" Smarty templates 1934au BufNewFile,BufRead *.tpl setf smarty 1935 1936" SMIL or XML 1937au BufNewFile,BufRead *.smil 1938 \ if getline(1) =~ '<?\s*xml.*?>' | 1939 \ setf xml | 1940 \ else | 1941 \ setf smil | 1942 \ endif 1943 1944" SMIL or SNMP MIB file 1945au BufNewFile,BufRead *.smi 1946 \ if getline(1) =~ '\<smil\>' | 1947 \ setf smil | 1948 \ else | 1949 \ setf mib | 1950 \ endif 1951 1952" SMITH 1953au BufNewFile,BufRead *.smt,*.smith setf smith 1954 1955" Snobol4 and spitbol 1956au BufNewFile,BufRead *.sno,*.spt setf snobol4 1957 1958" SNMP MIB files 1959au BufNewFile,BufRead *.mib,*.my setf mib 1960 1961" Snort Configuration 1962au BufNewFile,BufRead *.hog,snort.conf,vision.conf setf hog 1963au BufNewFile,BufRead *.rules call s:FTRules() 1964 1965let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*' 1966func! s:FTRules() 1967 let path = expand('<amatch>:p') 1968 if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$' 1969 setf udevrules 1970 return 1971 endif 1972 if path =~ '^/etc/ufw/' 1973 setf conf " Better than hog 1974 return 1975 endif 1976 try 1977 let config_lines = readfile('/etc/udev/udev.conf') 1978 catch /^Vim\%((\a\+)\)\=:E484/ 1979 setf hog 1980 return 1981 endtry 1982 let dir = expand('<amatch>:p:h') 1983 for line in config_lines 1984 if line =~ s:ft_rules_udev_rules_pattern 1985 let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "") 1986 if dir == udev_rules 1987 setf udevrules 1988 endif 1989 break 1990 endif 1991 endfor 1992 setf hog 1993endfunc 1994 1995 1996" Spec (Linux RPM) 1997au BufNewFile,BufRead *.spec setf spec 1998 1999" Speedup (AspenTech plant simulator) 2000au BufNewFile,BufRead *.speedup,*.spdata,*.spd setf spup 2001 2002" Slice 2003au BufNewFile,BufRead *.ice setf slice 2004 2005" Spice 2006au BufNewFile,BufRead *.sp,*.spice setf spice 2007 2008" Spyce 2009au BufNewFile,BufRead *.spy,*.spi setf spyce 2010 2011" Squid 2012au BufNewFile,BufRead squid.conf setf squid 2013 2014" SQL for Oracle Designer 2015au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks setf sql 2016 2017" SQL 2018au BufNewFile,BufRead *.sql call s:SQL() 2019 2020func! s:SQL() 2021 if exists("g:filetype_sql") 2022 exe "setf " . g:filetype_sql 2023 else 2024 setf sql 2025 endif 2026endfunc 2027 2028" SQLJ 2029au BufNewFile,BufRead *.sqlj setf sqlj 2030 2031" SQR 2032au BufNewFile,BufRead *.sqr,*.sqi setf sqr 2033 2034" OpenSSH configuration 2035au BufNewFile,BufRead ssh_config,*/.ssh/config setf sshconfig 2036 2037" OpenSSH server configuration 2038au BufNewFile,BufRead sshd_config setf sshdconfig 2039 2040" Stata 2041au BufNewFile,BufRead *.ado,*.class,*.do,*.imata,*.mata setf stata 2042 2043" SMCL 2044au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl setf smcl 2045 2046" Stored Procedures 2047au BufNewFile,BufRead *.stp setf stp 2048 2049" Standard ML 2050au BufNewFile,BufRead *.sml setf sml 2051 2052" Sratus VOS command macro 2053au BufNewFile,BufRead *.cm setf voscm 2054 2055" Sysctl 2056au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf setf sysctl 2057 2058" Synopsys Design Constraints 2059au BufNewFile,BufRead *.sdc setf sdc 2060 2061" Sudoers 2062au BufNewFile,BufRead */etc/sudoers,sudoers.tmp setf sudoers 2063 2064" SVG (Scalable Vector Graphics) 2065au BufNewFile,BufRead *.svg setf svg 2066 2067" If the file has an extension of 't' and is in a directory 't' or 'xt' then 2068" it is almost certainly a Perl test file. 2069" If the first line starts with '#' and contains 'perl' it's probably a Perl 2070" file. 2071" (Slow test) If a file contains a 'use' statement then it is almost certainly 2072" a Perl file. 2073func! s:FTperl() 2074 let dirname = expand("%:p:h:t") 2075 if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt') 2076 setf perl 2077 return 1 2078 endif 2079 if getline(1)[0] == '#' && getline(1) =~ 'perl' 2080 setf perl 2081 return 1 2082 endif 2083 if search('^use\s\s*\k', 'nc', 30) 2084 setf perl 2085 return 1 2086 endif 2087 return 0 2088endfunc 2089 2090" Tads (or Nroff or Perl test file) 2091au BufNewFile,BufRead *.t 2092 \ if !s:FTnroff() && !s:FTperl() | setf tads | endif 2093 2094" Tags 2095au BufNewFile,BufRead tags setf tags 2096 2097" TAK 2098au BufNewFile,BufRead *.tak setf tak 2099 2100" Task 2101au BufRead,BufNewFile {pending,completed,undo}.data setf taskdata 2102au BufRead,BufNewFile *.task setf taskedit 2103 2104" Tcl (JACL too) 2105au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl setf tcl 2106 2107" TealInfo 2108au BufNewFile,BufRead *.tli setf tli 2109 2110" Telix Salt 2111au BufNewFile,BufRead *.slt setf tsalt 2112 2113" Terminfo 2114au BufNewFile,BufRead *.ti setf terminfo 2115 2116" TeX 2117au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex 2118au BufNewFile,BufRead *.tex call s:FTtex() 2119 2120" Choose context, plaintex, or tex (LaTeX) based on these rules: 2121" 1. Check the first line of the file for "%&<format>". 2122" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords. 2123" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc. 2124func! s:FTtex() 2125 let firstline = getline(1) 2126 if firstline =~ '^%&\s*\a\+' 2127 let format = tolower(matchstr(firstline, '\a\+')) 2128 let format = substitute(format, 'pdf', '', '') 2129 if format == 'tex' 2130 let format = 'plain' 2131 endif 2132 else 2133 " Default value, may be changed later: 2134 let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain' 2135 " Save position, go to the top of the file, find first non-comment line. 2136 let save_cursor = getpos('.') 2137 call cursor(1,1) 2138 let firstNC = search('^\s*[^[:space:]%]', 'c', 1000) 2139 if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword. 2140 let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>' 2141 let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>' 2142 let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)', 2143 \ 'cnp', firstNC + 1000) 2144 if kwline == 1 " lpat matched 2145 let format = 'latex' 2146 elseif kwline == 2 " cpat matched 2147 let format = 'context' 2148 endif " If neither matched, keep default set above. 2149 " let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000) 2150 " let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000) 2151 " if cline > 0 2152 " let format = 'context' 2153 " endif 2154 " if lline > 0 && (cline == 0 || cline > lline) 2155 " let format = 'tex' 2156 " endif 2157 endif " firstNC 2158 call setpos('.', save_cursor) 2159 endif " firstline =~ '^%&\s*\a\+' 2160 2161 " Translation from formats to file types. TODO: add AMSTeX, RevTex, others? 2162 if format == 'plain' 2163 setf plaintex 2164 elseif format == 'context' 2165 setf context 2166 else " probably LaTeX 2167 setf tex 2168 endif 2169 return 2170endfunc 2171 2172" ConTeXt 2173au BufNewFile,BufRead tex/context/*/*.tex,*.mkii,*.mkiv setf context 2174 2175" Texinfo 2176au BufNewFile,BufRead *.texinfo,*.texi,*.txi setf texinfo 2177 2178" TeX configuration 2179au BufNewFile,BufRead texmf.cnf setf texmf 2180 2181" Tidy config 2182au BufNewFile,BufRead .tidyrc,tidyrc setf tidy 2183 2184" TF mud client 2185au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf 2186 2187" TPP - Text Presentation Program 2188au BufNewFile,BufReadPost *.tpp setf tpp 2189 2190" Treetop 2191au BufRead,BufNewFile *.treetop setf treetop 2192 2193" Trustees 2194au BufNewFile,BufRead trustees.conf setf trustees 2195 2196" TSS - Geometry 2197au BufNewFile,BufReadPost *.tssgm setf tssgm 2198 2199" TSS - Optics 2200au BufNewFile,BufReadPost *.tssop setf tssop 2201 2202" TSS - Command Line (temporary) 2203au BufNewFile,BufReadPost *.tsscl setf tsscl 2204 2205" TWIG files 2206au BufNewFile,BufReadPost *.twig setf twig 2207 2208" Motif UIT/UIL files 2209au BufNewFile,BufRead *.uit,*.uil setf uil 2210 2211" Udev conf 2212au BufNewFile,BufRead */etc/udev/udev.conf setf udevconf 2213 2214" Udev permissions 2215au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm 2216" 2217" Udev symlinks config 2218au BufNewFile,BufRead */etc/udev/cdsymlinks.conf setf sh 2219 2220" UnrealScript 2221au BufNewFile,BufRead *.uc setf uc 2222 2223" Updatedb 2224au BufNewFile,BufRead */etc/updatedb.conf setf updatedb 2225 2226" Upstart (init(8)) config files 2227au BufNewFile,BufRead */usr/share/upstart/*.conf setf upstart 2228au BufNewFile,BufRead */usr/share/upstart/*.override setf upstart 2229au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override setf upstart 2230au BufNewFile,BufRead */.init/*.conf,*/.init/*.override setf upstart 2231au BufNewFile,BufRead */.config/upstart/*.conf setf upstart 2232au BufNewFile,BufRead */.config/upstart/*.override setf upstart 2233 2234" Vera 2235au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera 2236 2237" Verilog HDL 2238au BufNewFile,BufRead *.v setf verilog 2239 2240" Verilog-AMS HDL 2241au BufNewFile,BufRead *.va,*.vams setf verilogams 2242 2243" VHDL 2244au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl 2245au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl') 2246 2247" Vim script 2248au BufNewFile,BufRead *.vim,*.vba,.exrc,_exrc setf vim 2249 2250" Viminfo file 2251au BufNewFile,BufRead .viminfo,_viminfo setf viminfo 2252 2253" Virata Config Script File or Drupal module 2254au BufRead,BufNewFile *.hw,*.module,*.pkg 2255 \ if getline(1) =~ '<?php' | 2256 \ setf php | 2257 \ else | 2258 \ setf virata | 2259 \ endif 2260 2261" Visual Basic (also uses *.bas) or FORM 2262au BufNewFile,BufRead *.frm call s:FTVB("form") 2263 2264" SaxBasic is close to Visual Basic 2265au BufNewFile,BufRead *.sba setf vb 2266 2267" Vgrindefs file 2268au BufNewFile,BufRead vgrindefs setf vgrindefs 2269 2270" VRML V1.0c 2271au BufNewFile,BufRead *.wrl setf vrml 2272 2273" Webmacro 2274au BufNewFile,BufRead *.wm setf webmacro 2275 2276" Wget config 2277au BufNewFile,BufRead .wgetrc,wgetrc setf wget 2278 2279" Website MetaLanguage 2280au BufNewFile,BufRead *.wml setf wml 2281 2282" Winbatch 2283au BufNewFile,BufRead *.wbt setf winbatch 2284 2285" WSML 2286au BufNewFile,BufRead *.wsml setf wsml 2287 2288" WvDial 2289au BufNewFile,BufRead wvdial.conf,.wvdialrc setf wvdial 2290 2291" CVS RC file 2292au BufNewFile,BufRead .cvsrc setf cvsrc 2293 2294" CVS commit file 2295au BufNewFile,BufRead cvs\d\+ setf cvs 2296 2297" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment 2298" lines in a WEB file). 2299au BufNewFile,BufRead *.web 2300 \ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" | 2301 \ setf web | 2302 \ else | 2303 \ setf winbatch | 2304 \ endif 2305 2306" Windows Scripting Host and Windows Script Component 2307au BufNewFile,BufRead *.ws[fc] setf wsh 2308 2309" XHTML 2310au BufNewFile,BufRead *.xhtml,*.xht setf xhtml 2311 2312" X Pixmap (dynamically sets colors, use BufEnter to make it work better) 2313au BufEnter *.xpm 2314 \ if getline(1) =~ "XPM2" | 2315 \ setf xpm2 | 2316 \ else | 2317 \ setf xpm | 2318 \ endif 2319au BufEnter *.xpm2 setf xpm2 2320 2321" XFree86 config 2322au BufNewFile,BufRead XF86Config 2323 \ if getline(1) =~ '\<XConfigurator\>' | 2324 \ let b:xf86conf_xfree86_version = 3 | 2325 \ endif | 2326 \ setf xf86conf 2327au BufNewFile,BufRead */xorg.conf.d/*.conf 2328 \ let b:xf86conf_xfree86_version = 4 | 2329 \ setf xf86conf 2330 2331" Xorg config 2332au BufNewFile,BufRead xorg.conf,xorg.conf-4 let b:xf86conf_xfree86_version = 4 | setf xf86conf 2333 2334" Xinetd conf 2335au BufNewFile,BufRead */etc/xinetd.conf setf xinetd 2336 2337" XS Perl extension interface language 2338au BufNewFile,BufRead *.xs setf xs 2339 2340" X resources file 2341au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults 2342 2343" Xmath 2344au BufNewFile,BufRead *.msc,*.msf setf xmath 2345au BufNewFile,BufRead *.ms 2346 \ if !s:FTnroff() | setf xmath | endif 2347 2348" XML specific variants: docbk and xbl 2349au BufNewFile,BufRead *.xml call s:FTxml() 2350 2351func! s:FTxml() 2352 let n = 1 2353 while n < 100 && n < line("$") 2354 let line = getline(n) 2355 " DocBook 4 or DocBook 5. 2356 let is_docbook4 = line =~ '<!DOCTYPE.*DocBook' 2357 let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"' 2358 if is_docbook4 || is_docbook5 2359 let b:docbk_type = "xml" 2360 if is_docbook5 2361 let b:docbk_ver = 5 2362 else 2363 let b:docbk_ver = 4 2364 endif 2365 setf docbk 2366 return 2367 endif 2368 if line =~ 'xmlns:xbl="http://www.mozilla.org/xbl"' 2369 setf xbl 2370 return 2371 endif 2372 let n += 1 2373 endwhile 2374 setf xml 2375endfunc 2376 2377" XMI (holding UML models) is also XML 2378au BufNewFile,BufRead *.xmi setf xml 2379 2380" CSPROJ files are Visual Studio.NET's XML-based project config files 2381au BufNewFile,BufRead *.csproj,*.csproj.user setf xml 2382 2383" Qt Linguist translation source and Qt User Interface Files are XML 2384au BufNewFile,BufRead *.ts,*.ui setf xml 2385 2386" TPM's are RDF-based descriptions of TeX packages (Nikolai Weibull) 2387au BufNewFile,BufRead *.tpm setf xml 2388 2389" Xdg menus 2390au BufNewFile,BufRead */etc/xdg/menus/*.menu setf xml 2391 2392" ATI graphics driver configuration 2393au BufNewFile,BufRead fglrxrc setf xml 2394 2395" XLIFF (XML Localisation Interchange File Format) is also XML 2396au BufNewFile,BufRead *.xlf setf xml 2397au BufNewFile,BufRead *.xliff setf xml 2398 2399" XML User Interface Language 2400au BufNewFile,BufRead *.xul setf xml 2401 2402" X11 xmodmap (also see below) 2403au BufNewFile,BufRead *Xmodmap setf xmodmap 2404 2405" Xquery 2406au BufNewFile,BufRead *.xq,*.xql,*.xqm,*.xquery,*.xqy setf xquery 2407 2408" XSD 2409au BufNewFile,BufRead *.xsd setf xsd 2410 2411" Xslt 2412au BufNewFile,BufRead *.xsl,*.xslt setf xslt 2413 2414" Yacc 2415au BufNewFile,BufRead *.yy setf yacc 2416 2417" Yacc or racc 2418au BufNewFile,BufRead *.y call s:FTy() 2419 2420func! s:FTy() 2421 let n = 1 2422 while n < 100 && n < line("$") 2423 let line = getline(n) 2424 if line =~ '^\s*%' 2425 setf yacc 2426 return 2427 endif 2428 if getline(n) =~ '^\s*\(#\|class\>\)' && getline(n) !~ '^\s*#\s*include' 2429 setf racc 2430 return 2431 endif 2432 let n = n + 1 2433 endwhile 2434 setf yacc 2435endfunc 2436 2437 2438" Yaml 2439au BufNewFile,BufRead *.yaml,*.yml setf yaml 2440 2441" yum conf (close enough to dosini) 2442au BufNewFile,BufRead */etc/yum.conf setf dosini 2443 2444" Zimbu 2445au BufNewFile,BufRead *.zu setf zimbu 2446 2447" Zope 2448" dtml (zope dynamic template markup language), pt (zope page template), 2449" cpt (zope form controller page template) 2450au BufNewFile,BufRead *.dtml,*.pt,*.cpt call s:FThtml() 2451" zsql (zope sql method) 2452au BufNewFile,BufRead *.zsql call s:SQL() 2453 2454" Z80 assembler asz80 2455au BufNewFile,BufRead *.z8a setf z8a 2456 2457augroup END 2458 2459 2460" Source the user-specified filetype file, for backwards compatibility with 2461" Vim 5.x. 2462if exists("myfiletypefile") && filereadable(expand(myfiletypefile)) 2463 execute "source " . myfiletypefile 2464endif 2465 2466 2467" Check for "*" after loading myfiletypefile, so that scripts.vim is only used 2468" when there are no matching file name extensions. 2469" Don't do this for compressed files. 2470augroup filetypedetect 2471au BufNewFile,BufRead * 2472 \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat 2473 \ | runtime! scripts.vim | endif 2474au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif 2475 2476 2477" Extra checks for when no filetype has been detected now. Mostly used for 2478" patterns that end in "*". E.g., "zsh*" matches "zsh.vim", but that's a Vim 2479" script file. 2480" Most of these should call s:StarSetf() to avoid names ending in .gz and the 2481" like are used. 2482 2483" More Apache config files 2484au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf* call s:StarSetf('apache') 2485au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf* call s:StarSetf('apache') 2486 2487" Asterisk config file 2488au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk') 2489au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm') 2490 2491" Bazaar version control 2492au BufNewFile,BufRead bzr_log.* setf bzr 2493 2494" BIND zone 2495au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone') 2496 2497" Calendar 2498au BufNewFile,BufRead */.calendar/*, 2499 \*/share/calendar/*/calendar.*,*/share/calendar/calendar.* 2500 \ call s:StarSetf('calendar') 2501 2502" Changelog 2503au BufNewFile,BufRead [cC]hange[lL]og* 2504 \ if getline(1) =~ '; urgency=' 2505 \| call s:StarSetf('debchangelog') 2506 \|else 2507 \| call s:StarSetf('changelog') 2508 \|endif 2509 2510" Crontab 2511au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/* call s:StarSetf('crontab') 2512 2513" dnsmasq(8) configuration 2514au BufNewFile,BufRead */etc/dnsmasq.d/* call s:StarSetf('dnsmasq') 2515 2516" Dracula 2517au BufNewFile,BufRead drac.* call s:StarSetf('dracula') 2518 2519" Fvwm 2520au BufNewFile,BufRead */.fvwm/* call s:StarSetf('fvwm') 2521au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook 2522 \ let b:fvwm_version = 1 | call s:StarSetf('fvwm') 2523au BufNewFile,BufRead *fvwm2rc* 2524 \ if expand("<afile>:e") == "m4" 2525 \| call s:StarSetf('fvwm2m4') 2526 \|else 2527 \| let b:fvwm_version = 2 | call s:StarSetf('fvwm') 2528 \|endif 2529 2530" Gedcom 2531au BufNewFile,BufRead */tmp/lltmp* call s:StarSetf('gedcom') 2532 2533" GTK RC 2534au BufNewFile,BufRead .gtkrc*,gtkrc* call s:StarSetf('gtkrc') 2535 2536" Jam 2537au BufNewFile,BufRead Prl*.*,JAM*.* call s:StarSetf('jam') 2538 2539" Jargon 2540au! BufNewFile,BufRead *jarg* 2541 \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE' 2542 \| call s:StarSetf('jargon') 2543 \|endif 2544 2545" Kconfig 2546au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig') 2547 2548" Lilo: Linux loader 2549au BufNewFile,BufRead lilo.conf* call s:StarSetf('lilo') 2550 2551" Logcheck 2552au BufNewFile,BufRead */etc/logcheck/*.d*/* call s:StarSetf('logcheck') 2553 2554" Makefile 2555au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make') 2556 2557" Ruby Makefile 2558au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby') 2559 2560" Mail (also matches muttrc.vim, so this is below the other checks) 2561au BufNewFile,BufRead mutt[[:alnum:]._-]\\\{6\} setf mail 2562 2563" Modconf 2564au BufNewFile,BufRead */etc/modutils/* 2565 \ if executable(expand("<afile>")) != 1 2566 \| call s:StarSetf('modconf') 2567 \|endif 2568au BufNewFile,BufRead */etc/modprobe.* call s:StarSetf('modconf') 2569 2570" Mutt setup file 2571au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc* call s:StarSetf('muttrc') 2572au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc* call s:StarSetf('muttrc') 2573 2574" Nroff macros 2575au BufNewFile,BufRead tmac.* call s:StarSetf('nroff') 2576 2577" Pam conf 2578au BufNewFile,BufRead */etc/pam.d/* call s:StarSetf('pamconf') 2579 2580" Printcap and Termcap 2581au BufNewFile,BufRead *printcap* 2582 \ if !did_filetype() 2583 \| let b:ptcap_type = "print" | call s:StarSetf('ptcap') 2584 \|endif 2585au BufNewFile,BufRead *termcap* 2586 \ if !did_filetype() 2587 \| let b:ptcap_type = "term" | call s:StarSetf('ptcap') 2588 \|endif 2589 2590" ReDIF 2591" Only used when the .rdf file was not detected to be XML. 2592au BufRead,BufNewFile *.rdf call s:Redif() 2593func! s:Redif() 2594 let lnum = 1 2595 while lnum <= 5 && lnum < line('$') 2596 if getline(lnum) =~ "^\ctemplate-type:" 2597 setf redif 2598 return 2599 endif 2600 let lnum = lnum + 1 2601 endwhile 2602endfunc 2603 2604" Remind 2605au BufNewFile,BufRead .reminders* call s:StarSetf('remind') 2606 2607" Vim script 2608au BufNewFile,BufRead *vimrc* call s:StarSetf('vim') 2609 2610" Subversion commit file 2611au BufNewFile,BufRead svn-commit*.tmp setf svn 2612 2613" X resources file 2614au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults') 2615 2616" XFree86 config 2617au BufNewFile,BufRead XF86Config-4* 2618 \ let b:xf86conf_xfree86_version = 4 | call s:StarSetf('xf86conf') 2619au BufNewFile,BufRead XF86Config* 2620 \ if getline(1) =~ '\<XConfigurator\>' 2621 \| let b:xf86conf_xfree86_version = 3 2622 \|endif 2623 \|call s:StarSetf('xf86conf') 2624 2625" X11 xmodmap 2626au BufNewFile,BufRead *xmodmap* call s:StarSetf('xmodmap') 2627 2628" Xinetd conf 2629au BufNewFile,BufRead */etc/xinetd.d/* call s:StarSetf('xinetd') 2630 2631" yum conf (close enough to dosini) 2632au BufNewFile,BufRead */etc/yum.repos.d/* call s:StarSetf('dosini') 2633 2634" Z-Shell script 2635au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh') 2636 2637 2638" Plain text files, needs to be far down to not override others. This avoids 2639" the "conf" type being used if there is a line starting with '#'. 2640au BufNewFile,BufRead *.txt,*.text setf text 2641 2642 2643" Use the filetype detect plugins. They may overrule any of the previously 2644" detected filetypes. 2645runtime! ftdetect/*.vim 2646 2647" NOTE: The above command could have ended the filetypedetect autocmd group 2648" and started another one. Let's make sure it has ended to get to a consistent 2649" state. 2650augroup END 2651 2652" Generic configuration file (check this last, it's just guessing!) 2653au filetypedetect BufNewFile,BufRead,StdinReadPost * 2654 \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat 2655 \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#' 2656 \ || getline(4) =~ '^#' || getline(5) =~ '^#') | 2657 \ setf conf | 2658 \ endif 2659 2660 2661" If the GUI is already running, may still need to install the Syntax menu. 2662" Don't do it when the 'M' flag is included in 'guioptions'. 2663if has("menu") && has("gui_running") 2664 \ && !exists("did_install_syntax_menu") && &guioptions !~# "M" 2665 source <sfile>:p:h/menu.vim 2666endif 2667 2668" Function called for testing all functions defined here. These are 2669" script-local, thus need to be executed here. 2670" Returns a string with error messages (hopefully empty). 2671func! TestFiletypeFuncs(testlist) 2672 let output = '' 2673 for f in a:testlist 2674 try 2675 exe f 2676 catch 2677 let output = output . "\n" . f . ": " . v:exception 2678 endtry 2679 endfor 2680 return output 2681endfunc 2682 2683" Restore 'cpoptions' 2684let &cpo = s:cpo_save 2685unlet s:cpo_save 2686