1" Vim support file to detect file types 2" 3" Maintainer: Bram Moolenaar <[email protected]> 4" Last Change: 2013 Jun 01 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" Icon 874au BufNewFile,BufRead *.icn setf icon 875 876" IDL (Interface Description Language) 877au BufNewFile,BufRead *.idl call s:FTidl() 878 879" Distinguish between standard IDL and MS-IDL 880func! s:FTidl() 881 let n = 1 882 while n < 50 && n < line("$") 883 if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"' 884 setf msidl 885 return 886 endif 887 let n = n + 1 888 endwhile 889 setf idl 890endfunc 891 892" Microsoft IDL (Interface Description Language) Also *.idl 893" MOF = WMI (Windows Management Instrumentation) Managed Object Format 894au BufNewFile,BufRead *.odl,*.mof setf msidl 895 896" Icewm menu 897au BufNewFile,BufRead */.icewm/menu setf icemenu 898 899" Indent profile (must come before IDL *.pro!) 900au BufNewFile,BufRead .indent.pro setf indent 901au BufNewFile,BufRead indent.pro call s:ProtoCheck('indent') 902 903" IDL (Interactive Data Language) 904au BufNewFile,BufRead *.pro call s:ProtoCheck('idlang') 905 906" Distinguish between "default" and Cproto prototype file. */ 907func! s:ProtoCheck(default) 908 " Cproto files have a comment in the first line and a function prototype in 909 " the second line, it always ends in ";". Indent files may also have 910 " comments, thus we can't match comments to see the difference. 911 " IDL files can have a single ';' in the second line, require at least one 912 " chacter before the ';'. 913 if getline(2) =~ '.;$' 914 setf cpp 915 else 916 exe 'setf ' . a:default 917 endif 918endfunc 919 920 921" Indent RC 922au BufNewFile,BufRead indentrc setf indent 923 924" Inform 925au BufNewFile,BufRead *.inf,*.INF setf inform 926 927" Initng 928au BufNewFile,BufRead */etc/initng/**/*.i,*.ii setf initng 929 930" Ipfilter 931au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules setf ipfilter 932 933" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.) 934au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl setf fgl 935 936" .INI file for MSDOS 937au BufNewFile,BufRead *.ini setf dosini 938 939" SysV Inittab 940au BufNewFile,BufRead inittab setf inittab 941 942" Inno Setup 943au BufNewFile,BufRead *.iss setf iss 944 945" JAL 946au BufNewFile,BufRead *.jal,*.JAL setf jal 947 948" Jam 949au BufNewFile,BufRead *.jpl,*.jpr setf jam 950 951" Java 952au BufNewFile,BufRead *.java,*.jav setf java 953 954" JavaCC 955au BufNewFile,BufRead *.jj,*.jjt setf javacc 956 957" JavaScript, ECMAScript 958au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx,*.json setf javascript 959 960" Java Server Pages 961au BufNewFile,BufRead *.jsp setf jsp 962 963" Java Properties resource file (note: doesn't catch font.properties.pl) 964au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_?? setf jproperties 965au BufNewFile,BufRead *.properties_??_??_* call s:StarSetf('jproperties') 966 967" Jess 968au BufNewFile,BufRead *.clp setf jess 969 970" Jgraph 971au BufNewFile,BufRead *.jgr setf jgraph 972 973" Jovial 974au BufNewFile,BufRead *.jov,*.j73,*.jovial setf jovial 975 976" Kixtart 977au BufNewFile,BufRead *.kix setf kix 978 979" Kimwitu[++] 980au BufNewFile,BufRead *.k setf kwt 981 982" KDE script 983au BufNewFile,BufRead *.ks setf kscript 984 985" Kconfig 986au BufNewFile,BufRead Kconfig,Kconfig.debug setf kconfig 987 988" Lace (ISE) 989au BufNewFile,BufRead *.ace,*.ACE setf lace 990 991" Latte 992au BufNewFile,BufRead *.latte,*.lte setf latte 993 994" Limits 995au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf setf limits 996 997" LambdaProlog (*.mod too, see Modsim) 998au BufNewFile,BufRead *.sig setf lprolog 999 1000" LDAP LDIF 1001au BufNewFile,BufRead *.ldif setf ldif 1002 1003" Ld loader 1004au BufNewFile,BufRead *.ld setf ld 1005 1006" Lex 1007au BufNewFile,BufRead *.lex,*.l setf lex 1008 1009" Libao 1010au BufNewFile,BufRead */etc/libao.conf,*/.libao setf libao 1011 1012" Libsensors 1013au BufNewFile,BufRead */etc/sensors.conf,*/etc/sensors3.conf setf sensors 1014 1015" LFTP 1016au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc setf lftp 1017 1018" Lifelines (or Lex for C++!) 1019au BufNewFile,BufRead *.ll setf lifelines 1020 1021" Lilo: Linux loader 1022au BufNewFile,BufRead lilo.conf setf lilo 1023 1024" Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp) 1025if has("fname_case") 1026 au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,*.L,.emacs,.sawfishrc setf lisp 1027else 1028 au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,.emacs,.sawfishrc setf lisp 1029endif 1030 1031" SBCL implementation of Common Lisp 1032au BufNewFile,BufRead sbclrc,.sbclrc setf lisp 1033 1034" Liquid 1035au BufNewFile,BufRead *.liquid setf liquid 1036 1037" Lite 1038au BufNewFile,BufRead *.lite,*.lt setf lite 1039 1040" LiteStep RC files 1041au BufNewFile,BufRead */LiteStep/*/*.rc setf litestep 1042 1043" Login access 1044au BufNewFile,BufRead */etc/login.access setf loginaccess 1045 1046" Login defs 1047au BufNewFile,BufRead */etc/login.defs setf logindefs 1048 1049" Logtalk 1050au BufNewFile,BufRead *.lgt setf logtalk 1051 1052" LOTOS 1053au BufNewFile,BufRead *.lot,*.lotos setf lotos 1054 1055" Lout (also: *.lt) 1056au BufNewFile,BufRead *.lou,*.lout setf lout 1057 1058" Lua 1059au BufNewFile,BufRead *.lua setf lua 1060 1061" Linden Scripting Language (Second Life) 1062au BufNewFile,BufRead *.lsl setf lsl 1063 1064" Lynx style file (or LotusScript!) 1065au BufNewFile,BufRead *.lss setf lss 1066 1067" M4 1068au BufNewFile,BufRead *.m4 1069 \ if expand("<afile>") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif 1070 1071" MaGic Point 1072au BufNewFile,BufRead *.mgp setf mgp 1073 1074" Mail (for Elm, trn, mutt, muttng, rn, slrn) 1075au 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 1076 1077" Mail aliases 1078au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases setf mailaliases 1079 1080" Mailcap configuration file 1081au BufNewFile,BufRead .mailcap,mailcap setf mailcap 1082 1083" Makefile 1084au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make 1085 1086" MakeIndex 1087au BufNewFile,BufRead *.ist,*.mst setf ist 1088 1089" Mallard 1090au BufNewFile,BufRead *.page setf mallard 1091 1092" Manpage 1093au BufNewFile,BufRead *.man setf man 1094 1095" Man config 1096au BufNewFile,BufRead */etc/man.conf,man.config setf manconf 1097 1098" Maple V 1099au BufNewFile,BufRead *.mv,*.mpl,*.mws setf maple 1100 1101" Map (UMN mapserver config file) 1102au BufNewFile,BufRead *.map setf map 1103 1104" Markdown 1105au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,README.md setf markdown 1106 1107" Mason 1108au BufNewFile,BufRead *.mason,*.mhtml setf mason 1109 1110" Matlab or Objective C 1111au BufNewFile,BufRead *.m call s:FTm() 1112 1113func! s:FTm() 1114 let n = 1 1115 while n < 10 1116 let line = getline(n) 1117 if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\|//\)' 1118 setf objc 1119 return 1120 endif 1121 if line =~ '^\s*%' 1122 setf matlab 1123 return 1124 endif 1125 if line =~ '^\s*(\*' 1126 setf mma 1127 return 1128 endif 1129 let n = n + 1 1130 endwhile 1131 if exists("g:filetype_m") 1132 exe "setf " . g:filetype_m 1133 else 1134 setf matlab 1135 endif 1136endfunc 1137 1138" Mathematica notebook 1139au BufNewFile,BufRead *.nb setf mma 1140 1141" Maya Extension Language 1142au BufNewFile,BufRead *.mel setf mel 1143 1144" Mercurial (hg) commit file 1145au BufNewFile,BufRead hg-editor-*.txt setf hgcommit 1146 1147" Mercurial config (looks like generic config file) 1148au BufNewFile,BufRead *.hgrc,*hgrc setf cfg 1149 1150" Messages (logs mostly) 1151au 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 1152 1153" Metafont 1154au BufNewFile,BufRead *.mf setf mf 1155 1156" MetaPost 1157au BufNewFile,BufRead *.mp setf mp 1158 1159" MGL 1160au BufNewFile,BufRead *.mgl setf mgl 1161 1162" MMIX or VMS makefile 1163au BufNewFile,BufRead *.mms call s:FTmms() 1164 1165" Symbian meta-makefile definition (MMP) 1166au BufNewFile,BufRead *.mmp setf mmp 1167 1168func! s:FTmms() 1169 let n = 1 1170 while n < 10 1171 let line = getline(n) 1172 if line =~ '^\s*\(%\|//\)' || line =~ '^\*' 1173 setf mmix 1174 return 1175 endif 1176 if line =~ '^\s*#' 1177 setf make 1178 return 1179 endif 1180 let n = n + 1 1181 endwhile 1182 setf mmix 1183endfunc 1184 1185 1186" Modsim III (or LambdaProlog) 1187au BufNewFile,BufRead *.mod 1188 \ if getline(1) =~ '\<module\>' | 1189 \ setf lprolog | 1190 \ else | 1191 \ setf modsim3 | 1192 \ endif 1193 1194" Modula 2 1195au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi setf modula2 1196 1197" Modula 3 (.m3, .i3, .mg, .ig) 1198au BufNewFile,BufRead *.[mi][3g] setf modula3 1199 1200" Monk 1201au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc setf monk 1202 1203" MOO 1204au BufNewFile,BufRead *.moo setf moo 1205 1206" Modconf 1207au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf 1208 1209" Mplayer config 1210au BufNewFile,BufRead mplayer.conf,*/.mplayer/config setf mplayerconf 1211 1212" Moterola S record 1213au BufNewFile,BufRead *.s19,*.s28,*.s37 setf srec 1214 1215" Mrxvtrc 1216au BufNewFile,BufRead mrxvtrc,.mrxvtrc setf mrxvtrc 1217 1218" Msql 1219au BufNewFile,BufRead *.msql setf msql 1220 1221" Mysql 1222au BufNewFile,BufRead *.mysql setf mysql 1223 1224" Mutt setup files (must be before catch *.rc) 1225au BufNewFile,BufRead */etc/Muttrc.d/* call s:StarSetf('muttrc') 1226 1227" M$ Resource files 1228au BufNewFile,BufRead *.rc,*.rch setf rc 1229 1230" MuPAD source 1231au BufRead,BufNewFile *.mu setf mupad 1232 1233" Mush 1234au BufNewFile,BufRead *.mush setf mush 1235 1236" Mutt setup file (also for Muttng) 1237au BufNewFile,BufRead Mutt{ng,}rc setf muttrc 1238 1239" Nano 1240au BufNewFile,BufRead */etc/nanorc,.nanorc setf nanorc 1241 1242" Nastran input/DMAP 1243"au BufNewFile,BufRead *.dat setf nastran 1244 1245" Natural 1246au BufNewFile,BufRead *.NS[ACGLMNPS] setf natural 1247 1248" Netrc 1249au BufNewFile,BufRead .netrc setf netrc 1250 1251" Ninja file 1252au BufNewFile,BufRead *.ninja setf ninja 1253 1254" Novell netware batch files 1255au BufNewFile,BufRead *.ncf setf ncf 1256 1257" Nroff/Troff (*.ms and *.t are checked below) 1258au BufNewFile,BufRead *.me 1259 \ if expand("<afile>") != "read.me" && expand("<afile>") != "click.me" | 1260 \ setf nroff | 1261 \ endif 1262au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff 1263au BufNewFile,BufRead *.[1-9] call s:FTnroff() 1264 1265" This function checks if one of the first five lines start with a dot. In 1266" that case it is probably an nroff file: 'filetype' is set and 1 is returned. 1267func! s:FTnroff() 1268 if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.' 1269 setf nroff 1270 return 1 1271 endif 1272 return 0 1273endfunc 1274 1275" Nroff or Objective C++ 1276au BufNewFile,BufRead *.mm call s:FTmm() 1277 1278func! s:FTmm() 1279 let n = 1 1280 while n < 10 1281 let line = getline(n) 1282 if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)' 1283 setf objcpp 1284 return 1285 endif 1286 let n = n + 1 1287 endwhile 1288 setf nroff 1289endfunc 1290 1291" Not Quite C 1292au BufNewFile,BufRead *.nqc setf nqc 1293 1294" NSIS 1295au BufNewFile,BufRead *.nsi,*.nsh setf nsis 1296 1297" OCAML 1298au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit setf ocaml 1299 1300" Occam 1301au BufNewFile,BufRead *.occ setf occam 1302 1303" Omnimark 1304au BufNewFile,BufRead *.xom,*.xin setf omnimark 1305 1306" OpenROAD 1307au BufNewFile,BufRead *.or setf openroad 1308 1309" OPL 1310au BufNewFile,BufRead *.[Oo][Pp][Ll] setf opl 1311 1312" Oracle config file 1313au BufNewFile,BufRead *.ora setf ora 1314 1315" Packet filter conf 1316au BufNewFile,BufRead pf.conf setf pf 1317 1318" Pam conf 1319au BufNewFile,BufRead */etc/pam.conf setf pamconf 1320 1321" PApp 1322au BufNewFile,BufRead *.papp,*.pxml,*.pxsl setf papp 1323 1324" Password file 1325au 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 1326 1327" Pascal (also *.p) 1328au BufNewFile,BufRead *.pas setf pascal 1329 1330" Delphi project file 1331au BufNewFile,BufRead *.dpr setf pascal 1332 1333" PDF 1334au BufNewFile,BufRead *.pdf setf pdf 1335 1336" Perl 1337if has("fname_case") 1338 au BufNewFile,BufRead *.pl,*.PL call s:FTpl() 1339else 1340 au BufNewFile,BufRead *.pl call s:FTpl() 1341endif 1342au BufNewFile,BufRead *.plx,*.al setf perl 1343au BufNewFile,BufRead *.p6,*.pm6 setf perl6 1344 1345func! s:FTpl() 1346 if exists("g:filetype_pl") 1347 exe "setf " . g:filetype_pl 1348 else 1349 " recognize Prolog by specific text in the first non-empty line 1350 " require a blank after the '%' because Perl uses "%list" and "%translate" 1351 let l = getline(nextnonblank(1)) 1352 if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-' 1353 setf prolog 1354 else 1355 setf perl 1356 endif 1357 endif 1358endfunc 1359 1360" Perl, XPM or XPM2 1361au BufNewFile,BufRead *.pm 1362 \ if getline(1) =~ "XPM2" | 1363 \ setf xpm2 | 1364 \ elseif getline(1) =~ "XPM" | 1365 \ setf xpm | 1366 \ else | 1367 \ setf perl | 1368 \ endif 1369 1370" Perl POD 1371au BufNewFile,BufRead *.pod setf pod 1372 1373" Php, php3, php4, etc. 1374" Also Phtml (was used for PHP 2 in the past) 1375" Also .ctp for Cake template file 1376au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php 1377 1378" Pike 1379au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike 1380 1381" Pinfo config 1382au BufNewFile,BufRead */etc/pinforc,*/.pinforc setf pinfo 1383 1384" Palm Resource compiler 1385au BufNewFile,BufRead *.rcp setf pilrc 1386 1387" Pine config 1388au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex setf pine 1389 1390" PL/M (also: *.inp) 1391au BufNewFile,BufRead *.plm,*.p36,*.pac setf plm 1392 1393" PL/SQL 1394au BufNewFile,BufRead *.pls,*.plsql setf plsql 1395 1396" PLP 1397au BufNewFile,BufRead *.plp setf plp 1398 1399" PO and PO template (GNU gettext) 1400au BufNewFile,BufRead *.po,*.pot setf po 1401 1402" Postfix main config 1403au BufNewFile,BufRead main.cf setf pfmain 1404 1405" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator) 1406au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai setf postscr 1407 1408" PostScript Printer Description 1409au BufNewFile,BufRead *.ppd setf ppd 1410 1411" Povray 1412au BufNewFile,BufRead *.pov setf pov 1413 1414" Povray configuration 1415au BufNewFile,BufRead .povrayrc setf povini 1416 1417" Povray, PHP or assembly 1418au BufNewFile,BufRead *.inc call s:FTinc() 1419 1420func! s:FTinc() 1421 if exists("g:filetype_inc") 1422 exe "setf " . g:filetype_inc 1423 else 1424 let lines = getline(1).getline(2).getline(3) 1425 if lines =~? "perlscript" 1426 setf aspperl 1427 elseif lines =~ "<%" 1428 setf aspvbs 1429 elseif lines =~ "<?" 1430 setf php 1431 else 1432 call s:FTasmsyntax() 1433 if exists("b:asmsyntax") 1434 exe "setf " . fnameescape(b:asmsyntax) 1435 else 1436 setf pov 1437 endif 1438 endif 1439 endif 1440endfunc 1441 1442" Printcap and Termcap 1443au BufNewFile,BufRead *printcap 1444 \ let b:ptcap_type = "print" | setf ptcap 1445au BufNewFile,BufRead *termcap 1446 \ let b:ptcap_type = "term" | setf ptcap 1447 1448" PCCTS / ANTRL 1449"au BufNewFile,BufRead *.g setf antrl 1450au BufNewFile,BufRead *.g setf pccts 1451 1452" PPWizard 1453au BufNewFile,BufRead *.it,*.ih setf ppwiz 1454 1455" Obj 3D file format 1456" TODO: is there a way to avoid MS-Windows Object files? 1457au BufNewFile,BufRead *.obj setf obj 1458 1459" Oracle Pro*C/C++ 1460au BufNewFile,BufRead *.pc setf proc 1461 1462" Privoxy actions file 1463au BufNewFile,BufRead *.action setf privoxy 1464 1465" Procmail 1466au BufNewFile,BufRead .procmail,.procmailrc setf procmail 1467 1468" Progress or CWEB 1469au BufNewFile,BufRead *.w call s:FTprogress_cweb() 1470 1471func! s:FTprogress_cweb() 1472 if exists("g:filetype_w") 1473 exe "setf " . g:filetype_w 1474 return 1475 endif 1476 if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE' 1477 setf progress 1478 else 1479 setf cweb 1480 endif 1481endfunc 1482 1483" Progress or assembly 1484au BufNewFile,BufRead *.i call s:FTprogress_asm() 1485 1486func! s:FTprogress_asm() 1487 if exists("g:filetype_i") 1488 exe "setf " . g:filetype_i 1489 return 1490 endif 1491 " This function checks for an assembly comment the first ten lines. 1492 " If not found, assume Progress. 1493 let lnum = 1 1494 while lnum <= 10 && lnum < line('$') 1495 let line = getline(lnum) 1496 if line =~ '^\s*;' || line =~ '^\*' 1497 call s:FTasm() 1498 return 1499 elseif line !~ '^\s*$' || line =~ '^/\*' 1500 " Not an empty line: Doesn't look like valid assembly code. 1501 " Or it looks like a Progress /* comment 1502 break 1503 endif 1504 let lnum = lnum + 1 1505 endw 1506 setf progress 1507endfunc 1508 1509" Progress or Pascal 1510au BufNewFile,BufRead *.p call s:FTprogress_pascal() 1511 1512func! s:FTprogress_pascal() 1513 if exists("g:filetype_p") 1514 exe "setf " . g:filetype_p 1515 return 1516 endif 1517 " This function checks for valid Pascal syntax in the first ten lines. 1518 " Look for either an opening comment or a program start. 1519 " If not found, assume Progress. 1520 let lnum = 1 1521 while lnum <= 10 && lnum < line('$') 1522 let line = getline(lnum) 1523 if line =~ '^\s*\(program\|unit\|procedure\|function\|const\|type\|var\)\>' 1524 \ || line =~ '^\s*{' || line =~ '^\s*(\*' 1525 setf pascal 1526 return 1527 elseif line !~ '^\s*$' || line =~ '^/\*' 1528 " Not an empty line: Doesn't look like valid Pascal code. 1529 " Or it looks like a Progress /* comment 1530 break 1531 endif 1532 let lnum = lnum + 1 1533 endw 1534 setf progress 1535endfunc 1536 1537 1538" Software Distributor Product Specification File (POSIX 1387.2-1995) 1539au BufNewFile,BufRead *.psf setf psf 1540au BufNewFile,BufRead INDEX,INFO 1541 \ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' | 1542 \ setf psf | 1543 \ endif 1544 1545" Prolog 1546au BufNewFile,BufRead *.pdb setf prolog 1547 1548" Promela 1549au BufNewFile,BufRead *.pml setf promela 1550 1551" Protocols 1552au BufNewFile,BufRead */etc/protocols setf protocols 1553 1554" Pyrex 1555au BufNewFile,BufRead *.pyx,*.pxd setf pyrex 1556 1557" Python 1558au BufNewFile,BufRead *.py,*.pyw setf python 1559 1560" Quixote (Python-based web framework) 1561au BufNewFile,BufRead *.ptl setf python 1562 1563" Radiance 1564au BufNewFile,BufRead *.rad,*.mat setf radiance 1565 1566" Ratpoison config/command files 1567au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison 1568 1569" RCS file 1570au BufNewFile,BufRead *\,v setf rcs 1571 1572" Readline 1573au BufNewFile,BufRead .inputrc,inputrc setf readline 1574 1575" Registry for MS-Windows 1576au BufNewFile,BufRead *.reg 1577 \ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif 1578 1579" Renderman Interface Bytestream 1580au BufNewFile,BufRead *.rib setf rib 1581 1582" Rexx 1583au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit setf rexx 1584 1585" R (Splus) 1586if has("fname_case") 1587 au BufNewFile,BufRead *.s,*.S setf r 1588else 1589 au BufNewFile,BufRead *.s setf r 1590endif 1591 1592" R Help file 1593if has("fname_case") 1594 au BufNewFile,BufRead *.rd,*.Rd setf rhelp 1595else 1596 au BufNewFile,BufRead *.rd setf rhelp 1597endif 1598 1599" R noweb file 1600if has("fname_case") 1601 au BufNewFile,BufRead *.Rnw,*.rnw,*.Snw,*.snw setf rnoweb 1602else 1603 au BufNewFile,BufRead *.rnw,*.snw setf rnoweb 1604endif 1605 1606" Rexx, Rebol or R 1607au BufNewFile,BufRead *.r,*.R call s:FTr() 1608 1609func! s:FTr() 1610 let max = line("$") > 50 ? 50 : line("$") 1611 1612 for n in range(1, max) 1613 " Rebol is easy to recognize, check for that first 1614 if getline(n) =~? '\<REBOL\>' 1615 setf rebol 1616 return 1617 endif 1618 endfor 1619 1620 for n in range(1, max) 1621 " R has # comments 1622 if getline(n) =~ '^\s*#' 1623 setf r 1624 return 1625 endif 1626 " Rexx has /* comments */ 1627 if getline(n) =~ '^\s*/\*' 1628 setf rexx 1629 return 1630 endif 1631 endfor 1632 1633 " Nothing recognized, use user default or assume Rexx 1634 if exists("g:filetype_r") 1635 exe "setf " . g:filetype_r 1636 else 1637 " Rexx used to be the default, but R appears to be much more popular. 1638 setf r 1639 endif 1640endfunc 1641 1642" Remind 1643au BufNewFile,BufRead .reminders,*.remind,*.rem setf remind 1644 1645" Resolv.conf 1646au BufNewFile,BufRead resolv.conf setf resolv 1647 1648" Relax NG Compact 1649au BufNewFile,BufRead *.rnc setf rnc 1650 1651" Relax NG XML 1652au BufNewFile,BufRead *.rng setf rng 1653 1654" RPL/2 1655au BufNewFile,BufRead *.rpl setf rpl 1656 1657" Robots.txt 1658au BufNewFile,BufRead robots.txt setf robots 1659 1660" Rpcgen 1661au BufNewFile,BufRead *.x setf rpcgen 1662 1663" reStructuredText Documentation Format 1664au BufNewFile,BufRead *.rst setf rst 1665 1666" RTF 1667au BufNewFile,BufRead *.rtf setf rtf 1668 1669" Interactive Ruby shell 1670au BufNewFile,BufRead .irbrc,irbrc setf ruby 1671 1672" Ruby 1673au BufNewFile,BufRead *.rb,*.rbw setf ruby 1674 1675" RubyGems 1676au BufNewFile,BufRead *.gemspec setf ruby 1677 1678" Rackup 1679au BufNewFile,BufRead *.ru setf ruby 1680 1681" Bundler 1682au BufNewFile,BufRead Gemfile setf ruby 1683 1684" Ruby on Rails 1685au BufNewFile,BufRead *.builder,*.rxml,*.rjs setf ruby 1686 1687" Rantfile and Rakefile is like Ruby 1688au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake setf ruby 1689 1690" S-lang (or shader language, or SmallLisp) 1691au BufNewFile,BufRead *.sl setf slang 1692 1693" Samba config 1694au BufNewFile,BufRead smb.conf setf samba 1695 1696" SAS script 1697au BufNewFile,BufRead *.sas setf sas 1698 1699" Sass 1700au BufNewFile,BufRead *.sass setf sass 1701 1702" Sather 1703au BufNewFile,BufRead *.sa setf sather 1704 1705" Scilab 1706au BufNewFile,BufRead *.sci,*.sce setf scilab 1707 1708" SCSS 1709au BufNewFile,BufRead *.scss setf scss 1710 1711" SD: Streaming Descriptors 1712au BufNewFile,BufRead *.sd setf sd 1713 1714" SDL 1715au BufNewFile,BufRead *.sdl,*.pr setf sdl 1716 1717" sed 1718au BufNewFile,BufRead *.sed setf sed 1719 1720" Sieve (RFC 3028) 1721au BufNewFile,BufRead *.siv setf sieve 1722 1723" Sendmail 1724au BufNewFile,BufRead sendmail.cf setf sm 1725 1726" Sendmail .mc files are actually m4. Could also be MS Message text file. 1727au BufNewFile,BufRead *.mc call s:McSetf() 1728 1729func! s:McSetf() 1730 " Rely on the file to start with a comment. 1731 " MS message text files use ';', Sendmail files use '#' or 'dnl' 1732 for lnum in range(1, min([line("$"), 20])) 1733 let line = getline(lnum) 1734 if line =~ '^\s*\(#\|dnl\)' 1735 setf m4 " Sendmail .mc file 1736 return 1737 elseif line =~ '^\s*;' 1738 setf msmessages " MS Message text file 1739 return 1740 endif 1741 endfor 1742 setf m4 " Default: Sendmail .mc file 1743endfunc 1744 1745" Services 1746au BufNewFile,BufRead */etc/services setf services 1747 1748" Service Location config 1749au BufNewFile,BufRead */etc/slp.conf setf slpconf 1750 1751" Service Location registration 1752au BufNewFile,BufRead */etc/slp.reg setf slpreg 1753 1754" Service Location SPI 1755au BufNewFile,BufRead */etc/slp.spi setf slpspi 1756 1757" Setserial config 1758au BufNewFile,BufRead */etc/serial.conf setf setserial 1759 1760" SGML 1761au BufNewFile,BufRead *.sgm,*.sgml 1762 \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' | 1763 \ setf sgmllnx | 1764 \ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' | 1765 \ let b:docbk_type = "sgml" | 1766 \ let b:docbk_ver = 4 | 1767 \ setf docbk | 1768 \ else | 1769 \ setf sgml | 1770 \ endif 1771 1772" SGMLDECL 1773au BufNewFile,BufRead *.decl,*.dcl,*.dec 1774 \ if getline(1).getline(2).getline(3) =~? '^<!SGML' | 1775 \ setf sgmldecl | 1776 \ endif 1777 1778" SGML catalog file 1779au BufNewFile,BufRead catalog setf catalog 1780au BufNewFile,BufRead sgml.catalog* call s:StarSetf('catalog') 1781 1782" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc. 1783" Gentoo ebuilds are actually bash scripts 1784au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash") 1785au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh") 1786au BufNewFile,BufRead */etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1)) 1787 1788" Also called from scripts.vim. 1789func! SetFileTypeSH(name) 1790 if expand("<amatch>") =~ g:ft_ignore_pat 1791 return 1792 endif 1793 if a:name =~ '\<csh\>' 1794 " Some .sh scripts contain #!/bin/csh. 1795 call SetFileTypeShell("csh") 1796 return 1797 elseif a:name =~ '\<tcsh\>' 1798 " Some .sh scripts contain #!/bin/tcsh. 1799 call SetFileTypeShell("tcsh") 1800 return 1801 elseif a:name =~ '\<zsh\>' 1802 " Some .sh scripts contain #!/bin/zsh. 1803 call SetFileTypeShell("zsh") 1804 return 1805 elseif a:name =~ '\<ksh\>' 1806 let b:is_kornshell = 1 1807 if exists("b:is_bash") 1808 unlet b:is_bash 1809 endif 1810 if exists("b:is_sh") 1811 unlet b:is_sh 1812 endif 1813 elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>' 1814 let b:is_bash = 1 1815 if exists("b:is_kornshell") 1816 unlet b:is_kornshell 1817 endif 1818 if exists("b:is_sh") 1819 unlet b:is_sh 1820 endif 1821 elseif a:name =~ '\<sh\>' 1822 let b:is_sh = 1 1823 if exists("b:is_kornshell") 1824 unlet b:is_kornshell 1825 endif 1826 if exists("b:is_bash") 1827 unlet b:is_bash 1828 endif 1829 endif 1830 call SetFileTypeShell("sh") 1831endfunc 1832 1833" For shell-like file types, check for an "exec" command hidden in a comment, 1834" as used for Tcl. 1835" Also called from scripts.vim, thus can't be local to this script. 1836func! SetFileTypeShell(name) 1837 if expand("<amatch>") =~ g:ft_ignore_pat 1838 return 1839 endif 1840 let l = 2 1841 while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)' 1842 " Skip empty and comment lines. 1843 let l = l + 1 1844 endwhile 1845 if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$' 1846 " Found an "exec" line after a comment with continuation 1847 let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '') 1848 if n =~ '\<tclsh\|\<wish' 1849 setf tcl 1850 return 1851 endif 1852 endif 1853 exe "setf " . a:name 1854endfunc 1855 1856" tcsh scripts 1857au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login call SetFileTypeShell("tcsh") 1858 1859" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh) 1860au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias call s:CSH() 1861 1862func! s:CSH() 1863 if exists("g:filetype_csh") 1864 call SetFileTypeShell(g:filetype_csh) 1865 elseif &shell =~ "tcsh" 1866 call SetFileTypeShell("tcsh") 1867 else 1868 call SetFileTypeShell("csh") 1869 endif 1870endfunc 1871 1872" Z-Shell script 1873au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks setf zsh 1874au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump* call s:StarSetf('zsh') 1875au BufNewFile,BufRead *.zsh setf zsh 1876 1877" Scheme 1878au BufNewFile,BufRead *.scm,*.ss,*.rkt setf scheme 1879 1880" Screen RC 1881au BufNewFile,BufRead .screenrc,screenrc setf screen 1882 1883" Simula 1884au BufNewFile,BufRead *.sim setf simula 1885 1886" SINDA 1887au BufNewFile,BufRead *.sin,*.s85 setf sinda 1888 1889" SiSU 1890au BufNewFile,BufRead *.sst,*.ssm,*.ssi,*.-sst,*._sst setf sisu 1891au BufNewFile,BufRead *.sst.meta,*.-sst.meta,*._sst.meta setf sisu 1892 1893" SKILL 1894au BufNewFile,BufRead *.il,*.ils,*.cdf setf skill 1895 1896" SLRN 1897au BufNewFile,BufRead .slrnrc setf slrnrc 1898au BufNewFile,BufRead *.score setf slrnsc 1899 1900" Smalltalk (and TeX) 1901au BufNewFile,BufRead *.st setf st 1902au BufNewFile,BufRead *.cls 1903 \ if getline(1) =~ '^%' | 1904 \ setf tex | 1905 \ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' | 1906 \ setf rexx | 1907 \ else | 1908 \ setf st | 1909 \ endif 1910 1911" Smarty templates 1912au BufNewFile,BufRead *.tpl setf smarty 1913 1914" SMIL or XML 1915au BufNewFile,BufRead *.smil 1916 \ if getline(1) =~ '<?\s*xml.*?>' | 1917 \ setf xml | 1918 \ else | 1919 \ setf smil | 1920 \ endif 1921 1922" SMIL or SNMP MIB file 1923au BufNewFile,BufRead *.smi 1924 \ if getline(1) =~ '\<smil\>' | 1925 \ setf smil | 1926 \ else | 1927 \ setf mib | 1928 \ endif 1929 1930" SMITH 1931au BufNewFile,BufRead *.smt,*.smith setf smith 1932 1933" Snobol4 and spitbol 1934au BufNewFile,BufRead *.sno,*.spt setf snobol4 1935 1936" SNMP MIB files 1937au BufNewFile,BufRead *.mib,*.my setf mib 1938 1939" Snort Configuration 1940au BufNewFile,BufRead *.hog,snort.conf,vision.conf setf hog 1941au BufNewFile,BufRead *.rules call s:FTRules() 1942 1943let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*' 1944func! s:FTRules() 1945 let path = expand('<amatch>:p') 1946 if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$' 1947 setf udevrules 1948 return 1949 endif 1950 if path =~ '^/etc/ufw/' 1951 setf conf " Better than hog 1952 return 1953 endif 1954 try 1955 let config_lines = readfile('/etc/udev/udev.conf') 1956 catch /^Vim\%((\a\+)\)\=:E484/ 1957 setf hog 1958 return 1959 endtry 1960 let dir = expand('<amatch>:p:h') 1961 for line in config_lines 1962 if line =~ s:ft_rules_udev_rules_pattern 1963 let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "") 1964 if dir == udev_rules 1965 setf udevrules 1966 endif 1967 break 1968 endif 1969 endfor 1970 setf hog 1971endfunc 1972 1973 1974" Spec (Linux RPM) 1975au BufNewFile,BufRead *.spec setf spec 1976 1977" Speedup (AspenTech plant simulator) 1978au BufNewFile,BufRead *.speedup,*.spdata,*.spd setf spup 1979 1980" Slice 1981au BufNewFile,BufRead *.ice setf slice 1982 1983" Spice 1984au BufNewFile,BufRead *.sp,*.spice setf spice 1985 1986" Spyce 1987au BufNewFile,BufRead *.spy,*.spi setf spyce 1988 1989" Squid 1990au BufNewFile,BufRead squid.conf setf squid 1991 1992" SQL for Oracle Designer 1993au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks setf sql 1994 1995" SQL 1996au BufNewFile,BufRead *.sql call s:SQL() 1997 1998func! s:SQL() 1999 if exists("g:filetype_sql") 2000 exe "setf " . g:filetype_sql 2001 else 2002 setf sql 2003 endif 2004endfunc 2005 2006" SQLJ 2007au BufNewFile,BufRead *.sqlj setf sqlj 2008 2009" SQR 2010au BufNewFile,BufRead *.sqr,*.sqi setf sqr 2011 2012" OpenSSH configuration 2013au BufNewFile,BufRead ssh_config,*/.ssh/config setf sshconfig 2014 2015" OpenSSH server configuration 2016au BufNewFile,BufRead sshd_config setf sshdconfig 2017 2018" Stata 2019au BufNewFile,BufRead *.ado,*.class,*.do,*.imata,*.mata setf stata 2020 2021" SMCL 2022au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl setf smcl 2023 2024" Stored Procedures 2025au BufNewFile,BufRead *.stp setf stp 2026 2027" Standard ML 2028au BufNewFile,BufRead *.sml setf sml 2029 2030" Sratus VOS command macro 2031au BufNewFile,BufRead *.cm setf voscm 2032 2033" Sysctl 2034au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf setf sysctl 2035 2036" Synopsys Design Constraints 2037au BufNewFile,BufRead *.sdc setf sdc 2038 2039" Sudoers 2040au BufNewFile,BufRead */etc/sudoers,sudoers.tmp setf sudoers 2041 2042" SVG (Scalable Vector Graphics) 2043au BufNewFile,BufRead *.svg setf svg 2044 2045" If the file has an extension of 't' and is in a directory 't' then it is 2046" almost certainly a Perl test file. 2047" If the first line starts with '#' and contains 'perl' it's probably a Perl 2048" file. 2049" (Slow test) If a file contains a 'use' statement then it is almost certainly 2050" a Perl file. 2051func! s:FTperl() 2052 if expand("%:e") == 't' && expand("%:p:h:t") == 't' 2053 setf perl 2054 return 1 2055 endif 2056 if getline(1)[0] == '#' && getline(1) =~ 'perl' 2057 setf perl 2058 return 1 2059 endif 2060 if search('^use\s\s*\k', 'nc', 30) 2061 setf perl 2062 return 1 2063 endif 2064 return 0 2065endfunc 2066 2067" Tads (or Nroff or Perl test file) 2068au BufNewFile,BufRead *.t 2069 \ if !s:FTnroff() && !s:FTperl() | setf tads | endif 2070 2071" Tags 2072au BufNewFile,BufRead tags setf tags 2073 2074" TAK 2075au BufNewFile,BufRead *.tak setf tak 2076 2077" Task 2078au BufRead,BufNewFile {pending,completed,undo}.data setf taskdata 2079au BufRead,BufNewFile *.task setf taskedit 2080 2081" Tcl (JACL too) 2082au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl setf tcl 2083 2084" TealInfo 2085au BufNewFile,BufRead *.tli setf tli 2086 2087" Telix Salt 2088au BufNewFile,BufRead *.slt setf tsalt 2089 2090" Terminfo 2091au BufNewFile,BufRead *.ti setf terminfo 2092 2093" TeX 2094au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex 2095au BufNewFile,BufRead *.tex call s:FTtex() 2096 2097" Choose context, plaintex, or tex (LaTeX) based on these rules: 2098" 1. Check the first line of the file for "%&<format>". 2099" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords. 2100" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc. 2101func! s:FTtex() 2102 let firstline = getline(1) 2103 if firstline =~ '^%&\s*\a\+' 2104 let format = tolower(matchstr(firstline, '\a\+')) 2105 let format = substitute(format, 'pdf', '', '') 2106 if format == 'tex' 2107 let format = 'plain' 2108 endif 2109 else 2110 " Default value, may be changed later: 2111 let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain' 2112 " Save position, go to the top of the file, find first non-comment line. 2113 let save_cursor = getpos('.') 2114 call cursor(1,1) 2115 let firstNC = search('^\s*[^[:space:]%]', 'c', 1000) 2116 if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword. 2117 let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>' 2118 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\>' 2119 let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)', 2120 \ 'cnp', firstNC + 1000) 2121 if kwline == 1 " lpat matched 2122 let format = 'latex' 2123 elseif kwline == 2 " cpat matched 2124 let format = 'context' 2125 endif " If neither matched, keep default set above. 2126 " let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000) 2127 " let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000) 2128 " if cline > 0 2129 " let format = 'context' 2130 " endif 2131 " if lline > 0 && (cline == 0 || cline > lline) 2132 " let format = 'tex' 2133 " endif 2134 endif " firstNC 2135 call setpos('.', save_cursor) 2136 endif " firstline =~ '^%&\s*\a\+' 2137 2138 " Translation from formats to file types. TODO: add AMSTeX, RevTex, others? 2139 if format == 'plain' 2140 setf plaintex 2141 elseif format == 'context' 2142 setf context 2143 else " probably LaTeX 2144 setf tex 2145 endif 2146 return 2147endfunc 2148 2149" ConTeXt 2150au BufNewFile,BufRead tex/context/*/*.tex,*.mkii,*.mkiv setf context 2151 2152" Texinfo 2153au BufNewFile,BufRead *.texinfo,*.texi,*.txi setf texinfo 2154 2155" TeX configuration 2156au BufNewFile,BufRead texmf.cnf setf texmf 2157 2158" Tidy config 2159au BufNewFile,BufRead .tidyrc,tidyrc setf tidy 2160 2161" TF mud client 2162au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf 2163 2164" TPP - Text Presentation Program 2165au BufNewFile,BufReadPost *.tpp setf tpp 2166 2167" Treetop 2168au BufRead,BufNewFile *.treetop setf treetop 2169 2170" Trustees 2171au BufNewFile,BufRead trustees.conf setf trustees 2172 2173" TSS - Geometry 2174au BufNewFile,BufReadPost *.tssgm setf tssgm 2175 2176" TSS - Optics 2177au BufNewFile,BufReadPost *.tssop setf tssop 2178 2179" TSS - Command Line (temporary) 2180au BufNewFile,BufReadPost *.tsscl setf tsscl 2181 2182" TWIG files 2183au BufNewFile,BufReadPost *.twig setf twig 2184 2185" Motif UIT/UIL files 2186au BufNewFile,BufRead *.uit,*.uil setf uil 2187 2188" Udev conf 2189au BufNewFile,BufRead */etc/udev/udev.conf setf udevconf 2190 2191" Udev permissions 2192au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm 2193" 2194" Udev symlinks config 2195au BufNewFile,BufRead */etc/udev/cdsymlinks.conf setf sh 2196 2197" UnrealScript 2198au BufNewFile,BufRead *.uc setf uc 2199 2200" Updatedb 2201au BufNewFile,BufRead */etc/updatedb.conf setf updatedb 2202 2203" Upstart (init(8)) config files 2204au BufNewFile,BufRead */usr/share/upstart/*.conf setf upstart 2205au BufNewFile,BufRead */usr/share/upstart/*.override setf upstart 2206au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override setf upstart 2207au BufNewFile,BufRead */.init/*.conf,*/.init/*.override setf upstart 2208au BufNewFile,BufRead */.config/upstart/*.conf setf upstart 2209au BufNewFile,BufRead */.config/upstart/*.override setf upstart 2210 2211" Vera 2212au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera 2213 2214" Verilog HDL 2215au BufNewFile,BufRead *.v setf verilog 2216 2217" Verilog-AMS HDL 2218au BufNewFile,BufRead *.va,*.vams setf verilogams 2219 2220" VHDL 2221au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl 2222au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl') 2223 2224" Vim script 2225au BufNewFile,BufRead *.vim,*.vba,.exrc,_exrc setf vim 2226 2227" Viminfo file 2228au BufNewFile,BufRead .viminfo,_viminfo setf viminfo 2229 2230" Virata Config Script File or Drupal module 2231au BufRead,BufNewFile *.hw,*.module,*.pkg 2232 \ if getline(1) =~ '<?php' | 2233 \ setf php | 2234 \ else | 2235 \ setf virata | 2236 \ endif 2237 2238" Visual Basic (also uses *.bas) or FORM 2239au BufNewFile,BufRead *.frm call s:FTVB("form") 2240 2241" SaxBasic is close to Visual Basic 2242au BufNewFile,BufRead *.sba setf vb 2243 2244" Vgrindefs file 2245au BufNewFile,BufRead vgrindefs setf vgrindefs 2246 2247" VRML V1.0c 2248au BufNewFile,BufRead *.wrl setf vrml 2249 2250" Webmacro 2251au BufNewFile,BufRead *.wm setf webmacro 2252 2253" Wget config 2254au BufNewFile,BufRead .wgetrc,wgetrc setf wget 2255 2256" Website MetaLanguage 2257au BufNewFile,BufRead *.wml setf wml 2258 2259" Winbatch 2260au BufNewFile,BufRead *.wbt setf winbatch 2261 2262" WSML 2263au BufNewFile,BufRead *.wsml setf wsml 2264 2265" WvDial 2266au BufNewFile,BufRead wvdial.conf,.wvdialrc setf wvdial 2267 2268" CVS RC file 2269au BufNewFile,BufRead .cvsrc setf cvsrc 2270 2271" CVS commit file 2272au BufNewFile,BufRead cvs\d\+ setf cvs 2273 2274" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment 2275" lines in a WEB file). 2276au BufNewFile,BufRead *.web 2277 \ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" | 2278 \ setf web | 2279 \ else | 2280 \ setf winbatch | 2281 \ endif 2282 2283" Windows Scripting Host and Windows Script Component 2284au BufNewFile,BufRead *.ws[fc] setf wsh 2285 2286" XHTML 2287au BufNewFile,BufRead *.xhtml,*.xht setf xhtml 2288 2289" X Pixmap (dynamically sets colors, use BufEnter to make it work better) 2290au BufEnter *.xpm 2291 \ if getline(1) =~ "XPM2" | 2292 \ setf xpm2 | 2293 \ else | 2294 \ setf xpm | 2295 \ endif 2296au BufEnter *.xpm2 setf xpm2 2297 2298" XFree86 config 2299au BufNewFile,BufRead XF86Config 2300 \ if getline(1) =~ '\<XConfigurator\>' | 2301 \ let b:xf86conf_xfree86_version = 3 | 2302 \ endif | 2303 \ setf xf86conf 2304au BufNewFile,BufRead */xorg.conf.d/*.conf 2305 \ let b:xf86conf_xfree86_version = 4 | 2306 \ setf xf86conf 2307 2308" Xorg config 2309au BufNewFile,BufRead xorg.conf,xorg.conf-4 let b:xf86conf_xfree86_version = 4 | setf xf86conf 2310 2311" Xinetd conf 2312au BufNewFile,BufRead */etc/xinetd.conf setf xinetd 2313 2314" XS Perl extension interface language 2315au BufNewFile,BufRead *.xs setf xs 2316 2317" X resources file 2318au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults 2319 2320" Xmath 2321au BufNewFile,BufRead *.msc,*.msf setf xmath 2322au BufNewFile,BufRead *.ms 2323 \ if !s:FTnroff() | setf xmath | endif 2324 2325" XML specific variants: docbk and xbl 2326au BufNewFile,BufRead *.xml call s:FTxml() 2327 2328func! s:FTxml() 2329 let n = 1 2330 while n < 100 && n < line("$") 2331 let line = getline(n) 2332 " DocBook 4 or DocBook 5. 2333 let is_docbook4 = line =~ '<!DOCTYPE.*DocBook' 2334 let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"' 2335 if is_docbook4 || is_docbook5 2336 let b:docbk_type = "xml" 2337 if is_docbook5 2338 let b:docbk_ver = 5 2339 else 2340 let b:docbk_ver = 4 2341 endif 2342 setf docbk 2343 return 2344 endif 2345 if line =~ 'xmlns:xbl="http://www.mozilla.org/xbl"' 2346 setf xbl 2347 return 2348 endif 2349 let n += 1 2350 endwhile 2351 setf xml 2352endfunc 2353 2354" XMI (holding UML models) is also XML 2355au BufNewFile,BufRead *.xmi setf xml 2356 2357" CSPROJ files are Visual Studio.NET's XML-based project config files 2358au BufNewFile,BufRead *.csproj,*.csproj.user setf xml 2359 2360" Qt Linguist translation source and Qt User Interface Files are XML 2361au BufNewFile,BufRead *.ts,*.ui setf xml 2362 2363" TPM's are RDF-based descriptions of TeX packages (Nikolai Weibull) 2364au BufNewFile,BufRead *.tpm setf xml 2365 2366" Xdg menus 2367au BufNewFile,BufRead */etc/xdg/menus/*.menu setf xml 2368 2369" ATI graphics driver configuration 2370au BufNewFile,BufRead fglrxrc setf xml 2371 2372" XLIFF (XML Localisation Interchange File Format) is also XML 2373au BufNewFile,BufRead *.xlf setf xml 2374au BufNewFile,BufRead *.xliff setf xml 2375 2376" XML User Interface Language 2377au BufNewFile,BufRead *.xul setf xml 2378 2379" X11 xmodmap (also see below) 2380au BufNewFile,BufRead *Xmodmap setf xmodmap 2381 2382" Xquery 2383au BufNewFile,BufRead *.xq,*.xql,*.xqm,*.xquery,*.xqy setf xquery 2384 2385" XSD 2386au BufNewFile,BufRead *.xsd setf xsd 2387 2388" Xslt 2389au BufNewFile,BufRead *.xsl,*.xslt setf xslt 2390 2391" Yacc 2392au BufNewFile,BufRead *.yy setf yacc 2393 2394" Yacc or racc 2395au BufNewFile,BufRead *.y call s:FTy() 2396 2397func! s:FTy() 2398 let n = 1 2399 while n < 100 && n < line("$") 2400 let line = getline(n) 2401 if line =~ '^\s*%' 2402 setf yacc 2403 return 2404 endif 2405 if getline(n) =~ '^\s*\(#\|class\>\)' && getline(n) !~ '^\s*#\s*include' 2406 setf racc 2407 return 2408 endif 2409 let n = n + 1 2410 endwhile 2411 setf yacc 2412endfunc 2413 2414 2415" Yaml 2416au BufNewFile,BufRead *.yaml,*.yml setf yaml 2417 2418" yum conf (close enough to dosini) 2419au BufNewFile,BufRead */etc/yum.conf setf dosini 2420 2421" Zimbu 2422au BufNewFile,BufRead *.zu setf zimbu 2423 2424" Zope 2425" dtml (zope dynamic template markup language), pt (zope page template), 2426" cpt (zope form controller page template) 2427au BufNewFile,BufRead *.dtml,*.pt,*.cpt call s:FThtml() 2428" zsql (zope sql method) 2429au BufNewFile,BufRead *.zsql call s:SQL() 2430 2431" Z80 assembler asz80 2432au BufNewFile,BufRead *.z8a setf z8a 2433 2434augroup END 2435 2436 2437" Source the user-specified filetype file, for backwards compatibility with 2438" Vim 5.x. 2439if exists("myfiletypefile") && filereadable(expand(myfiletypefile)) 2440 execute "source " . myfiletypefile 2441endif 2442 2443 2444" Check for "*" after loading myfiletypefile, so that scripts.vim is only used 2445" when there are no matching file name extensions. 2446" Don't do this for compressed files. 2447augroup filetypedetect 2448au BufNewFile,BufRead * 2449 \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat 2450 \ | runtime! scripts.vim | endif 2451au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif 2452 2453 2454" Extra checks for when no filetype has been detected now. Mostly used for 2455" patterns that end in "*". E.g., "zsh*" matches "zsh.vim", but that's a Vim 2456" script file. 2457" Most of these should call s:StarSetf() to avoid names ending in .gz and the 2458" like are used. 2459 2460" More Apache config files 2461au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf* call s:StarSetf('apache') 2462au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf* call s:StarSetf('apache') 2463 2464" Asterisk config file 2465au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk') 2466au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm') 2467 2468" Bazaar version control 2469au BufNewFile,BufRead bzr_log.* setf bzr 2470 2471" BIND zone 2472au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone') 2473 2474" Calendar 2475au BufNewFile,BufRead */.calendar/*, 2476 \*/share/calendar/*/calendar.*,*/share/calendar/calendar.* 2477 \ call s:StarSetf('calendar') 2478 2479" Changelog 2480au BufNewFile,BufRead [cC]hange[lL]og* 2481 \ if getline(1) =~ '; urgency=' 2482 \| call s:StarSetf('debchangelog') 2483 \|else 2484 \| call s:StarSetf('changelog') 2485 \|endif 2486 2487" Crontab 2488au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/* call s:StarSetf('crontab') 2489 2490" dnsmasq(8) configuration 2491au BufNewFile,BufRead */etc/dnsmasq.d/* call s:StarSetf('dnsmasq') 2492 2493" Dracula 2494au BufNewFile,BufRead drac.* call s:StarSetf('dracula') 2495 2496" Fvwm 2497au BufNewFile,BufRead */.fvwm/* call s:StarSetf('fvwm') 2498au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook 2499 \ let b:fvwm_version = 1 | call s:StarSetf('fvwm') 2500au BufNewFile,BufRead *fvwm2rc* 2501 \ if expand("<afile>:e") == "m4" 2502 \| call s:StarSetf('fvwm2m4') 2503 \|else 2504 \| let b:fvwm_version = 2 | call s:StarSetf('fvwm') 2505 \|endif 2506 2507" Gedcom 2508au BufNewFile,BufRead */tmp/lltmp* call s:StarSetf('gedcom') 2509 2510" GTK RC 2511au BufNewFile,BufRead .gtkrc*,gtkrc* call s:StarSetf('gtkrc') 2512 2513" Jam 2514au BufNewFile,BufRead Prl*.*,JAM*.* call s:StarSetf('jam') 2515 2516" Jargon 2517au! BufNewFile,BufRead *jarg* 2518 \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE' 2519 \| call s:StarSetf('jargon') 2520 \|endif 2521 2522" Kconfig 2523au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig') 2524 2525" Lilo: Linux loader 2526au BufNewFile,BufRead lilo.conf* call s:StarSetf('lilo') 2527 2528" Logcheck 2529au BufNewFile,BufRead */etc/logcheck/*.d*/* call s:StarSetf('logcheck') 2530 2531" Makefile 2532au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make') 2533 2534" Ruby Makefile 2535au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby') 2536 2537" Mail (also matches muttrc.vim, so this is below the other checks) 2538au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\} setf mail 2539 2540" Modconf 2541au BufNewFile,BufRead */etc/modutils/* 2542 \ if executable(expand("<afile>")) != 1 2543 \| call s:StarSetf('modconf') 2544 \|endif 2545au BufNewFile,BufRead */etc/modprobe.* call s:StarSetf('modconf') 2546 2547" Mutt setup file 2548au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc* call s:StarSetf('muttrc') 2549au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc* call s:StarSetf('muttrc') 2550 2551" Nroff macros 2552au BufNewFile,BufRead tmac.* call s:StarSetf('nroff') 2553 2554" Pam conf 2555au BufNewFile,BufRead */etc/pam.d/* call s:StarSetf('pamconf') 2556 2557" Printcap and Termcap 2558au BufNewFile,BufRead *printcap* 2559 \ if !did_filetype() 2560 \| let b:ptcap_type = "print" | call s:StarSetf('ptcap') 2561 \|endif 2562au BufNewFile,BufRead *termcap* 2563 \ if !did_filetype() 2564 \| let b:ptcap_type = "term" | call s:StarSetf('ptcap') 2565 \|endif 2566 2567" ReDIF 2568" Only used when the .rdf file was not detected to be XML. 2569au BufRead,BufNewFile *.rdf call s:Redif() 2570func! s:Redif() 2571 let lnum = 1 2572 while lnum <= 5 && lnum < line('$') 2573 if getline(lnum) =~ "^\ctemplate-type:" 2574 setf redif 2575 return 2576 endif 2577 let lnum = lnum + 1 2578 endwhile 2579endfunc 2580 2581" Remind 2582au BufNewFile,BufRead .reminders* call s:StarSetf('remind') 2583 2584" Vim script 2585au BufNewFile,BufRead *vimrc* call s:StarSetf('vim') 2586 2587" Subversion commit file 2588au BufNewFile,BufRead svn-commit*.tmp setf svn 2589 2590" X resources file 2591au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults') 2592 2593" XFree86 config 2594au BufNewFile,BufRead XF86Config-4* 2595 \ let b:xf86conf_xfree86_version = 4 | call s:StarSetf('xf86conf') 2596au BufNewFile,BufRead XF86Config* 2597 \ if getline(1) =~ '\<XConfigurator\>' 2598 \| let b:xf86conf_xfree86_version = 3 2599 \|endif 2600 \|call s:StarSetf('xf86conf') 2601 2602" X11 xmodmap 2603au BufNewFile,BufRead *xmodmap* call s:StarSetf('xmodmap') 2604 2605" Xinetd conf 2606au BufNewFile,BufRead */etc/xinetd.d/* call s:StarSetf('xinetd') 2607 2608" yum conf (close enough to dosini) 2609au BufNewFile,BufRead */etc/yum.repos.d/* call s:StarSetf('dosini') 2610 2611" Z-Shell script 2612au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh') 2613 2614 2615" Plain text files, needs to be far down to not override others. This avoids 2616" the "conf" type being used if there is a line starting with '#'. 2617au BufNewFile,BufRead *.txt,*.text setf text 2618 2619 2620" Use the filetype detect plugins. They may overrule any of the previously 2621" detected filetypes. 2622runtime! ftdetect/*.vim 2623 2624" NOTE: The above command could have ended the filetypedetect autocmd group 2625" and started another one. Let's make sure it has ended to get to a consistent 2626" state. 2627augroup END 2628 2629" Generic configuration file (check this last, it's just guessing!) 2630au filetypedetect BufNewFile,BufRead,StdinReadPost * 2631 \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat 2632 \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#' 2633 \ || getline(4) =~ '^#' || getline(5) =~ '^#') | 2634 \ setf conf | 2635 \ endif 2636 2637 2638" If the GUI is already running, may still need to install the Syntax menu. 2639" Don't do it when the 'M' flag is included in 'guioptions'. 2640if has("menu") && has("gui_running") 2641 \ && !exists("did_install_syntax_menu") && &guioptions !~# "M" 2642 source <sfile>:p:h/menu.vim 2643endif 2644 2645" Function called for testing all functions defined here. These are 2646" script-local, thus need to be executed here. 2647" Returns a string with error messages (hopefully empty). 2648func! TestFiletypeFuncs(testlist) 2649 let output = '' 2650 for f in a:testlist 2651 try 2652 exe f 2653 catch 2654 let output = output . "\n" . f . ": " . v:exception 2655 endtry 2656 endfor 2657 return output 2658endfunc 2659 2660" Restore 'cpoptions' 2661let &cpo = s:cpo_save 2662unlet s:cpo_save 2663