Start anew
[msysgit.git] / share / vim / vim58 / filetype.vim
blob05bd9e1843172a0426412200761767c724b78a41
1 " Vim support file to detect file types
3 " Maintainer:   Bram Moolenaar <Bram@vim.org>
4 " Last change:  2001 May 29
6 if !exists("did_load_filetypes")
7 let did_load_filetypes = 1
9 " Line continuation is used here, remove 'C' from 'cpoptions'
10 let ft_cpo_save = &cpo
11 set cpo-=C
13 augroup filetype
15 " Ignored extensions
16 au BufNewFile,BufRead *.orig,*.bak,*.old,*.new  exe "doau filetype BufRead " . expand("<afile>:r")
17 au BufNewFile,BufRead *~                exe "doau filetype BufRead " . substitute(expand("<afile>"), '\~$', '', '')
20 " Abaqus or Trasys
21 au BufNewFile,BufRead *.inp                     call FTCheck_inp()
23 fun! FTCheck_inp()
24   if getline(1) =~ '^\*'
25     set ft=abaqus
26   else
27     let n = 1
28     if line("$") > 500
29       let nmax = 500
30     else
31       let nmax = line("$")
32     endif
33     while n <= nmax
34       if getline(n) =~? "^header surface data"
35         set ft=trasys
36         break
37       endif
38       let n = n + 1
39     endwhile
40   endif
41 endfun
43 " ABC music notation
44 au BufNewFile,BufRead *.abc                     set ft=abc
46 " ABEL
47 au BufNewFile,BufRead *.abl                     set ft=abel
49 " AceDB
50 au BufNewFile,BufRead *.wrm                     set ft=acedb
52 " Ada (83, 9X, 95)
53 au BufNewFile,BufRead *.adb,*.ads               set ft=ada
55 " AHDL
56 au BufNewFile,BufRead *.tdf                     set ft=ahdl
58 " Apache style config file
59 au BufNewFile,BufRead proftpd.conf*             set ft=apachestyle
61 " Apache config file
62 au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,.htaccess,apache.conf* set ft=apache
64 " Applix ELF
65 au BufNewFile,BufRead *.am                      set ft=elf
67 " Arc Macro Language
68 au BufNewFile,BufRead *.aml                     set ft=aml
70 " ASN.1
71 au BufNewFile,BufRead *.asn,*.asn1              set ft=asn
73 " Active Server Pages (with Visual Basic Script)
74 au BufNewFile,BufRead *.asa                     set ft=aspvbs
76 " Active Server Pages (with Perl or Visual Basic Script)
77 au BufNewFile,BufRead *.asp                     if getline(1) . getline(2) .  getline(3) =~? "perlscript" | set ft=aspperl | else | set ft=aspvbs | endif
79 " Assembly (all kinds)
80 " *.lst is not pure assembly, it has two extra columns (address, byte codes)
81 au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst   call FTCheck_asm()
83 " This function checks for the kind of assembly that is wanted by the user, or
84 " can be detected from the first five lines of the file.
85 fun! FTCheck_asm()
86   " make sure b:asmsyntax exists
87   if !exists("b:asmsyntax")
88     let b:asmsyntax = ""
89   endif
91   if b:asmsyntax == ""
92     call FTCheck_asmsyntax()
93   endif
95   " if b:asmsyntax still isn't set, default to asmsyntax or GNU
96   if b:asmsyntax == ""
97     if exists("g:asmsyntax")
98       let b:asmsyntax = g:asmsyntax
99     else
100       let b:asmsyntax = "asm"
101     endif
102   endif
104   exe "set ft=" . b:asmsyntax
105 endfun
107 fun! FTCheck_asmsyntax()
108   " see if file contains any asmsyntax=foo overrides. If so, change
109   " b:asmsyntax appropriately
110   let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
111       \" ".getline(5)." "
112   if head =~ '\sasmsyntax=\S\+\s'
113     let b:asmsyntax = substitute(head, '.*\sasmsyntax=\(\S\+\)\s.*','\1', "")
114   endif
115 endfun
117 " Atlas
118 au BufNewFile,BufRead *.atl,*.as                set ft=atlas
120 " Automake
121 au BufNewFile,BufRead [mM]akefile.am            set ft=automake
123 " Avenue
124 au BufNewFile,BufRead *.ave                     set ft=ave
126 " Awk
127 au BufNewFile,BufRead *.awk                     set ft=awk
129 " B
130 au BufNewFile,BufRead *.mch,*.ref,*.imp         set ft=b
132 " BASIC or Visual Basic
133 au BufNewFile,BufRead *.bas                     call FTCheck_VB("basic")
135 " Check if one of the first five lines contains "VB_Name".  In that case it is
136 " probably a Visual Basic file.  Otherwise it's assumed to be "alt" filetype.
137 fun! FTCheck_VB(alt)
138   if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name'
139     set ft=vb
140   else
141     exe "set ft=" . a:alt
142   endif
143 endfun
145 " Batch file for MSDOS (*.cmd is close enough)
146 au BufNewFile,BufRead *.bat,*.sys,*.cmd         set ft=dosbatch|set nobin|set ff=dos
148 " Batch file for 4DOS
149 au BufNewFile,BufRead *.btm                     set ft=btm
151 " BC calculator
152 au BufNewFile,BufRead *.bc                      set ft=bc
154 " BibTeX bibliography database file
155 au BufNewFile,BufRead *.bib                     set ft=bib
157 " BIND configuration
158 au BufNewFile,BufRead named.conf                set ft=named
160 " BIND zone
161 au BufNewFile,BufRead /var/named/*,named.root   set ft=bindzone
163 " Blank
164 au BufNewFile,BufRead *.bl                      set ft=blank
166 " C
167 au BufNewFile,BufRead *.c                       set ft=c
169 " C#
170 "au BufNewFile,BufRead *.cs                     set ft=cs
172 " Cyn++
173 au BufNewFile,BufRead *.cyn                     set ft=cynpp
175 " Cynlib
176 " .cc and .cpp files can be C++ or Cynlib.
177 au BufNewFile,BufRead *.cc                      if exists("cynlib_syntax_for_cc")|set ft=cynlib|else|set ft=cpp|endif
178 au BufNewFile,BufRead *.cpp                     if exists("cynlib_syntax_for_cpp")|set ft=cynlib|else|set ft=cpp|endif
180 " C++
181 if has("fname_case")
182   au BufNewFile,BufRead *.cxx,*.c++,*.C,*.H,*.hh,*.hxx,*.hpp,*.tcc,*.inl set ft=cpp
183 else
184   au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.tcc,*.inl set ft=cpp
185 endif
187 " .h files can be C or C++, set c_syntax_for_h if you want C
188 au BufNewFile,BufRead *.h                       if exists("c_syntax_for_h")|set ft=c|else|set ft=cpp|endif
190 " Cascading Style Sheets
191 au BufNewFile,BufRead *.css                     set ft=css
193 " Century Term Command Scripts (*.cmd too)
194 au BufNewFile,BufRead *.con                     set ft=cterm
196 " Changelog
197 au BufNewFile,BufRead changelog.Debian          set ft=debchangelog
198 au BufNewFile,BufRead [cC]hange[lL]og           if getline(1) =~ '; urgency='
199         \| set ft=debchangelog | else | set ft=changelog | endif
201 " CHILL
202 au BufNewFile,BufRead *..ch                     set ft=ch
204 " Changes for WEB and CWEB or CHILL
205 au BufNewFile,BufRead *.ch                      call FTCheck_change()
207 " This function checks if one of the first ten lines start with a '@'.  In
208 " that case it is probably a change file, otherwise CHILL is assumed.
209 fun! FTCheck_change()
210   let lnum = 1
211   while lnum <= 10
212     if getline(lnum)[0] == '@'
213       set ft=change
214       return
215     endif
216     let lnum = lnum + 1
217   endwhile
218   set ft=ch
219 endfun
221 " Clean
222 au BufNewFile,BufRead *.dcl,*.icl               set ft=clean
224 " Clever (also: *.ent)
225 au BufNewFile,BufRead *.eni                     set ft=cl
227 " Clever or SGML
228 au BufNewFile,BufRead *.ent                     call FTCheck_ent()
230 fun! FTCheck_ent()
231   " This function checks for valid cl syntax in the first five lines.
232   " Look for either an opening comment, '#', or a block start, '{".
233   " If not found, assume SGML.
234   let lnum = 1
235   while lnum < 6
236     let line = getline(lnum)
237     if line =~ '^\s*[#{]'
238       set ft=cl
239       return
240     elseif line !~ '^\s*$'
241       " Not a blank line, not a comment, and not a block start,
242       " so doesn't look like valid cl code.
243       break
244     endif
245     let lnum = lnum + 1
246   endw
247   set ft=sgml
248 endfun
250 " Clipper
251 au BufNewFile,BufRead *.prg                     set ft=clipper
253 " Cobol
254 au BufNewFile,BufRead *.cbl,*.cob,*.cpy,*.lib   set ft=cobol
256 " Cold Fusion
257 au BufNewFile,BufRead *.cfm,*.cfi               set ft=cf
259 " Configure scripts
260 au BufNewFile,BufRead configure.in,configure.ac set ft=config
262 " Configure files
263 au BufNewFile,BufRead *.cfg                     set ft=cfg
265 " Communicating Sequential Processes
266 au BufNewFile,BufRead *.csp,*.fdr               set ft=csp
268 " CUPL logic description and simulation
269 au BufNewFile,BufRead *.pld                     set ft=cupl
270 au BufNewFile,BufRead *.si                      set ft=cuplsim
272 " Debian Control
273 au BufNewFile,BufRead */debian/control          set ft=debcontrol
275 " Diff files
276 au BufNewFile,BufRead *.diff,*.rej              set ft=diff
278 " Diva (with Skill) or InstallShield
279 au BufNewFile,BufRead *.rul                     if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield'|set ft=ishd|else|set ft=diva|endif
281 " DCL (Digital Command Language - vms) or DNS zone file
282 au BufNewFile,BufRead *.com
283         \ if getline(1) =~ '\($ORIGIN\|$TTL\|IN\s*SOA\)'
284         \       || getline(2) =~ '\($ORIGIN\|$TTL\|IN\s*SOA\)'
285         \       || getline(1).getline(2).getline(3).getline(4) =~ 'BIND.*named'
286         \ | set ft=dns | else | set ft=dcl | endif
288 " Dylan - lid files
289 au BufNewFile,BufRead *.lid                     set ft=dylanlid
291 " Dylan - intr files (melange)
292 au BufNewFile,BufRead *.intr                    set ft=dylanintr
294 " Dylan
295 au BufNewFile,BufRead *.dylan                   set ft=dylan
297 " Microsoft Module Definition
298 au BufNewFile,BufRead *.def                     set ft=def
300 " Dracula
301 au BufNewFile,BufRead drac.*,*.drac,*.drc,*lvs,*lpe set ft=dracula
303 " DTD (Document Type Definition for XML)
304 au BufNewFile,BufRead *.dtd                     set ft=dtd
306 " Embedix Component Description
307 au BufNewFile,BufRead *.ecd                     set ft=ecd
309 " Eiffel
310 au BufNewFile,BufRead *.e,*.E                   set ft=eiffel
312 " ERicsson LANGuage
313 au BufNewFile,BufRead *.erl                     set ft=erlang
315 " Elm Filter Rules file
316 au BufNewFile,BufRead filter-rules              set ft=elmfilt
318 " ESQL-C
319 au BufNewFile,BufRead *.ec,*.EC                 set ft=esqlc
321 " Essbase script
322 au BufNewFile,BufRead *.csc                     set ft=csc
324 " Expect
325 au BufNewFile,BufRead *.exp                     set ft=expect
327 " Exports
328 au BufNewFile,BufRead exports                   set ft=exports
330 " Focus Executable
331 au BufNewFile,BufRead *.fex,*.focexec           set ft=focexec
333 " Focus Master file
334 au BufNewFile,BufRead *.mas,*.master            set ft=master
336 " Forth
337 au BufNewFile,BufRead *.fs,*.ft                 set ft=forth
339 " Fortran
340 au BufNewFile,BufRead *.f,*.F,*.for,*.fpp,*.ftn,*.f77,*.f90,*.f95       set ft=fortran
342 " Fvwm
343 au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
344         \ let b:fvwm_version = 1 | set ft=fvwm
345 au BufNewFile,BufRead *fvwm2rc*
346         \ let b:fvwm_version = 2 | set ft=fvwm
348 " GDB command files
349 au BufNewFile,BufRead .gdbinit                  set ft=gdb
351 " GDMO
352 au BufNewFile,BufRead *.mo,*.gdmo               set ft=gdmo
354 " Gedcom
355 au BufNewFile,BufRead *.ged                     set ft=gedcom
357 " GP scripts (2.0 and onward)
358 au BufNewFile,BufRead *.gp                      set ft=gp
360 " GNU Server Pages
361 au BufNewFile,BufRead *.gsp                     set ft=gsp
363 " Gnuplot scripts
364 au BufNewFile,BufRead *.gpi                     set ft=gnuplot
366 " GTK RC
367 au BufNewFile,BufRead .gtkrc,gtkrc              set ft=gtkrc
369 " Haskell
370 au BufNewFile,BufRead *.hs                      set ft=haskell
371 au BufNewFile,BufRead *.lhs                     set ft=lhaskell
373 " Hercules
374 au BufNewFile,BufRead *.vc,*.ev,*.rs,*.sum,*.errsum     set ft=hercules
376 " HEX (Intel)
377 au BufNewFile,BufRead *.hex,*.h32               set ft=hex
379 " HTML (.shtml for server side)
380 au BufNewFile,BufRead *.html,*.htm,*.shtml      set ft=html
382 " HTML with M4
383 au BufNewFile,BufRead *.html.m4                 set ft=htmlm4
385 " Hyper Builder
386 au BufNewFile,BufRead *.hb                      set ft=hb
388 " Icon
389 au BufNewFile,BufRead *.icn                     set ft=icon
391 " IDL (Interface Description Language)
392 au BufNewFile,BufRead *.idl                     set ft=idl
394 " IDL (Interactive Data Language)
395 au BufNewFile,BufRead *.pro                     set ft=idlang
397 " Inform
398 au BufNewFile,BufRead *.inf,*.INF               set ft=inform
400 " Informix 4GL (source - canonical, include file, I4GL+M4 preproc.)
401 au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl        set ft=fgl
403 " .INI file for MSDOS
404 au BufNewFile,BufRead *.ini                     set ft=dosini
406 " SysV Inittab
407 au BufNewFile,BufRead inittab                   set ft=inittab
409 " Inno Setup
410 au BufNewFile,BufRead *.iss                     set ft=iss
412 " Jam
413 au! BufNewFile,BufRead *.jpl,*.jpr,Prl*.*,JAM*.*        set ft=jam
415 " Java
416 au BufNewFile,BufRead *.java,*.jav              set ft=java
418 " JavaCC
419 au BufNewFile,BufRead *.jj,*.jjt                set ft=javacc
421 " JavaScript
422 au BufNewFile,BufRead *.js,*.javascript         set ft=javascript
424 " Java Server Pages
425 au BufNewFile,BufRead *.jsp                     set ft=jsp
427 " Java Properties resource file (note: doesn't catch font.properties.pl)
428 au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_??,*.properties_??_??_*              set ft=jproperties
430 " Jess
431 au BufNewFile,BufRead *.clp                     set ft=jess
433 " Jgraph
434 au BufNewFile,BufRead *.jgr                     set ft=jgraph
436 " Kimwitu[++]
437 au BufNewFile,BufRead *.k                       set ft=kwt
439 " KixTart
440 au BufNewFile,BufRead *.kix                     set ft=kix
442 " KDE script
443 au BufNewFile,BufRead *.ks                      set ft=kscript
445 " Lace (ISE)
446 au BufNewFile,BufRead *.ace,*.ACE               set ft=lace
448 " Latte
449 au BufNewFile,BufRead *.latte,*.lte             set ft=latte
451 " LambdaProlog (*.mod too, see Modsim)
452 au BufNewFile,BufRead *.sig                     set ft=lprolog
454 " Lex
455 au BufNewFile,BufRead *.lex,*.l                 set ft=lex
457 " Lilo: Linux loader
458 au BufNewFile,BufRead lilo.conf*                set ft=lilo
460 " Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp)
461 if has("fname_case")
462   au BufNewFile,BufRead *.lsp,*.el,*.cl,*.jl,*.L        set ft=lisp
463 else
464   au BufNewFile,BufRead *.lsp,*.el,*.cl,*.jl            set ft=lisp
465 endif
467 " Lite
468 au BufNewFile,BufRead *.lite,*.lt               set ft=lite
470 " LOTOS
471 au BufNewFile,BufRead *.lot,*.lotos             set ft=lotos
473 " Lout (also: *.lt)
474 au BufNewFile,BufRead *.lou,*.lout              set ft=lout
476 " Lua
477 au BufNewFile,BufRead *.lua                     set ft=lua
479 " Lynx style file
480 au BufNewFile,BufRead *.lss                     set ft=lss
482 " M4
483 au BufNewFile,BufRead *.m4                      if expand("<afile>") !~? "html.m4$" | set ft=m4 | endif
485 " MaGic Point
486 au BufNewFile,BufRead *.mgp                     set ft=mgp
488 " Mail (for Elm, trn, mutt, rn, slrn)
489 au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt-*-\d\+,mutt\w\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+ set ft=mail
491 " Makefile (but not Automake)
492 au BufNewFile,BufRead [mM]akefile* if expand("<afile>") !~? 'Makefile.am\>' | set ft=make | endif
493 au BufNewFile,BufRead GNUmakefile,*.mk,*.mak,*.dsp set ft=make
495 " MakeIndex
496 au BufNewFile,BufRead *.ist,*.mst               set ft=ist
498 " Manpage
499 au BufNewFile,BufRead *.man                     set ft=man
501 " Maple V
502 au BufNewFile,BufRead *.mv,*.mpl,*.mws          set ft=maple
504 " Mason
505 au BufNewFile,BufRead *.mason.*.mhtml           set ft=mason
507 " Matlab or Mathematica
508 au BufNewFile,BufRead *.m                       call FTCheck_m()
510 fun! FTCheck_m()
511   let n = 1
512   while n < 10
513     if getline(n) =~ '^\s*%'
514       set ft=matlab
515       return
516     endif
517     if getline(n) =~ '^\s*(\*'
518       set ft=mma
519       return
520     endif
521     let n = n + 1
522   endwhile
523   set ft=matlab
524 endfun
526 " Maya Extension Language
527 au BufNewFile,BufRead *.mel                     set ft=mel
529 " Metafont
530 au BufNewFile,BufRead *.mf                      set ft=mf
532 " MetaPost
533 au BufNewFile,BufRead *.mp                      set ft=mp
535 " Modsim III (or LambdaProlog)
536 au BufNewFile,BufRead *.mod
537         \ if getline(1) =~ '\<module\>' |
538         \   set ft=lprolog |
539         \ else |
540         \   set ft=modsim3 |
541         \ endif
543 " Modula 2
544 au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi set ft=modula2
546 " Modula 3 (.m3, .i3, .mg, .ig)
547 au BufNewFile,BufRead *.[mi][3g]                set ft=modula3
549 " Moterola S record
550 au BufNewFile,BufRead *.s19,*.s28,*.s37         set ft=srec
552 " Msql
553 au BufNewFile,BufRead *.msql                    set ft=msql
555 " M$ Resource files
556 au BufNewFile,BufRead *.rc                      set ft=rc
558 " Mutt setup file
559 au BufNewFile,BufRead .muttrc*,Muttrc           set ft=muttrc
561 " Nastran input/DMAP
562 "au BufNewFile,BufRead *.dat                    set ft=nastran
564 " Novell netware batch files
565 au BufNewFile,BufRead *.ncf                     set ft=ncf
567 " Nroff/Troff (*.ms is checked below)
568 au BufNewFile,BufRead *.me,*.mm,*.tr,*.nr       set ft=nroff
569 au BufNewFile,BufRead *.[1-9]                   call FTCheck_nroff()
571 " This function checks if one of the first five lines start with a dot.  In
572 " that case it is probably an nroff file: 'filetype' is set and 1 is returned.
573 fun! FTCheck_nroff()
574   if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
575     set ft=nroff
576     return 1
577   endif
578   return 0
579 endfun
581 " Not Quite C
582 au BufNewFile,BufRead *.nqc                     set ft=nqc
584 " OCAML
585 au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly    set ft=ocaml
587 " Omnimark
588 au BufNewFile,BufRead *.xom,*.xin               set ft=omnimark
590 " OpenROAD
591 au BufNewFile,BufRead *.or                      set ft=openroad
593 " OPL
594 au BufNewFile,BufRead *.[Oo][Pp][Ll]            set ft=opl
596 " Oracle config file
597 au BufNewFile,BufRead *.ora                     set ft=ora
599 " PApp
600 au BufNewFile,BufRead *.papp,*.pxml,*.pxsl      set ft=papp
602 " Pascal
603 au BufNewFile,BufRead *.pas                     set ft=pascal
605 " Delphi project file
606 au BufNewFile,BufRead *.dpr                     set ft=pascal
608 " Perl
609 if has("fname_case")
610   au BufNewFile,BufRead *.pl,*.PL               set ft=perl
611 else
612   au BufNewFile,BufRead *.pl                    set ft=perl
613 endif
615 " Perl, XPM or XPM2
616 au BufNewFile,BufRead *.pm      if getline(1) =~ "XPM2"|set ft=xpm2|elseif getline(1) =~ "XPM"|set ft=xpm|else|set ft=perl|endif
618 " Perl POD
619 au BufNewFile,BufRead *.pod                     set ft=pod
621 " Php3
622 au BufNewFile,BufRead *.php,*.php3              set ft=php
624 " Phtml
625 au BufNewFile,BufRead *.phtml                   set ft=phtml
627 " Pike
628 au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod set ft=pike
630 " Pine config
631 au BufNewFile,BufRead .pinerc,pinerc            set ft=pine
633 " PL/SQL
634 au BufNewFile,BufRead *.pls,*.plsql             set ft=plsql
636 " PO (GNU gettext)
637 au BufNewFile,BufRead *.po                      set ft=po
639 " Postfix main config
640 au BufNewFile,BufRead main.cf                   set ft=pfmain
642 " PostScript
643 au BufNewFile,BufRead *.ps,*.eps                set ft=postscr
645 " Povray
646 au BufNewFile,BufRead *.pov                     set ft=pov
648 " Povray or IA64
649 au BufNewFile,BufRead *.inc                     call FTCheck_inc()
651 fun! FTCheck_inc()
652   if exists("g:filetype_inc")
653     exe "set ft=" . g:filetype_inc
654   elseif getline(1).getline(2).getline(3) =~ "<?"
655     set ft=php
656   else
657     call FTCheck_asmsyntax()
658     if exists("b:asmsyntax")
659       exe "set ft=" . b:asmsyntax
660     else
661       set ft=pov
662     endif
663   endif
664 endfun
666 " Printcap and Termcap
667 au BufNewFile,BufRead *printcap                 let b:ptcap_type = "print"|set ft=ptcap
668 au BufNewFile,BufRead *termcap                  let b:ptcap_type = "term"|set ft=ptcap
670 " PCCTS / ANTRL
671 "au BufNewFile,BufRead *.g                      set ft=antrl
672 au BufNewFile,BufRead *.g                       set ft=pccts
674 " PPWizard
675 au BufNewFile,BufRead *.it,*.ih                 set ft=ppwiz
677 " Procmail
678 au BufNewFile,BufRead .procmail,.procmailrc     set ft=procmail
680 " Progress or CWEB
681 au BufNewFile,BufRead *.w                       call FTCheck_progress_cweb()
683 function! FTCheck_progress_cweb()
684   if exists("g:filetype_w")
685     exe "set ft=" . g:filetype_w
686     return
687   endif
688   if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
689     set ft=progress
690   else
691     set ft=cweb
692   endif
693 endfun
695 " Progress or assembly
696 au BufNewFile,BufRead *.i                       call FTCheck_progress_asm()
698 function! FTCheck_progress_asm()
699   if exists("g:filetype_i")
700     exe "set ft=" . g:filetype_i
701     return
702   endif
703   " This function checks for an assembly comment the first ten lines.
704   " If not found, assume Progress.
705   let lnum = 1
706   while lnum <= 10
707     let line = getline(lnum)
708     if line =~ '^\s*;' || line =~ '^\*'
709       call FTCheck_asm()
710       return
711     elseif line !~ '^\s*$' || line =~ '^/\*'
712       " Not an empty line: Doesn't look like valid assembly code.
713       " Or it looks like a Progress /* comment
714       break
715     endif
716     let lnum = lnum + 1
717   endw
718   set ft=progress
719 endfun
721 " Progress or Pascal
722 au BufNewFile,BufRead *.p                       call FTCheck_progress_pascal()
724 function! FTCheck_progress_pascal()
725   if exists("g:filetype_p")
726     exe "set ft=" . g:filetype_p
727     return
728   endif
729   " This function checks for valid Pascal syntax in the first ten lines.
730   " Look for either an opening comment or a program start.
731   " If not found, assume Progress.
732   let lnum = 1
733   while lnum <= 10
734     let line = getline(lnum)
735     if line =~ '^\s*\(program\|procedure\|function\|const\|type\|var\)\>'
736         \ || line =~ '^\s*{'
737       set ft=pascal
738       return
739     elseif line !~ '^\s*$' || line =~ '^/\*'
740       " Not an empty line: Doesn't look like valid Pascal code.
741       " Or it looks like a Progress /* comment
742       break
743     endif
744     let lnum = lnum + 1
745   endw
746   set ft=progress
747 endfun
749 " Software Distributor Product Specification File (POSIX 1387.2-1995)
750 au BufNewFile,BufRead *.psf                     set ft=psf
751 au BufNewFile,BufRead INDEX,INFO
752         \ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' |
753         \   set ft=psf |
754         \ endif
756 " Prolog
757 au BufNewFile,BufRead *.pdb                     set ft=prolog
759 " Python
760 au BufNewFile,BufRead *.py                      set ft=python
762 " Radiance
763 au BufNewFile,BufRead *.rad,*.mat               set ft=radiance
765 " Registry for MS-Windows
766 au BufNewFile,BufRead *.reg
767         \ if getline(1) =~? '^REGEDIT[0-9]*\s*$' | set ft=registry | endif
769 " Rexx
770 au BufNewFile,BufRead *.rexx,*.rex              set ft=rexx
772 " Rexx or Rebol
773 au BufNewFile,BufRead *.r
774         \ if getline(1) =~ '^REBOL'|set ft=rebol|else|set ft=rexx|endif
776 " Remind
777 au BufNewFile,BufRead .reminders*               set ft=remind
779 " Robots.txt
780 au BufNewFile,BufRead robots.txt                set ft=robots
782 " Rpcgen
783 au BufNewFile,BufRead *.x                       set ft=rpcgen
785 " RTF
786 au BufNewFile,BufRead *.rtf                     set ft=rtf
788 " Ruby
789 au BufNewFile,BufRead *.rb                      set ft=ruby
791 " S-lang (or shader language!)
792 au BufNewFile,BufRead *.sl                      set ft=slang
794 " Samba config
795 au BufNewFile,BufRead smb.conf                  set ft=samba
797 " SAS script
798 au BufNewFile,BufRead *.sas                     set ft=sas
800 " Sather
801 au BufNewFile,BufRead *.sa                      set ft=sather
803 " SDL
804 au BufNewFile,BufRead *.sdl,*.pr                set ft=sdl
806 " sed
807 au BufNewFile,BufRead *.sed                     set ft=sed
809 " Sendmail
810 au BufNewFile,BufRead sendmail.cf               set ft=sm
812 " SETL
813 au BufNewFile,BufRead *.setl,*.stl              set ft=setl
815 " SGML
816 au BufNewFile,BufRead *.sgm,*.sgml
817         \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc'|
818         \   set ft=sgmllnx |
819         \ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
820         \   let b:docbk_type="sgml" |
821         \   set ft=docbk |
822         \ else |
823         \   set ft=sgml |
824         \ endif
826 " SGMLDECL
827 au BufNewFile,BufRead *.decl,*.dcl,*.dec
828         \ if getline(1).getline(2).getline(3) =~? '^<!SGML' |
829         \    set ft=sgmldecl |
830         \ endif
832 " Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
833 au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,*.bash call SetFileTypeSH("bash")
834 au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh")
835 au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
836 au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,.tcshrc*,*.csh,*.tcsh,.alias set ft=csh
838 fun! SetFileTypeSH(name)
839   if a:name =~ '\<ksh\>'
840     let b:is_kornshell = 1
841     if exists("b:is_bash")
842       unlet b:is_bash
843     endif
844   elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
845     let b:is_bash = 1
846     if exists("b:is_kornshell")
847       unlet b:is_kornshell
848     endif
849   endif
850   set ft=sh
851 endfun
853 " Z-Shell script
854 au BufNewFile,BufRead .zsh*,.zlog*,.zprofile,.zfbfmarks,.zcompdump*,zsh*,zlog*  set ft=zsh
856 " Scheme
857 au BufNewFile,BufRead *.scm                     set ft=scheme
859 " Simula
860 au BufNewFile,BufRead *.sim                     set ft=simula
862 " SINDA
863 au BufNewFile,BufRead *.sin,*.s85               set ft=sinda
865 " SKILL
866 au BufNewFile,BufRead *.il                      set ft=skill
868 " SLRN
869 au BufNewFile,BufRead .slrnrc                   set ft=slrnrc
870 au BufNewFile,BufRead *.score                   set ft=slrnsc
872 " Smalltalk
873 au BufNewFile,BufRead *.st                      set ft=st
875 " Smalltalk or Tex
876 au BufNewFile,BufRead *.cls
877         \ if getline(1) =~ "^%" |
878         \   set ft=tex |
879         \ else |
880         \   set ft=st |
881         \ endif
883 " SMIL or XML
884 au BufNewFile,BufRead *.smil
885         \ if getline(1) =~ '<?\s*xml.*?>'|
886         \   set ft=xml|
887         \ else|
888         \   set ft=smil|
889         \ endif
891 " SMIL or SNMP MIB file
892 au BufNewFile,BufRead *.smi             if getline(1) =~ '\<smil\>'|set ft=smil|else|set ft=mib|endif
894 " SMITH
895 au BufNewFile,BufRead *.smt,*.smith             set ft=smith
897 " Snobol4
898 au BufNewFile,BufRead *.sno                     set ft=snobol4
900 " SNMP MIB files
901 au BufNewFile,BufRead *.mib                     set ft=mib
903 " Snort Configuration
904 au BufNewFile,BufRead *.hog,snort.conf,vision.conf,*.rules      set ft=hog
906 " Spec (Linux RPM)
907 au BufNewFile,BufRead *.spec                    set ft=spec
909 " Speedup (AspenTech plant simulator)
910 au BufNewFile,BufRead *.speedup,*.spdata,*.spd  set ft=spup
912 " Spice
913 au BufNewFile,BufRead *.sp,*.spice              set ft=spice
915 " Squid
916 au BufNewFile,BufRead squid.conf                set ft=squid
918 " SQL (all but the first one for Oracle Designer)
919 au BufNewFile,BufRead *.sql,*.tyb,*.typ,*.tyc,*.pkb,*.pks       set ft=sql
921 " SQR
922 au BufNewFile,BufRead *.sqr,*.sqi               set ft=sqr
924 " Stored Procedures
925 au BufNewFile,BufRead *.stp                     set ft=stp
927 " Standard ML
928 au BufNewFile,BufRead *.sml                     set ft=sml
930 " Tads
931 au BufNewFile,BufRead *.t                       set ft=tads
933 " Tags
934 au BufNewFile,BufRead tags                      set ft=tags
936 " TAK
937 au BufNewFile,BufRead *.tak                     set ft=tak
939 " Tcl
940 au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk   set ft=tcl
942 " TealInfo
943 au BufNewFile,BufRead *.tli                     set ft=tli
945 " Telix Salt
946 au BufNewFile,BufRead *.slt                     set ft=tsalt
948 " TeX
949 au BufNewFile,BufRead *.tex,*.latex,*.sty,*.dtx,*.ltx   set ft=tex
951 " Texinfo
952 au BufNewFile,BufRead *.texinfo,*.texi,*.txi    set ft=texinfo
954 " TeX configuration
955 au BufNewFile,BufRead texmf.cnf                 set ft=texmf
957 " TSS - Geometry
958 au BufNewFile,BufReadPost *.tssgm               set ft=tssgm
960 " TSS - Optics
961 au BufNewFile,BufReadPost *.tssop               set ft=tssop
963 " TSS - Command Line (temporary)
964 au BufNewFile,BufReadPost *.tsscl               set ft=tsscl
966 " TF mud client
967 au BufNewFile,BufRead *.tf                      set ft=tf
969 " Motif UIT/UIL files
970 au BufNewFile,BufRead *.uit,*.uil               set ft=uil
972 " UnrealScript
973 au BufNewFile,BufRead *.uc                      set ft=uc
975 " Verilog HDL
976 au BufNewFile,BufRead *.v                       set ft=verilog
978 " VHDL
979 au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vhdl_[0-9]*,*.vbe,*.vst  set ft=vhdl
981 " Vim Help file
982 if has("mac")
983   au BufNewFile,BufRead *[/:]vim*[/:]doc[/:]*.txt,*[/:]runtime[/:]doc[/:]*.txt set ft=help
984 else
985   au BufNewFile,BufRead */vim*/doc/*.txt,*/runtime/doc/*.txt    set ft=help
986 endif
988 " Vim script
989 au BufNewFile,BufRead *vimrc*,*.vim,.exrc,_exrc set ft=vim
991 " Viminfo file
992 au BufNewFile,BufRead .viminfo,_viminfo         set ft=viminfo
994 " Virata Config Script File
995 au BufRead,BufNewFile *.hw,*.module,*.pkg       set ft=virata
997 " Visual Basic (also uses *.bas) or FORM
998 au BufNewFile,BufRead *.frm                     call FTCheck_VB("form")
1000 " Vgrindefs file
1001 au BufNewFile,BufRead vgrindefs                 set ft=vgrindefs
1003 " VRML V1.0c
1004 au BufNewFile,BufRead *.wrl                     set ft=vrml
1006 " Webmacro
1007 au BufNewFile,BufRead *.wm                      set ft=webmacro
1009 " Website MetaLanguage
1010 au BufNewFile,BufRead *.wml                     set ft=wml
1012 " Winbatch
1013 au BufNewFile,BufRead *.wbt                     set ft=winbatch
1015 " CVS commit file
1016 au BufNewFile,BufRead cvs\d\+                   set ft=cvs
1018 " WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment
1019 " lines in a WEB file).
1020 au BufNewFile,BufRead *.web                     if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" | set ft=web | else | set ft=winbatch | endif
1022 " Windows Scripting Host and Windows Script Component
1023 au BufNewFile,BufRead *.ws[fc]                  set ft=wsh
1025 " X Pixmap (dynamically sets colors, use BufEnter to make it work better)
1026 au BufEnter *.xpm                               if getline(1) =~ "XPM2"|set ft=xpm2|else|set ft=xpm|endif
1027 au BufEnter *.xpm2                              set ft=xpm2
1029 " XS Perl extension interface language
1030 au BufEnter *.xs                                set ft=xs
1032 " X Keyboard Extensions
1033 au BufNewFile,BufRead *X11*/xkb/*
1034         \ if expand("<afile>:t") !~ '\.' |
1035         \   set ft=xkb |
1036         \ endif
1038 " X resources file
1039 au BufNewFile,BufRead .Xdefaults,.Xresources,Xresources*,*/app-defaults/*,*/Xresources/*,xdm-config set ft=xdefaults
1041 " Xmath
1042 au BufNewFile,BufRead *.msc,*.msf               set ft=xmath
1043 au BufNewFile,BufRead *.ms                      if !FTCheck_nroff() | set ft=xmath | endif
1045 " vim: ts=8
1046 " XML
1047 au BufNewFile,BufRead *.xsl                     set ft=xml
1048 au BufNewFile,BufRead *.xml
1049         \ if getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
1050         \   let b:docbk_type="xml" |
1051         \   set ft=docbk |
1052         \ else |
1053         \   set ft=xml |
1054         \ endif
1056 " Yacc
1057 au BufNewFile,BufRead *.y                       set ft=yacc
1059 " Z80 assembler asz80
1060 au BufNewFile,BufRead *.z8a                     set ft=z8a
1062 augroup END
1065 " Source the user-specified filetype file
1066 if exists("myfiletypefile") && file_readable(expand(myfiletypefile))
1067   execute "source " . myfiletypefile
1068 endif
1071 " Check for "*" after loading myfiletypefile, so that scripts.vim is only used
1072 " when there are no matching file name extensions.
1073 augroup filetype
1074   au BufNewFile,BufRead,StdinReadPost *         if !did_filetype()|so <sfile>:p:h/scripts.vim|endif
1077 " Extra checks for when no filetype has been detected now
1079 " Printcap and Termcap
1080 au BufNewFile,BufRead *printcap*                if !did_filetype()|let b:ptcap_type = "print"|set ft=ptcap|endif
1081 au BufNewFile,BufRead *termcap*                 if !did_filetype()|let b:ptcap_type = "term"|set ft=ptcap|endif
1083 " Crontab
1084 au BufNewFile,BufRead crontab.*                 if !did_filetype()|set ft=crontab|endif
1086 " GTK RC
1087 au BufNewFile,BufRead .gtkrc*,gtkrc*            set ft=gtkrc
1090 augroup END
1093 " If the GUI is already running, may still need to install the Syntax menu.
1094 " Don't do it when the 'M' flag is included in 'guioptions'
1095 if has("gui_running") && !exists("did_install_syntax_menu") && &guioptions !~# "M"
1096   source <sfile>:p:h/menu.vim
1097 endif
1099 " Restore 'cpoptions'
1100 let &cpo = ft_cpo_save
1101 unlet ft_cpo_save
1104 endif " !exists("did_load_filetypes")
1106 " vim: ts=8