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