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