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