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