1" Vim support file to detect file types 2" 3" Maintainer: Bram Moolenaar <[email protected]> 4" Last Change: 2010 Jul 30 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 1288au BufNewFile,BufRead *.p6,*.pm6 setf perl6 1289 1290func! s:FTpl() 1291 if exists("g:filetype_pl") 1292 exe "setf " . g:filetype_pl 1293 else 1294 " recognize Prolog by specific text in the first non-empty line 1295 " require a blank after the '%' because Perl uses "%list" and "%translate" 1296 let l = getline(nextnonblank(1)) 1297 if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-' 1298 setf prolog 1299 else 1300 setf perl 1301 endif 1302 endif 1303endfunc 1304 1305" Perl, XPM or XPM2 1306au BufNewFile,BufRead *.pm 1307 \ if getline(1) =~ "XPM2" | 1308 \ setf xpm2 | 1309 \ elseif getline(1) =~ "XPM" | 1310 \ setf xpm | 1311 \ else | 1312 \ setf perl | 1313 \ endif 1314 1315" Perl POD 1316au BufNewFile,BufRead *.pod setf pod 1317 1318" Php, php3, php4, etc. 1319" Also Phtml (was used for PHP 2 in the past) 1320" Also .ctp for Cake template file 1321au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php 1322 1323" Pike 1324au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike 1325 1326" Pinfo config 1327au BufNewFile,BufRead */etc/pinforc,*/.pinforc setf pinfo 1328 1329" Palm Resource compiler 1330au BufNewFile,BufRead *.rcp setf pilrc 1331 1332" Pine config 1333au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex setf pine 1334 1335" PL/M (also: *.inp) 1336au BufNewFile,BufRead *.plm,*.p36,*.pac setf plm 1337 1338" PL/SQL 1339au BufNewFile,BufRead *.pls,*.plsql setf plsql 1340 1341" PLP 1342au BufNewFile,BufRead *.plp setf plp 1343 1344" PO and PO template (GNU gettext) 1345au BufNewFile,BufRead *.po,*.pot setf po 1346 1347" Postfix main config 1348au BufNewFile,BufRead main.cf setf pfmain 1349 1350" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator) 1351au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai setf postscr 1352 1353" PostScript Printer Description 1354au BufNewFile,BufRead *.ppd setf ppd 1355 1356" Povray 1357au BufNewFile,BufRead *.pov setf pov 1358 1359" Povray configuration 1360au BufNewFile,BufRead .povrayrc setf povini 1361 1362" Povray, PHP or assembly 1363au BufNewFile,BufRead *.inc call s:FTinc() 1364 1365func! s:FTinc() 1366 if exists("g:filetype_inc") 1367 exe "setf " . g:filetype_inc 1368 else 1369 let lines = getline(1).getline(2).getline(3) 1370 if lines =~? "perlscript" 1371 setf aspperl 1372 elseif lines =~ "<%" 1373 setf aspvbs 1374 elseif lines =~ "<?" 1375 setf php 1376 else 1377 call s:FTasmsyntax() 1378 if exists("b:asmsyntax") 1379 exe "setf " . fnameescape(b:asmsyntax) 1380 else 1381 setf pov 1382 endif 1383 endif 1384 endif 1385endfunc 1386 1387" Printcap and Termcap 1388au BufNewFile,BufRead *printcap 1389 \ let b:ptcap_type = "print" | setf ptcap 1390au BufNewFile,BufRead *termcap 1391 \ let b:ptcap_type = "term" | setf ptcap 1392 1393" PCCTS / ANTRL 1394"au BufNewFile,BufRead *.g setf antrl 1395au BufNewFile,BufRead *.g setf pccts 1396 1397" PPWizard 1398au BufNewFile,BufRead *.it,*.ih setf ppwiz 1399 1400" Obj 3D file format 1401" TODO: is there a way to avoid MS-Windows Object files? 1402au BufNewFile,BufRead *.obj setf obj 1403 1404" Oracle Pro*C/C++ 1405au BufNewFile,BufRead *.pc setf proc 1406 1407" Privoxy actions file 1408au BufNewFile,BufRead *.action setf privoxy 1409 1410" Procmail 1411au BufNewFile,BufRead .procmail,.procmailrc setf procmail 1412 1413" Progress or CWEB 1414au BufNewFile,BufRead *.w call s:FTprogress_cweb() 1415 1416func! s:FTprogress_cweb() 1417 if exists("g:filetype_w") 1418 exe "setf " . g:filetype_w 1419 return 1420 endif 1421 if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE' 1422 setf progress 1423 else 1424 setf cweb 1425 endif 1426endfunc 1427 1428" Progress or assembly 1429au BufNewFile,BufRead *.i call s:FTprogress_asm() 1430 1431func! s:FTprogress_asm() 1432 if exists("g:filetype_i") 1433 exe "setf " . g:filetype_i 1434 return 1435 endif 1436 " This function checks for an assembly comment the first ten lines. 1437 " If not found, assume Progress. 1438 let lnum = 1 1439 while lnum <= 10 && lnum < line('$') 1440 let line = getline(lnum) 1441 if line =~ '^\s*;' || line =~ '^\*' 1442 call s:FTasm() 1443 return 1444 elseif line !~ '^\s*$' || line =~ '^/\*' 1445 " Not an empty line: Doesn't look like valid assembly code. 1446 " Or it looks like a Progress /* comment 1447 break 1448 endif 1449 let lnum = lnum + 1 1450 endw 1451 setf progress 1452endfunc 1453 1454" Progress or Pascal 1455au BufNewFile,BufRead *.p call s:FTprogress_pascal() 1456 1457func! s:FTprogress_pascal() 1458 if exists("g:filetype_p") 1459 exe "setf " . g:filetype_p 1460 return 1461 endif 1462 " This function checks for valid Pascal syntax in the first ten lines. 1463 " Look for either an opening comment or a program start. 1464 " If not found, assume Progress. 1465 let lnum = 1 1466 while lnum <= 10 && lnum < line('$') 1467 let line = getline(lnum) 1468 if line =~ '^\s*\(program\|unit\|procedure\|function\|const\|type\|var\)\>' 1469 \ || line =~ '^\s*{' || line =~ '^\s*(\*' 1470 setf pascal 1471 return 1472 elseif line !~ '^\s*$' || line =~ '^/\*' 1473 " Not an empty line: Doesn't look like valid Pascal code. 1474 " Or it looks like a Progress /* comment 1475 break 1476 endif 1477 let lnum = lnum + 1 1478 endw 1479 setf progress 1480endfunc 1481 1482 1483" Software Distributor Product Specification File (POSIX 1387.2-1995) 1484au BufNewFile,BufRead *.psf setf psf 1485au BufNewFile,BufRead INDEX,INFO 1486 \ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' | 1487 \ setf psf | 1488 \ endif 1489 1490" Prolog 1491au BufNewFile,BufRead *.pdb setf prolog 1492 1493" Promela 1494au BufNewFile,BufRead *.pml setf promela 1495 1496" Protocols 1497au BufNewFile,BufRead /etc/protocols setf protocols 1498 1499" Pyrex 1500au BufNewFile,BufRead *.pyx,*.pxd setf pyrex 1501 1502" Python 1503au BufNewFile,BufRead *.py,*.pyw setf python 1504 1505" Quixote (Python-based web framework) 1506au BufNewFile,BufRead *.ptl setf python 1507 1508" Radiance 1509au BufNewFile,BufRead *.rad,*.mat setf radiance 1510 1511" Ratpoison config/command files 1512au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison 1513 1514" RCS file 1515au BufNewFile,BufRead *\,v setf rcs 1516 1517" Readline 1518au BufNewFile,BufRead .inputrc,inputrc setf readline 1519 1520" Registry for MS-Windows 1521au BufNewFile,BufRead *.reg 1522 \ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif 1523 1524" Renderman Interface Bytestream 1525au BufNewFile,BufRead *.rib setf rib 1526 1527" Rexx 1528au BufNewFile,BufRead *.rexx,*.rex,*.jrexx,*.rxj,*.orx setf rexx 1529 1530" R (Splus) 1531if has("fname_case") 1532 au BufNewFile,BufRead *.s,*.S setf r 1533else 1534 au BufNewFile,BufRead *.s setf r 1535endif 1536 1537" R Help file 1538if has("fname_case") 1539 au BufNewFile,BufRead *.rd,*.Rd setf rhelp 1540else 1541 au BufNewFile,BufRead *.rd setf rhelp 1542endif 1543 1544" R noweb file 1545if has("fname_case") 1546 au BufNewFile,BufRead *.Rnw,*.rnw,*.Snw,*.snw setf rnoweb 1547else 1548 au BufNewFile,BufRead *.rnw,*.snw setf rnoweb 1549endif 1550 1551" Rexx, Rebol or R 1552au BufNewFile,BufRead *.r,*.R call s:FTr() 1553 1554func! s:FTr() 1555 let max = line("$") > 50 ? 50 : line("$") 1556 1557 for n in range(1, max) 1558 " Rebol is easy to recognize, check for that first 1559 if getline(n) =~? '\<REBOL\>' 1560 setf rebol 1561 return 1562 endif 1563 endfor 1564 1565 for n in range(1, max) 1566 " R has # comments 1567 if getline(n) =~ '^\s*#' 1568 setf r 1569 return 1570 endif 1571 " Rexx has /* comments */ 1572 if getline(n) =~ '^\s*/\*' 1573 setf rexx 1574 return 1575 endif 1576 endfor 1577 1578 " Nothing recognized, assume Rexx 1579 setf rexx 1580endfunc 1581 1582" Remind 1583au BufNewFile,BufRead .reminders* call s:StarSetf('remind') 1584au BufNewFile,BufRead *.remind,*.rem setf remind 1585 1586" Resolv.conf 1587au BufNewFile,BufRead resolv.conf setf resolv 1588 1589" Relax NG Compact 1590au BufNewFile,BufRead *.rnc setf rnc 1591 1592" RPL/2 1593au BufNewFile,BufRead *.rpl setf rpl 1594 1595" Robots.txt 1596au BufNewFile,BufRead robots.txt setf robots 1597 1598" Rpcgen 1599au BufNewFile,BufRead *.x setf rpcgen 1600 1601" reStructuredText Documentation Format 1602au BufNewFile,BufRead *.rst setf rst 1603 1604" RTF 1605au BufNewFile,BufRead *.rtf setf rtf 1606 1607" Interactive Ruby shell 1608au BufNewFile,BufRead .irbrc,irbrc setf ruby 1609 1610" Ruby 1611au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec setf ruby 1612 1613" Ruby on Rails 1614au BufNewFile,BufRead *.builder,*.rxml,*.rjs setf ruby 1615 1616" Rantfile and Rakefile is like Ruby 1617au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake setf ruby 1618 1619" S-lang (or shader language, or SmallLisp) 1620au BufNewFile,BufRead *.sl setf slang 1621 1622" Samba config 1623au BufNewFile,BufRead smb.conf setf samba 1624 1625" SAS script 1626au BufNewFile,BufRead *.sas setf sas 1627 1628" Sass 1629au BufNewFile,BufRead *.sass setf sass 1630 1631" Sather 1632au BufNewFile,BufRead *.sa setf sather 1633 1634" Scilab 1635au BufNewFile,BufRead *.sci,*.sce setf scilab 1636 1637" SCSS 1638au BufNewFile,BufRead *.scss setf scss 1639 1640" SD: Streaming Descriptors 1641au BufNewFile,BufRead *.sd setf sd 1642 1643" SDL 1644au BufNewFile,BufRead *.sdl,*.pr setf sdl 1645 1646" sed 1647au BufNewFile,BufRead *.sed setf sed 1648 1649" Sieve (RFC 3028) 1650au BufNewFile,BufRead *.siv setf sieve 1651 1652" Sendmail 1653au BufNewFile,BufRead sendmail.cf setf sm 1654 1655" Sendmail .mc files are actually m4. Could also be MS Message text file. 1656au BufNewFile,BufRead *.mc call s:McSetf() 1657 1658func! s:McSetf() 1659 " Rely on the file to start with a comment. 1660 " MS message text files use ';', Sendmail files use '#' or 'dnl' 1661 for lnum in range(1, min([line("$"), 20])) 1662 let line = getline(lnum) 1663 if line =~ '^\s*\(#\|dnl\)' 1664 setf m4 " Sendmail .mc file 1665 return 1666 elseif line =~ '^\s*;' 1667 setf msmessages " MS Message text file 1668 return 1669 endif 1670 endfor 1671 setf m4 " Default: Sendmail .mc file 1672endfunc 1673 1674" Services 1675au BufNewFile,BufRead /etc/services setf services 1676 1677" Service Location config 1678au BufNewFile,BufRead /etc/slp.conf setf slpconf 1679 1680" Service Location registration 1681au BufNewFile,BufRead /etc/slp.reg setf slpreg 1682 1683" Service Location SPI 1684au BufNewFile,BufRead /etc/slp.spi setf slpspi 1685 1686" Setserial config 1687au BufNewFile,BufRead /etc/serial.conf setf setserial 1688 1689" SGML 1690au BufNewFile,BufRead *.sgm,*.sgml 1691 \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' | 1692 \ setf sgmllnx | 1693 \ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' | 1694 \ let b:docbk_type="sgml" | 1695 \ setf docbk | 1696 \ else | 1697 \ setf sgml | 1698 \ endif 1699 1700" SGMLDECL 1701au BufNewFile,BufRead *.decl,*.dcl,*.dec 1702 \ if getline(1).getline(2).getline(3) =~? '^<!SGML' | 1703 \ setf sgmldecl | 1704 \ endif 1705 1706" SGML catalog file 1707au BufNewFile,BufRead catalog setf catalog 1708au BufNewFile,BufRead sgml.catalog* call s:StarSetf('catalog') 1709 1710" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc. 1711" Gentoo ebuilds are actually bash scripts 1712au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash") 1713au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh") 1714au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1)) 1715 1716" Also called from scripts.vim. 1717func! SetFileTypeSH(name) 1718 if expand("<amatch>") =~ g:ft_ignore_pat 1719 return 1720 endif 1721 if a:name =~ '\<csh\>' 1722 " Some .sh scripts contain #!/bin/csh. 1723 call SetFileTypeShell("csh") 1724 return 1725 elseif a:name =~ '\<tcsh\>' 1726 " Some .sh scripts contain #!/bin/tcsh. 1727 call SetFileTypeShell("tcsh") 1728 return 1729 elseif a:name =~ '\<ksh\>' 1730 let b:is_kornshell = 1 1731 if exists("b:is_bash") 1732 unlet b:is_bash 1733 endif 1734 if exists("b:is_sh") 1735 unlet b:is_sh 1736 endif 1737 elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>' 1738 let b:is_bash = 1 1739 if exists("b:is_kornshell") 1740 unlet b:is_kornshell 1741 endif 1742 if exists("b:is_sh") 1743 unlet b:is_sh 1744 endif 1745 elseif a:name =~ '\<sh\>' 1746 let b:is_sh = 1 1747 if exists("b:is_kornshell") 1748 unlet b:is_kornshell 1749 endif 1750 if exists("b:is_bash") 1751 unlet b:is_bash 1752 endif 1753 endif 1754 call SetFileTypeShell("sh") 1755endfunc 1756 1757" For shell-like file types, check for an "exec" command hidden in a comment, 1758" as used for Tcl. 1759" Also called from scripts.vim, thus can't be local to this script. 1760func! SetFileTypeShell(name) 1761 if expand("<amatch>") =~ g:ft_ignore_pat 1762 return 1763 endif 1764 let l = 2 1765 while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)' 1766 " Skip empty and comment lines. 1767 let l = l + 1 1768 endwhile 1769 if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$' 1770 " Found an "exec" line after a comment with continuation 1771 let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '') 1772 if n =~ '\<tclsh\|\<wish' 1773 setf tcl 1774 return 1775 endif 1776 endif 1777 exe "setf " . a:name 1778endfunc 1779 1780" tcsh scripts 1781au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login call SetFileTypeShell("tcsh") 1782 1783" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh) 1784au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias call s:CSH() 1785 1786func! s:CSH() 1787 if exists("g:filetype_csh") 1788 call SetFileTypeShell(g:filetype_csh) 1789 elseif &shell =~ "tcsh" 1790 call SetFileTypeShell("tcsh") 1791 else 1792 call SetFileTypeShell("csh") 1793 endif 1794endfunc 1795 1796" Z-Shell script 1797au BufNewFile,BufRead .zprofile,/etc/zprofile,.zfbfmarks setf zsh 1798au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump* call s:StarSetf('zsh') 1799au BufNewFile,BufRead *.zsh setf zsh 1800 1801" Scheme 1802au BufNewFile,BufRead *.scm,*.ss setf scheme 1803 1804" Screen RC 1805au BufNewFile,BufRead .screenrc,screenrc setf screen 1806 1807" Simula 1808au BufNewFile,BufRead *.sim setf simula 1809 1810" SINDA 1811au BufNewFile,BufRead *.sin,*.s85 setf sinda 1812 1813" SiSU 1814au BufNewFile,BufRead *.sst,*.ssm,*.ssi,*.-sst,*._sst setf sisu 1815au BufNewFile,BufRead *.sst.meta,*.-sst.meta,*._sst.meta setf sisu 1816 1817" SKILL 1818au BufNewFile,BufRead *.il,*.ils,*.cdf setf skill 1819 1820" SLRN 1821au BufNewFile,BufRead .slrnrc setf slrnrc 1822au BufNewFile,BufRead *.score setf slrnsc 1823 1824" Smalltalk (and TeX) 1825au BufNewFile,BufRead *.st setf st 1826au BufNewFile,BufRead *.cls 1827 \ if getline(1) =~ '^%' | 1828 \ setf tex | 1829 \ else | 1830 \ setf st | 1831 \ endif 1832 1833" Smarty templates 1834au BufNewFile,BufRead *.tpl setf smarty 1835 1836" SMIL or XML 1837au BufNewFile,BufRead *.smil 1838 \ if getline(1) =~ '<?\s*xml.*?>' | 1839 \ setf xml | 1840 \ else | 1841 \ setf smil | 1842 \ endif 1843 1844" SMIL or SNMP MIB file 1845au BufNewFile,BufRead *.smi 1846 \ if getline(1) =~ '\<smil\>' | 1847 \ setf smil | 1848 \ else | 1849 \ setf mib | 1850 \ endif 1851 1852" SMITH 1853au BufNewFile,BufRead *.smt,*.smith setf smith 1854 1855" Snobol4 and spitbol 1856au BufNewFile,BufRead *.sno,*.spt setf snobol4 1857 1858" SNMP MIB files 1859au BufNewFile,BufRead *.mib,*.my setf mib 1860 1861" Snort Configuration 1862au BufNewFile,BufRead *.hog,snort.conf,vision.conf setf hog 1863au BufNewFile,BufRead *.rules call s:FTRules() 1864 1865let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*' 1866func! s:FTRules() 1867 let path = expand('<amatch>:p') 1868 if path =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$' 1869 setf udevrules 1870 return 1871 endif 1872 if path =~ '^/etc/ufw/' 1873 setf conf " Better than hog 1874 return 1875 endif 1876 try 1877 let config_lines = readfile('/etc/udev/udev.conf') 1878 catch /^Vim\%((\a\+)\)\=:E484/ 1879 setf hog 1880 return 1881 endtry 1882 let dir = expand('<amatch>:p:h') 1883 for line in config_lines 1884 if line =~ s:ft_rules_udev_rules_pattern 1885 let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "") 1886 if dir == udev_rules 1887 setf udevrules 1888 endif 1889 break 1890 endif 1891 endfor 1892 setf hog 1893endfunc 1894 1895 1896" Spec (Linux RPM) 1897au BufNewFile,BufRead *.spec setf spec 1898 1899" Speedup (AspenTech plant simulator) 1900au BufNewFile,BufRead *.speedup,*.spdata,*.spd setf spup 1901 1902" Slice 1903au BufNewFile,BufRead *.ice setf slice 1904 1905" Spice 1906au BufNewFile,BufRead *.sp,*.spice setf spice 1907 1908" Spyce 1909au BufNewFile,BufRead *.spy,*.spi setf spyce 1910 1911" Squid 1912au BufNewFile,BufRead squid.conf setf squid 1913 1914" SQL for Oracle Designer 1915au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks setf sql 1916 1917" SQL 1918au BufNewFile,BufRead *.sql call s:SQL() 1919 1920func! s:SQL() 1921 if exists("g:filetype_sql") 1922 exe "setf " . g:filetype_sql 1923 else 1924 setf sql 1925 endif 1926endfunc 1927 1928" SQLJ 1929au BufNewFile,BufRead *.sqlj setf sqlj 1930 1931" SQR 1932au BufNewFile,BufRead *.sqr,*.sqi setf sqr 1933 1934" OpenSSH configuration 1935au BufNewFile,BufRead ssh_config,*/.ssh/config setf sshconfig 1936 1937" OpenSSH server configuration 1938au BufNewFile,BufRead sshd_config setf sshdconfig 1939 1940" Stata 1941au BufNewFile,BufRead *.ado,*.class,*.do,*.imata,*.mata setf stata 1942 1943" SMCL 1944au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl setf smcl 1945 1946" Stored Procedures 1947au BufNewFile,BufRead *.stp setf stp 1948 1949" Standard ML 1950au BufNewFile,BufRead *.sml setf sml 1951 1952" Sratus VOS command macro 1953au BufNewFile,BufRead *.cm setf voscm 1954 1955" Sysctl 1956au BufNewFile,BufRead /etc/sysctl.conf setf sysctl 1957 1958" Synopsys Design Constraints 1959au BufNewFile,BufRead *.sdc setf sdc 1960 1961" Sudoers 1962au BufNewFile,BufRead /etc/sudoers,sudoers.tmp setf sudoers 1963 1964" SVG (Scalable Vector Graphics) 1965au BufNewFile,BufRead *.svg setf svg 1966 1967" If the file has an extension of 't' and is in a directory 't' then it is 1968" almost certainly a Perl test file. 1969" If the first line starts with '#' and contains 'perl' it's probably a Perl 1970" file. 1971" (Slow test) If a file contains a 'use' statement then it is almost certainly 1972" a Perl file. 1973func! s:FTperl() 1974 if expand("%:e") == 't' && expand("%:p:h:t") == 't' 1975 setf perl 1976 return 1 1977 endif 1978 if getline(1)[0] == '#' && getline(1) =~ 'perl' 1979 setf perl 1980 return 1 1981 endif 1982 if search('^use\s\s*\k', 'nc', 30) 1983 setf perl 1984 return 1 1985 endif 1986 return 0 1987endfunc 1988 1989" Tads (or Nroff or Perl test file) 1990au BufNewFile,BufRead *.t 1991 \ if !s:FTnroff() && !s:FTperl() | setf tads | endif 1992 1993" Tags 1994au BufNewFile,BufRead tags setf tags 1995 1996" TAK 1997au BufNewFile,BufRead *.tak setf tak 1998 1999" Task 2000au BufRead,BufNewFile {pending,completed,undo}.data setf taskdata 2001au BufRead,BufNewFile *.task setf taskedit 2002 2003" Tcl (JACL too) 2004au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl setf tcl 2005 2006" TealInfo 2007au BufNewFile,BufRead *.tli setf tli 2008 2009" Telix Salt 2010au BufNewFile,BufRead *.slt setf tsalt 2011 2012" Terminfo 2013au BufNewFile,BufRead *.ti setf terminfo 2014 2015" TeX 2016au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex 2017au BufNewFile,BufRead *.tex call s:FTtex() 2018 2019" Choose context, plaintex, or tex (LaTeX) based on these rules: 2020" 1. Check the first line of the file for "%&<format>". 2021" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords. 2022" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc. 2023func! s:FTtex() 2024 let firstline = getline(1) 2025 if firstline =~ '^%&\s*\a\+' 2026 let format = tolower(matchstr(firstline, '\a\+')) 2027 let format = substitute(format, 'pdf', '', '') 2028 if format == 'tex' 2029 let format = 'plain' 2030 endif 2031 else 2032 " Default value, may be changed later: 2033 let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain' 2034 " Save position, go to the top of the file, find first non-comment line. 2035 let save_cursor = getpos('.') 2036 call cursor(1,1) 2037 let firstNC = search('^\s*[^[:space:]%]', 'c', 1000) 2038 if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword. 2039 let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>' 2040 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\>' 2041 let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)', 2042 \ 'cnp', firstNC + 1000) 2043 if kwline == 1 " lpat matched 2044 let format = 'latex' 2045 elseif kwline == 2 " cpat matched 2046 let format = 'context' 2047 endif " If neither matched, keep default set above. 2048 " let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000) 2049 " let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000) 2050 " if cline > 0 2051 " let format = 'context' 2052 " endif 2053 " if lline > 0 && (cline == 0 || cline > lline) 2054 " let format = 'tex' 2055 " endif 2056 endif " firstNC 2057 call setpos('.', save_cursor) 2058 endif " firstline =~ '^%&\s*\a\+' 2059 2060 " Translation from formats to file types. TODO: add AMSTeX, RevTex, others? 2061 if format == 'plain' 2062 setf plaintex 2063 elseif format == 'context' 2064 setf context 2065 else " probably LaTeX 2066 setf tex 2067 endif 2068 return 2069endfunc 2070 2071" ConTeXt 2072au BufNewFile,BufRead tex/context/*/*.tex,*.mkii,*.mkiv setf context 2073 2074" Texinfo 2075au BufNewFile,BufRead *.texinfo,*.texi,*.txi setf texinfo 2076 2077" TeX configuration 2078au BufNewFile,BufRead texmf.cnf setf texmf 2079 2080" Tidy config 2081au BufNewFile,BufRead .tidyrc,tidyrc setf tidy 2082 2083" TF mud client 2084au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf 2085 2086" TPP - Text Presentation Program 2087au BufNewFile,BufReadPost *.tpp setf tpp 2088 2089" Trustees 2090au BufNewFile,BufRead trustees.conf setf trustees 2091 2092" TSS - Geometry 2093au BufNewFile,BufReadPost *.tssgm setf tssgm 2094 2095" TSS - Optics 2096au BufNewFile,BufReadPost *.tssop setf tssop 2097 2098" TSS - Command Line (temporary) 2099au BufNewFile,BufReadPost *.tsscl setf tsscl 2100 2101" Motif UIT/UIL files 2102au BufNewFile,BufRead *.uit,*.uil setf uil 2103 2104" Udev conf 2105au BufNewFile,BufRead /etc/udev/udev.conf setf udevconf 2106 2107" Udev permissions 2108au BufNewFile,BufRead /etc/udev/permissions.d/*.permissions setf udevperm 2109" 2110" Udev symlinks config 2111au BufNewFile,BufRead /etc/udev/cdsymlinks.conf setf sh 2112 2113" UnrealScript 2114au BufNewFile,BufRead *.uc setf uc 2115 2116" Updatedb 2117au BufNewFile,BufRead /etc/updatedb.conf setf updatedb 2118 2119" Vera 2120au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera 2121 2122" Verilog HDL 2123au BufNewFile,BufRead *.v setf verilog 2124 2125" Verilog-AMS HDL 2126au BufNewFile,BufRead *.va,*.vams setf verilogams 2127 2128" VHDL 2129au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl 2130au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl') 2131 2132" Vim script 2133au BufNewFile,BufRead *.vim,*.vba,.exrc,_exrc setf vim 2134 2135" Viminfo file 2136au BufNewFile,BufRead .viminfo,_viminfo setf viminfo 2137 2138" Virata Config Script File or Drupal module 2139au BufRead,BufNewFile *.hw,*.module,*.pkg 2140 \ if getline(1) =~ '<?php' | 2141 \ setf php | 2142 \ else | 2143 \ setf virata | 2144 \ endif 2145 2146" Visual Basic (also uses *.bas) or FORM 2147au BufNewFile,BufRead *.frm call s:FTVB("form") 2148 2149" SaxBasic is close to Visual Basic 2150au BufNewFile,BufRead *.sba setf vb 2151 2152" Vgrindefs file 2153au BufNewFile,BufRead vgrindefs setf vgrindefs 2154 2155" VRML V1.0c 2156au BufNewFile,BufRead *.wrl setf vrml 2157 2158" Webmacro 2159au BufNewFile,BufRead *.wm setf webmacro 2160 2161" Wget config 2162au BufNewFile,BufRead .wgetrc,wgetrc setf wget 2163 2164" Website MetaLanguage 2165au BufNewFile,BufRead *.wml setf wml 2166 2167" Winbatch 2168au BufNewFile,BufRead *.wbt setf winbatch 2169 2170" WSML 2171au BufNewFile,BufRead *.wsml setf wsml 2172 2173" WvDial 2174au BufNewFile,BufRead wvdial.conf,.wvdialrc setf wvdial 2175 2176" CVS RC file 2177au BufNewFile,BufRead .cvsrc setf cvsrc 2178 2179" CVS commit file 2180au BufNewFile,BufRead cvs\d\+ setf cvs 2181 2182" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment 2183" lines in a WEB file). 2184au BufNewFile,BufRead *.web 2185 \ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" | 2186 \ setf web | 2187 \ else | 2188 \ setf winbatch | 2189 \ endif 2190 2191" Windows Scripting Host and Windows Script Component 2192au BufNewFile,BufRead *.ws[fc] setf wsh 2193 2194" XHTML 2195au BufNewFile,BufRead *.xhtml,*.xht setf xhtml 2196 2197" X Pixmap (dynamically sets colors, use BufEnter to make it work better) 2198au BufEnter *.xpm 2199 \ if getline(1) =~ "XPM2" | 2200 \ setf xpm2 | 2201 \ else | 2202 \ setf xpm | 2203 \ endif 2204au BufEnter *.xpm2 setf xpm2 2205 2206" XFree86 config 2207au BufNewFile,BufRead XF86Config 2208 \ if getline(1) =~ '\<XConfigurator\>' | 2209 \ let b:xf86c_xfree86_version = 3 | 2210 \ endif | 2211 \ setf xf86conf 2212 2213" Xorg config 2214au BufNewFile,BufRead xorg.conf,xorg.conf-4 let b:xf86c_xfree86_version = 4 | setf xf86conf 2215 2216" Xinetd conf 2217au BufNewFile,BufRead /etc/xinetd.conf setf xinetd 2218 2219" XS Perl extension interface language 2220au BufNewFile,BufRead *.xs setf xs 2221 2222" X resources file 2223au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults 2224 2225" Xmath 2226au BufNewFile,BufRead *.msc,*.msf setf xmath 2227au BufNewFile,BufRead *.ms 2228 \ if !s:FTnroff() | setf xmath | endif 2229 2230" XML specific variants: docbk and xbl 2231au BufNewFile,BufRead *.xml call s:FTxml() 2232 2233func! s:FTxml() 2234 let n = 1 2235 while n < 100 && n < line("$") 2236 let line = getline(n) 2237 if line =~ '<!DOCTYPE.*DocBook' 2238 let b:docbk_type = "xml" 2239 setf docbk 2240 return 2241 endif 2242 if line =~ 'xmlns:xbl="http://www.mozilla.org/xbl"' 2243 setf xbl 2244 return 2245 endif 2246 let n += 1 2247 endwhile 2248 setf xml 2249endfunc 2250 2251" XMI (holding UML models) is also XML 2252au BufNewFile,BufRead *.xmi setf xml 2253 2254" CSPROJ files are Visual Studio.NET's XML-based project config files 2255au BufNewFile,BufRead *.csproj,*.csproj.user setf xml 2256 2257" Qt Linguist translation source and Qt User Interface Files are XML 2258au BufNewFile,BufRead *.ts,*.ui setf xml 2259 2260" TPM's are RDF-based descriptions of TeX packages (Nikolai Weibull) 2261au BufNewFile,BufRead *.tpm setf xml 2262 2263" Xdg menus 2264au BufNewFile,BufRead /etc/xdg/menus/*.menu setf xml 2265 2266" ATI graphics driver configuration 2267au BufNewFile,BufRead fglrxrc setf xml 2268 2269" XLIFF (XML Localisation Interchange File Format) is also XML 2270au BufNewFile,BufRead *.xlf setf xml 2271au BufNewFile,BufRead *.xliff setf xml 2272 2273" X11 xmodmap (also see below) 2274au BufNewFile,BufRead *Xmodmap setf xmodmap 2275 2276" Xquery 2277au BufNewFile,BufRead *.xq,*.xql,*.xqm,*.xquery,*.xqy setf xquery 2278 2279" XSD 2280au BufNewFile,BufRead *.xsd setf xsd 2281 2282" Xslt 2283au BufNewFile,BufRead *.xsl,*.xslt setf xslt 2284 2285" Yacc 2286au BufNewFile,BufRead *.yy setf yacc 2287 2288" Yacc or racc 2289au BufNewFile,BufRead *.y call s:FTy() 2290 2291func! s:FTy() 2292 let n = 1 2293 while n < 100 && n < line("$") 2294 let line = getline(n) 2295 if line =~ '^\s*%' 2296 setf yacc 2297 return 2298 endif 2299 if getline(n) =~ '^\s*\(#\|class\>\)' && getline(n) !~ '^\s*#\s*include' 2300 setf racc 2301 return 2302 endif 2303 let n = n + 1 2304 endwhile 2305 setf yacc 2306endfunc 2307 2308 2309" Yaml 2310au BufNewFile,BufRead *.yaml,*.yml setf yaml 2311 2312" Zope 2313" dtml (zope dynamic template markup language), pt (zope page template), 2314" cpt (zope form controller page template) 2315au BufNewFile,BufRead *.dtml,*.pt,*.cpt call s:FThtml() 2316" zsql (zope sql method) 2317au BufNewFile,BufRead *.zsql call s:SQL() 2318 2319" Z80 assembler asz80 2320au BufNewFile,BufRead *.z8a setf z8a 2321 2322augroup END 2323 2324 2325" Source the user-specified filetype file, for backwards compatibility with 2326" Vim 5.x. 2327if exists("myfiletypefile") && filereadable(expand(myfiletypefile)) 2328 execute "source " . myfiletypefile 2329endif 2330 2331 2332" Check for "*" after loading myfiletypefile, so that scripts.vim is only used 2333" when there are no matching file name extensions. 2334" Don't do this for compressed files. 2335augroup filetypedetect 2336au BufNewFile,BufRead * 2337 \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat 2338 \ | runtime! scripts.vim | endif 2339au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif 2340 2341 2342" Extra checks for when no filetype has been detected now. Mostly used for 2343" patterns that end in "*". E.g., "zsh*" matches "zsh.vim", but that's a Vim 2344" script file. 2345" Most of these should call s:StarSetf() to avoid names ending in .gz and the 2346" like are used. 2347 2348" More Apache files. 2349au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/* call s:StarSetf('apache') 2350 2351" Asterisk config file 2352au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk') 2353au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm') 2354 2355" Bazaar version control 2356au BufNewFile,BufRead bzr_log.* setf bzr 2357 2358" BIND zone 2359au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone') 2360 2361" Changelog 2362au BufNewFile,BufRead [cC]hange[lL]og* 2363 \ if getline(1) =~ '; urgency=' 2364 \| call s:StarSetf('debchangelog') 2365 \|else 2366 \| call s:StarSetf('changelog') 2367 \|endif 2368 2369" Crontab 2370au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/* call s:StarSetf('crontab') 2371 2372" Debian Sources.list 2373au BufNewFile,BufRead /etc/apt/sources.list.d/* call s:StarSetf('debsources') 2374 2375" Dracula 2376au BufNewFile,BufRead drac.* call s:StarSetf('dracula') 2377 2378" Fvwm 2379au BufNewFile,BufRead */.fvwm/* call s:StarSetf('fvwm') 2380au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook 2381 \ let b:fvwm_version = 1 | call s:StarSetf('fvwm') 2382au BufNewFile,BufRead *fvwm2rc* 2383 \ if expand("<afile>:e") == "m4" 2384 \| call s:StarSetf('fvwm2m4') 2385 \|else 2386 \| let b:fvwm_version = 2 | call s:StarSetf('fvwm') 2387 \|endif 2388 2389" Gedcom 2390au BufNewFile,BufRead /tmp/lltmp* call s:StarSetf('gedcom') 2391 2392" GTK RC 2393au BufNewFile,BufRead .gtkrc*,gtkrc* call s:StarSetf('gtkrc') 2394 2395" Jam 2396au BufNewFile,BufRead Prl*.*,JAM*.* call s:StarSetf('jam') 2397 2398" Jargon 2399au! BufNewFile,BufRead *jarg* 2400 \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE' 2401 \| call s:StarSetf('jargon') 2402 \|endif 2403 2404" Kconfig 2405au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig') 2406 2407" Logcheck 2408au BufNewFile,BufRead /etc/logcheck/*.d*/* call s:StarSetf('logcheck') 2409 2410" Makefile 2411au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make') 2412 2413" Ruby Makefile 2414au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby') 2415 2416" Mail (also matches muttrc.vim, so this is below the other checks) 2417au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\} setf mail 2418 2419" Modconf 2420au BufNewFile,BufRead /etc/modprobe.* call s:StarSetf('modconf') 2421 2422" Mutt setup file 2423au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc* call s:StarSetf('muttrc') 2424au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc* call s:StarSetf('muttrc') 2425 2426" Nroff macros 2427au BufNewFile,BufRead tmac.* call s:StarSetf('nroff') 2428 2429" Pam conf 2430au BufNewFile,BufRead /etc/pam.d/* call s:StarSetf('pamconf') 2431 2432" Printcap and Termcap 2433au BufNewFile,BufRead *printcap* 2434 \ if !did_filetype() 2435 \| let b:ptcap_type = "print" | call s:StarSetf('ptcap') 2436 \|endif 2437au BufNewFile,BufRead *termcap* 2438 \ if !did_filetype() 2439 \| let b:ptcap_type = "term" | call s:StarSetf('ptcap') 2440 \|endif 2441 2442" Vim script 2443au BufNewFile,BufRead *vimrc* call s:StarSetf('vim') 2444 2445" Subversion commit file 2446au BufNewFile,BufRead svn-commit*.tmp setf svn 2447 2448" X resources file 2449au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults') 2450 2451" XFree86 config 2452au BufNewFile,BufRead XF86Config-4* 2453 \ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf') 2454au BufNewFile,BufRead XF86Config* 2455 \ if getline(1) =~ '\<XConfigurator\>' 2456 \| let b:xf86c_xfree86_version = 3 2457 \|endif 2458 \|call s:StarSetf('xf86conf') 2459 2460" X11 xmodmap 2461au BufNewFile,BufRead *xmodmap* call s:StarSetf('xmodmap') 2462 2463" Xinetd conf 2464au BufNewFile,BufRead /etc/xinetd.d/* call s:StarSetf('xinetd') 2465 2466" Z-Shell script 2467au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh') 2468 2469 2470 2471" Use the filetype detect plugins. They may overrule any of the previously 2472" detected filetypes. 2473runtime! ftdetect/*.vim 2474 2475 2476" Generic configuration file (check this last, it's just guessing!) 2477au BufNewFile,BufRead,StdinReadPost * 2478 \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat 2479 \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#' 2480 \ || getline(4) =~ '^#' || getline(5) =~ '^#') | 2481 \ setf conf | 2482 \ endif 2483 2484augroup END 2485 2486 2487" If the GUI is already running, may still need to install the Syntax menu. 2488" Don't do it when the 'M' flag is included in 'guioptions'. 2489if has("menu") && has("gui_running") 2490 \ && !exists("did_install_syntax_menu") && &guioptions !~# "M" 2491 source <sfile>:p:h/menu.vim 2492endif 2493 2494" Function called for testing all functions defined here. These are 2495" script-local, thus need to be executed here. 2496" Returns a string with error messages (hopefully empty). 2497func! TestFiletypeFuncs(testlist) 2498 let output = '' 2499 for f in a:testlist 2500 try 2501 exe f 2502 catch 2503 let output = output . "\n" . f . ": " . v:exception 2504 endtry 2505 endfor 2506 return output 2507endfunc 2508 2509" Restore 'cpoptions' 2510let &cpo = s:cpo_save 2511unlet s:cpo_save 2512