xref: /vim-8.2.3635/runtime/filetype.vim (revision 843ee41e)
1" Vim support file to detect file types
2"
3" Maintainer:	Bram Moolenaar <[email protected]>
4" Last Change:	2004 Jun 27
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
19au BufNewFile,BufRead *.orig,*.bak,*.old,*.new,*.rpmsave,*.rpmnew
20	\ exe "doau filetypedetect BufRead " . expand("<afile>:r")
21au BufNewFile,BufRead *~
22	\ let s:name = expand("<afile>") |
23	\ let s:short = substitute(s:name, '\~$', '', '') |
24	\ if s:name != s:short && s:short != "" |
25	\   exe "doau filetypedetect BufRead " . s:short |
26	\ endif |
27	\ unlet s:name |
28	\ unlet s:short
29au BufNewFile,BufRead *.in
30	\ if expand("<afile>:t") != "configure.in" |
31	\   exe "doau filetypedetect BufRead " . expand("<afile>:r") |
32	\ endif
33
34" Pattern used to match file names which should not be inspected.
35" Currently finds compressed files.
36if !exists("g:ft_ignore_pat")
37  let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
38endif
39
40" Abaqus or Trasys
41au BufNewFile,BufRead *.inp			call FTCheck_inp()
42
43fun! FTCheck_inp()
44  if getline(1) =~ '^\*'
45    setf abaqus
46  else
47    let n = 1
48    if line("$") > 500
49      let nmax = 500
50    else
51      let nmax = line("$")
52    endif
53    while n <= nmax
54      if getline(n) =~? "^header surface data"
55	setf trasys
56	break
57      endif
58      let n = n + 1
59    endwhile
60  endif
61endfun
62
63" A-A-P recipe
64au BufNewFile,BufRead *.aap			setf aap
65
66" ABC music notation
67au BufNewFile,BufRead *.abc			setf abc
68
69" ABEL
70au BufNewFile,BufRead *.abl			setf abel
71
72" AceDB
73au BufNewFile,BufRead *.wrm			setf acedb
74
75" Ada (83, 9X, 95)
76au BufNewFile,BufRead *.adb,*.ads,*.ada		setf ada
77
78" AHDL
79au BufNewFile,BufRead *.tdf			setf ahdl
80
81" AMPL
82au BufNewFile,BufRead *.run			setf ampl
83
84" Ant
85au BufNewFile,BufRead build.xml			setf ant
86
87" Apache style config file
88au BufNewFile,BufRead proftpd.conf*		setf apachestyle
89
90" Apache config file
91au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,.htaccess,apache.conf* setf apache
92
93" XA65 MOS6510 cross assembler
94au BufNewFile,BufRead *.a65			setf a65
95
96" Applix ELF
97au BufNewFile,BufRead *.am
98	\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
99
100" Arc Macro Language
101au BufNewFile,BufRead *.aml			setf aml
102
103" Arch Inventory file
104au BufNewFile,BufRead .arch-inventory,=tagging-method	setf arch
105
106" ART*Enterprise (formerly ART-IM)
107au BufNewFile,BufRead *.art			setf art
108
109" ASN.1
110au BufNewFile,BufRead *.asn,*.asn1		setf asn
111
112" Active Server Pages (with Visual Basic Script)
113au BufNewFile,BufRead *.asa
114	\ if exists("g:filetype_asa") |
115	\   exe "setf " . g:filetype_asa |
116	\ else |
117	\   setf aspvbs |
118	\ endif
119
120" Active Server Pages (with Perl or Visual Basic Script)
121au BufNewFile,BufRead *.asp
122	\ if exists("g:filetype_asp") |
123	\   exe "setf " . g:filetype_asp |
124	\ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" |
125	\   setf aspperl |
126	\ else |
127	\   setf aspvbs |
128	\ endif
129
130" Grub (must be before catch *.lst)
131au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf	setf grub
132
133" Assembly (all kinds)
134" *.lst is not pure assembly, it has two extra columns (address, byte codes)
135au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst	call <SID>FTasm()
136
137" This function checks for the kind of assembly that is wanted by the user, or
138" can be detected from the first five lines of the file.
139fun! <SID>FTasm()
140  " make sure b:asmsyntax exists
141  if !exists("b:asmsyntax")
142    let b:asmsyntax = ""
143  endif
144
145  if b:asmsyntax == ""
146    call FTCheck_asmsyntax()
147  endif
148
149  " if b:asmsyntax still isn't set, default to asmsyntax or GNU
150  if b:asmsyntax == ""
151    if exists("g:asmsyntax")
152      let b:asmsyntax = g:asmsyntax
153    else
154      let b:asmsyntax = "asm"
155    endif
156  endif
157
158  exe "setf " . b:asmsyntax
159endfun
160
161fun! FTCheck_asmsyntax()
162  " see if file contains any asmsyntax=foo overrides. If so, change
163  " b:asmsyntax appropriately
164  let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
165	\" ".getline(5)." "
166  if head =~ '\sasmsyntax=\S\+\s'
167    let b:asmsyntax = substitute(head, '.*\sasmsyntax=\(\S\+\)\s.*','\1', "")
168  elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
169    let b:asmsyntax = "vmasm"
170  endif
171endfun
172
173" Macro (VAX)
174au BufNewFile,BufRead *.mar			setf vmasm
175
176" Atlas
177au BufNewFile,BufRead *.atl,*.as		setf atlas
178
179" Automake
180au BufNewFile,BufRead [mM]akefile.am		setf automake
181
182" Avenue
183au BufNewFile,BufRead *.ave			setf ave
184
185" Awk
186au BufNewFile,BufRead *.awk			setf awk
187
188" B
189au BufNewFile,BufRead *.mch,*.ref,*.imp		setf b
190
191" BASIC or Visual Basic
192au BufNewFile,BufRead *.bas			call <SID>FTVB("basic")
193
194" Check if one of the first five lines contains "VB_Name".  In that case it is
195" probably a Visual Basic file.  Otherwise it's assumed to be "alt" filetype.
196fun! <SID>FTVB(alt)
197  if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
198    setf vb
199  else
200    exe "setf " . a:alt
201  endif
202endfun
203
204" Visual Basic Script (close to Visual Basic)
205au BufNewFile,BufRead *.vbs,*.dsm,*.ctl		setf vb
206
207" Batch file for MSDOS.
208au BufNewFile,BufRead *.bat,*.btm,*.sys		setf dosbatch
209" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd.
210au BufNewFile,BufRead *.cmd
211	\ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif
212
213" Batch file for 4DOS
214au BufNewFile,BufRead *.btm			setf btm
215
216" BC calculator
217au BufNewFile,BufRead *.bc			setf bc
218
219" BDF font
220au BufNewFile,BufRead *.bdf			setf bdf
221
222" BibTeX bibliography database file
223au BufNewFile,BufRead *.bib			setf bib
224
225" BIND configuration
226au BufNewFile,BufRead named.conf		setf named
227
228" BIND zone
229au BufNewFile,BufRead named.root		setf bindzone
230
231" Blank
232au BufNewFile,BufRead *.bl			setf blank
233
234" C or lpc
235au BufNewFile,BufRead *.c			call <SID>FTlpc()
236
237fun! <SID>FTlpc()
238  if exists("g:lpc_syntax_for_c")
239    let lnum = 1
240    while lnum <= 12
241      if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)'
242	setf lpc
243	return
244      endif
245      let lnum = lnum + 1
246    endwhile
247  endif
248  setf c
249endfun
250
251" Calendar
252au BufNewFile,BufRead calendar,*/.calendar/*,
253	\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
254	\					setf calendar
255
256" C#
257au BufNewFile,BufRead *.cs			setf cs
258
259" Comshare Dimension Definition Language
260au BufNewFile,BufRead *.cdl			setf cdl
261
262" Controllable Regex Mutilator
263au BufNewFile,BufRead *.crm			setf crm
264
265" Cyn++
266au BufNewFile,BufRead *.cyn			setf cynpp
267
268" Cynlib
269" .cc and .cpp files can be C++ or Cynlib.
270au BufNewFile,BufRead *.cc
271	\ if exists("cynlib_syntax_for_cc")|setf cynlib|else|setf cpp|endif
272au BufNewFile,BufRead *.cpp
273	\ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif
274
275" C++
276if has("fname_case")
277  au BufNewFile,BufRead *.cxx,*.c++,*.C,*.H,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
278else
279  au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
280endif
281
282" .h files can be C, Ch or C++, set c_syntax_for_h if you want C,
283" ch_syntax_for_h if you want Ch.
284au BufNewFile,BufRead *.h
285	\ if exists("c_syntax_for_h") | setf c |
286	\ elseif exists("ch_syntax_for_h") | setf ch |
287	\ else | setf cpp | endif
288
289" Ch (CHscript)
290au BufNewFile,BufRead *.chf			setf ch
291
292" TLH files are C++ headers generated by Visual C++'s #import from typelibs
293au BufNewFile,BufRead *.tlh			setf cpp
294
295" Cascading Style Sheets
296au BufNewFile,BufRead *.css			setf css
297
298" Century Term Command Scripts (*.cmd too)
299au BufNewFile,BufRead *.con			setf cterm
300
301" Changelog
302au BufNewFile,BufRead changelog.Debian,changelog.dch setf debchangelog
303au BufNewFile,BufRead [cC]hange[lL]og		if getline(1) =~ '; urgency='
304	\| setf debchangelog | else | setf changelog | endif
305
306" CHILL
307au BufNewFile,BufRead *..ch			setf chill
308
309" Changes for WEB and CWEB or CHILL
310au BufNewFile,BufRead *.ch			call <SID>FTchange()
311
312" This function checks if one of the first ten lines start with a '@'.  In
313" that case it is probably a change file.
314" If the first line starts with # or ! it's probably a ch file.
315" If a line has "main", "include", "//" ir "/*" it's probably ch.
316" Otherwise CHILL is assumed.
317fun! <SID>FTchange()
318  let lnum = 1
319  while lnum <= 10
320    if getline(lnum)[0] == '@'
321      setf change
322      return
323    endif
324    if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!')
325      setf ch
326      return
327    endif
328    if getline(lnum) =~ "MODULE"
329      setf chill
330      return
331    endif
332    if getline(lnum) =~ 'main\s*(\|#\s*include\|//'
333      setf ch
334      return
335    endif
336    let lnum = lnum + 1
337  endwhile
338  setf chill
339endfun
340
341" Clean
342au BufNewFile,BufRead *.dcl,*.icl		setf clean
343
344" Clever
345au BufNewFile,BufRead *.eni			setf cl
346
347" Clever or dtd
348au BufNewFile,BufRead *.ent			call <SID>FTent()
349
350fun! <SID>FTent()
351  " This function checks for valid cl syntax in the first five lines.
352  " Look for either an opening comment, '#', or a block start, '{".
353  " If not found, assume SGML.
354  let lnum = 1
355  while lnum < 6
356    let line = getline(lnum)
357    if line =~ '^\s*[#{]'
358      setf cl
359      return
360    elseif line !~ '^\s*$'
361      " Not a blank line, not a comment, and not a block start,
362      " so doesn't look like valid cl code.
363      break
364    endif
365    let lnum = lnum + 1
366  endw
367  setf dtd
368endfun
369
370" Clipper (or FoxPro)
371au BufNewFile,BufRead *.prg
372	\ if exists("g:filetype_prg") |
373	\   exe "setf " . g:filetype_prg |
374	\ else |
375	\   setf clipper |
376	\ endif
377
378" Cobol
379au BufNewFile,BufRead *.cbl,*.cob,*.cpy,*.lib	setf cobol
380
381" Cold Fusion
382au BufNewFile,BufRead *.cfm,*.cfi,*.cfc		setf cf
383
384" Configure scripts
385au BufNewFile,BufRead configure.in,configure.ac setf config
386
387" WildPackets EtherPeek Decoder
388au BufNewFile,BufRead *.dcd			setf dcd
389
390" Enlightenment configuration files
391au BufNewFile,BufRead *enlightenment/*.cfg	setf c
392
393" Eterm
394au BufNewFile,BufRead *Eterm/*.cfg		setf eterm
395
396" Lynx config files
397au BufNewFile,BufRead lynx.cfg			setf lynx
398
399" Quake
400au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg	setf quake
401au BufNewFile,BufRead *quake[1-3]/*.cfg			setf quake
402
403" Quake C
404au BufNewFile,BufRead *.qc			setf c
405
406" Configure files
407au BufNewFile,BufRead *.cfg			setf cfg
408
409" Communicating Sequential Processes
410au BufNewFile,BufRead *.csp,*.fdr		setf csp
411
412" CUPL logic description and simulation
413au BufNewFile,BufRead *.pld			setf cupl
414au BufNewFile,BufRead *.si			setf cuplsim
415
416" Debian Control
417au BufNewFile,BufRead */debian/control		setf debcontrol
418
419" ROCKLinux package description
420au BufNewFile,BufRead *.desc			setf desc
421
422" the D language
423au BufNewFile,BufRead *.d			setf d
424
425" Desktop files
426au BufNewFile,BufRead *.desktop,.directory	setf desktop
427
428" Diff files
429au BufNewFile,BufRead *.diff,*.rej,*.patch	setf diff
430
431" Dircolors
432au BufNewFile,BufRead .dir_colors,/etc/DIR_COLORS	setf dircolors
433
434" Diva (with Skill) or InstallShield
435au BufNewFile,BufRead *.rul
436	\ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield' |
437	\   setf ishd |
438	\ else |
439	\   setf diva |
440	\ endif
441
442" DCL (Digital Command Language - vms) or DNS zone file
443au BufNewFile,BufRead *.com
444	\ if getline(1).getline(2) =~ '$ORIGIN\|$TTL\|IN\s*SOA'
445	\	|| getline(1).getline(2).getline(3).getline(4) =~ 'BIND.*named'
446	\ | setf dns | else | setf dcl | endif
447
448" DOT
449au BufNewFile,BufRead *.dot			setf dot
450
451" Dylan - lid files
452au BufNewFile,BufRead *.lid			setf dylanlid
453
454" Dylan - intr files (melange)
455au BufNewFile,BufRead *.intr			setf dylanintr
456
457" Dylan
458au BufNewFile,BufRead *.dylan			setf dylan
459
460" Microsoft Module Definition
461au BufNewFile,BufRead *.def			setf def
462
463" Dracula
464au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe	setf dracula
465
466" dsl
467au BufNewFile,BufRead *.dsl			setf dsl
468
469" DTD (Document Type Definition for XML)
470au BufNewFile,BufRead *.dtd			setf dtd
471
472" EDIF (*.edf,*.edif,*.edn,*.edo)
473au BufNewFile,BufRead *.ed\(f\|if\|n\|o\)	setf edif
474
475" Embedix Component Description
476au BufNewFile,BufRead *.ecd			setf ecd
477
478" Eiffel or Specman
479au BufNewFile,BufRead *.e,*.E			call FTCheck_e()
480
481" Elinks configuration
482au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf	setf elinks
483
484fun! FTCheck_e()
485  let n = 1
486  while n < 100 && n < line("$")
487    if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
488      setf specman
489      return
490    endif
491    let n = n + 1
492  endwhile
493  setf eiffel
494endfun
495
496" ERicsson LANGuage
497au BufNewFile,BufRead *.erl			setf erlang
498
499" Elm Filter Rules file
500au BufNewFile,BufRead filter-rules		setf elmfilt
501
502" ESQL-C
503au BufNewFile,BufRead *.ec,*.EC			setf esqlc
504
505" Essbase script
506au BufNewFile,BufRead *.csc			setf csc
507
508" Exim
509au BufNewFile,BufRead exim.conf			setf exim
510
511" Expect
512au BufNewFile,BufRead *.exp			setf expect
513
514" Exports
515au BufNewFile,BufRead exports			setf exports
516
517" Fetchmail RC file
518au BufNewFile,BufRead .fetchmailrc		setf fetchmail
519
520" Focus Executable
521au BufNewFile,BufRead *.fex,*.focexec		setf focexec
522
523" Focus Master file (but not for auto.master)
524au BufNewFile,BufRead auto.master		setf conf
525au BufNewFile,BufRead *.mas,*.master		setf master
526
527" Forth
528au BufNewFile,BufRead *.fs,*.ft			setf forth
529
530" Fortran
531au BufNewFile,BufRead *.f,*.F,*.for,*.fpp,*.ftn,*.f77,*.F77,*.f90,*.F90,*.f95,*.F95	setf fortran
532
533" FStab
534au BufNewFile,BufRead fstab			setf fstab
535
536" GDB command files
537au BufNewFile,BufRead .gdbinit			setf gdb
538
539" GDMO
540au BufNewFile,BufRead *.mo,*.gdmo		setf gdmo
541
542" Gedcom
543au BufNewFile,BufRead *.ged			setf gedcom
544
545" Gkrellmrc
546au BufNewFile,BufRead gkrellmrc,gkrellmrc_?	setf gkrellmrc
547
548" GP scripts (2.0 and onward)
549au BufNewFile,BufRead *.gp			setf gp
550
551" GPG
552au BufNewFile,BufRead */.gnupg/options		setf gpg
553au BufNewFile,BufRead */.gnupg/gpg.conf		setf gpg
554au BufNewFile,BufRead /usr/**/gnupg/options.skel setf gpg
555
556" Gnuplot scripts
557au BufNewFile,BufRead *.gpi			setf gnuplot
558
559" GrADS scripts
560au BufNewFile,BufRead *.gs			setf grads
561
562" Groovy
563au BufNewFile,BufRead *.groovy			setf groovy
564
565" GNU Server Pages
566au BufNewFile,BufRead *.gsp			setf gsp
567
568" GTK RC
569au BufNewFile,BufRead .gtkrc,gtkrc		setf gtkrc
570
571" Haskell
572au BufNewFile,BufRead *.hs			setf haskell
573au BufNewFile,BufRead *.lhs			setf lhaskell
574au BufNewFile,BufRead *.chs			setf chaskell
575
576" Hercules
577au BufNewFile,BufRead *.vc,*.ev,*.rs,*.sum,*.errsum	setf hercules
578
579" HEX (Intel)
580au BufNewFile,BufRead *.hex,*.h32		setf hex
581
582" Tilde (must be before HTML)
583au BufNewFile,BufRead *.t.html			setf tilde
584
585" HTML (.shtml and .stm for server side)
586au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm  call <SID>FTCheck_html()
587
588" Distinguish between HTML and XHTML
589fun! <SID>FTCheck_html()
590  let n = 1
591  while n < 10 && n < line("$")
592    if getline(n) =~ '\<DTD\s\+XHTML\s'
593      setf xhtml
594      return
595    endif
596    let n = n + 1
597  endwhile
598  setf html
599endfun
600
601
602" HTML with M4
603au BufNewFile,BufRead *.html.m4			setf htmlm4
604
605" HTML Cheetah template
606au BufNewFile,BufRead *.tmpl			setf htmlcheetah
607
608" Hyper Builder
609au BufNewFile,BufRead *.hb			setf hb
610
611" Icon
612au BufNewFile,BufRead *.icn			setf icon
613
614" IDL (Interface Description Language)
615au BufNewFile,BufRead *.idl			call <SID>FTCheck_idl()
616
617" Distinguish between standard IDL and MS-IDL
618fun! <SID>FTCheck_idl()
619  let n = 1
620  while n < 50 && n < line("$")
621    if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
622      setf msidl
623      return
624    endif
625    let n = n + 1
626  endwhile
627  setf idl
628endfun
629
630" Microsoft IDL (Interface Description Language)  Also *.idl
631" MOF = WMI (Windows Management Instrumentation) Managed Object Format
632au BufNewFile,BufRead *.odl,*.mof		setf msidl
633
634" Icewm menu
635au BufNewFile,BufRead */.icewm/menu		setf icemenu
636
637" Inform
638au BufNewFile,BufRead .indent.pro		setf indent
639
640" IDL (Interactive Data Language)
641au BufNewFile,BufRead *.pro			setf idlang
642
643" Inform
644au BufNewFile,BufRead *.inf,*.INF		setf inform
645
646" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.)
647au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl	setf fgl
648
649" .INI file for MSDOS
650au BufNewFile,BufRead *.ini			setf dosini
651
652" SysV Inittab
653au BufNewFile,BufRead inittab			setf inittab
654
655" Inno Setup
656au BufNewFile,BufRead *.iss			setf iss
657
658" JAL
659au BufNewFile,BufRead *.jal,*.JAL		setf jal
660
661" Jam
662au BufNewFile,BufRead *.jpl,*.jpr		setf jam
663
664" Java
665au BufNewFile,BufRead *.java,*.jav		setf java
666
667" JavaCC
668au BufNewFile,BufRead *.jj,*.jjt		setf javacc
669
670" JavaScript
671au BufNewFile,BufRead *.js,*.javascript		setf javascript
672
673" Java Server Pages
674au BufNewFile,BufRead *.jsp			setf jsp
675
676" Java Properties resource file (note: doesn't catch font.properties.pl)
677au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_??,*.properties_??_??_*	setf jproperties
678
679" Jess
680au BufNewFile,BufRead *.clp			setf jess
681
682" Jgraph
683au BufNewFile,BufRead *.jgr			setf jgraph
684
685" Kixtart
686au BufNewFile,BufRead *.kix			setf kix
687
688" Kimwitu[++]
689au BufNewFile,BufRead *.k			setf kwt
690
691" KDE script
692au BufNewFile,BufRead *.ks			setf kscript
693
694" Lace (ISE)
695au BufNewFile,BufRead *.ace,*.ACE		setf lace
696
697" Latte
698au BufNewFile,BufRead *.latte,*.lte		setf latte
699
700" LambdaProlog (*.mod too, see Modsim)
701au BufNewFile,BufRead *.sig			setf lprolog
702
703" LDAP LDIF
704au BufNewFile,BufRead *.ldif			setf ldif
705
706" Lex
707au BufNewFile,BufRead *.lex,*.l			setf lex
708
709" Libao
710au BufNewFile,BufRead /etc/libao.conf,*/.libao	setf libao
711
712" LFTP
713au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc	setf lftp
714
715" Lifelines (or Lex for C++!)
716au BufNewFile,BufRead *.ll			setf lifelines
717
718" Lilo: Linux loader
719au BufNewFile,BufRead lilo.conf*		setf lilo
720
721" Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp)
722if has("fname_case")
723  au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,*.L,.emacs,.sawfishrc setf lisp
724else
725  au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,.emacs,.sawfishrc setf lisp
726endif
727
728" Lite
729au BufNewFile,BufRead *.lite,*.lt		setf lite
730
731" Logtalk
732au BufNewFile,BufRead *.lgt			setf logtalk
733
734" LOTOS
735au BufNewFile,BufRead *.lot,*.lotos		setf lotos
736
737" Lout (also: *.lt)
738au BufNewFile,BufRead *.lou,*.lout		setf lout
739
740" Lua
741au BufNewFile,BufRead *.lua			setf lua
742
743" Lynx style file (or LotusScript!)
744au BufNewFile,BufRead *.lss			setf lss
745
746" M4
747au BufNewFile,BufRead *.m4
748	\ if expand("<afile>") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif
749
750" MaGic Point
751au BufNewFile,BufRead *.mgp			setf mgp
752
753" Mail (for Elm, trn, mutt, rn, slrn)
754au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt-*-\w\+,mutt\w\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
755
756" Mailcap configuration file
757au BufNewFile,BufRead .mailcap,mailcap		setf mailcap
758
759" Makefile
760au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make
761
762" MakeIndex
763au BufNewFile,BufRead *.ist,*.mst		setf ist
764
765" Manpage
766au BufNewFile,BufRead *.man			setf man
767
768" Maple V
769au BufNewFile,BufRead *.mv,*.mpl,*.mws		setf maple
770
771" Mason
772au BufNewFile,BufRead *.mason,*.mhtml		setf mason
773
774" Matlab or Objective C
775au BufNewFile,BufRead *.m			call FTCheck_m()
776
777fun! FTCheck_m()
778  let n = 1
779  while n < 10
780    let line = getline(n)
781    if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)'
782      setf objc
783      return
784    endif
785    if line =~ '^\s*%'
786      setf matlab
787      return
788    endif
789    if line =~ '^\s*(\*'
790      setf mma
791      return
792    endif
793    let n = n + 1
794  endwhile
795  setf matlab
796endfun
797
798" Maya Extension Language
799au BufNewFile,BufRead *.mel			setf mel
800
801" Metafont
802au BufNewFile,BufRead *.mf			setf mf
803
804" MetaPost
805au BufNewFile,BufRead *.mp			setf mp
806
807" MMIX or VMS makefile
808au BufNewFile,BufRead *.mms			call FTCheck_mms()
809
810fun! FTCheck_mms()
811  let n = 1
812  while n < 10
813    let line = getline(n)
814    if line =~ '^\s*\(%\|//\)' || line =~ '^\*'
815      setf mmix
816      return
817    endif
818    if line =~ '^\s*#'
819      setf make
820      return
821    endif
822    let n = n + 1
823  endwhile
824  setf mmix
825endfun
826
827
828" Modsim III (or LambdaProlog)
829au BufNewFile,BufRead *.mod
830	\ if getline(1) =~ '\<module\>' |
831	\   setf lprolog |
832	\ else |
833	\   setf modsim3 |
834	\ endif
835
836" Modula 2
837au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi setf modula2
838
839" Modula 3 (.m3, .i3, .mg, .ig)
840au BufNewFile,BufRead *.[mi][3g]		setf modula3
841
842" Monk
843au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc	setf monk
844
845" MOO
846au BufNewFile,BufRead *.moo			setf moo
847
848" Modconf
849au BufNewFile,BufRead /etc/modules.conf,/etc/conf.modules	setf modconf
850au BufNewFile,BufRead /etc/modutils/*
851	\ if executable(expand("<afile>")) != 1 | setf modconf | endif
852
853" Mplayer config
854au BufNewFile,BufRead mplayer.conf,*/.mplayer/config	setf mplayerconf
855
856" Moterola S record
857au BufNewFile,BufRead *.s19,*.s28,*.s37		setf srec
858
859" Msql
860au BufNewFile,BufRead *.msql			setf msql
861
862" Mysql
863au BufNewFile,BufRead *.mysql			setf mysql
864
865" M$ Resource files
866au BufNewFile,BufRead *.rc			setf rc
867
868" Mush
869au BufNewFile,BufRead *.mush			setf mush
870
871" Mutt setup file
872au BufNewFile,BufRead .muttrc*,*/.mutt/muttrc*,Muttrc	setf muttrc
873
874" Nastran input/DMAP
875"au BufNewFile,BufRead *.dat			setf nastran
876
877" Natural
878au BufNewFile,BufRead *.NS[ACGLMNPS]		setf natural
879
880" Novell netware batch files
881au BufNewFile,BufRead *.ncf			setf ncf
882
883" Nroff/Troff (*.ms and *.t are checked below)
884au BufNewFile,BufRead *.me
885	\ if expand("<afile>") != "read.me" && expand("<afile>") != "click.me" |
886	\   setf nroff |
887	\ endif
888au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom	setf nroff
889au BufNewFile,BufRead *.[1-9]			call <SID>FTnroff()
890
891" This function checks if one of the first five lines start with a dot.  In
892" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
893fun! <SID>FTnroff()
894  if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
895    setf nroff
896    return 1
897  endif
898  return 0
899endfun
900
901" Nroff or Objective C++
902au BufNewFile,BufRead *.mm			call <SID>FTcheck_mm()
903
904fun! <SID>FTcheck_mm()
905  let n = 1
906  while n < 10
907    let line = getline(n)
908    if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)'
909      setf objcpp
910      return
911    endif
912    let n = n + 1
913  endwhile
914  setf nroff
915endfun
916
917" Not Quite C
918au BufNewFile,BufRead *.nqc			setf nqc
919
920" NSIS
921au BufNewFile,BufRead *.nsi			setf nsis
922
923" OCAML
924au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly	setf ocaml
925
926" Occam
927au BufNewFile,BufRead *.occ			setf occam
928
929" Omnimark
930au BufNewFile,BufRead *.xom,*.xin		setf omnimark
931
932" OpenROAD
933au BufNewFile,BufRead *.or			setf openroad
934
935" OPL
936au BufNewFile,BufRead *.[Oo][Pp][Ll]		setf opl
937
938" Oracle config file
939au BufNewFile,BufRead *.ora			setf ora
940
941" Packet filter conf
942au BufNewFile,BufRead pf.conf			setf pf
943
944" PApp
945au BufNewFile,BufRead *.papp,*.pxml,*.pxsl	setf papp
946
947" Pascal (also *.p)
948au BufNewFile,BufRead *.pas			setf pascal
949
950" Delphi project file
951au BufNewFile,BufRead *.dpr			setf pascal
952
953" Perl
954if has("fname_case")
955  au BufNewFile,BufRead *.pl,*.PL		call FTCheck_pl()
956else
957  au BufNewFile,BufRead *.pl			call FTCheck_pl()
958endif
959au BufNewFile,BufRead *.plx			setf perl
960
961fun! FTCheck_pl()
962  if exists("g:filetype_pl")
963    exe "setf " . g:filetype_pl
964  else
965    " recognize Prolog by specific text in the first non-empty line
966    " require a blank after the '%' because Perl uses "%list" and "%translate"
967    let l = getline(nextnonblank(1))
968    if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
969      setf prolog
970    else
971      setf perl
972    endif
973  endif
974endfun
975
976" Perl, XPM or XPM2
977au BufNewFile,BufRead *.pm
978	\ if getline(1) =~ "XPM2" |
979	\   setf xpm2 |
980	\ elseif getline(1) =~ "XPM" |
981	\   setf xpm |
982	\ else |
983	\   setf perl |
984	\ endif
985
986" Perl POD
987au BufNewFile,BufRead *.pod			setf pod
988
989" Php3
990au BufNewFile,BufRead *.php,*.php3		setf php
991
992" Phtml
993au BufNewFile,BufRead *.phtml			setf phtml
994
995" Pike
996au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike
997
998" Pinfo config
999au BufNewFile,BufRead */etc/pinforc,*/.pinforc	setf pinfo
1000
1001" Palm Resource compiler
1002au BufNewFile,BufRead *.rcp			setf pilrc
1003
1004" Pine config
1005au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex		setf pine
1006
1007" PL/M (also: *.inp)
1008au BufNewFile,BufRead *.plm,*.p36,*.pac		setf plm
1009
1010" PL/SQL
1011au BufNewFile,BufRead *.pls,*.plsql		setf plsql
1012
1013" PLP
1014au BufNewFile,BufRead *.plp			setf plp
1015
1016" PO and PO template (GNU gettext)
1017au BufNewFile,BufRead *.po,*.pot		setf po
1018
1019" Postfix main config
1020au BufNewFile,BufRead main.cf			setf pfmain
1021
1022" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator)
1023au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai	  setf postscr
1024
1025" PostScript Printer Description
1026au BufNewFile,BufRead *.ppd			setf ppd
1027
1028" Povray
1029au BufNewFile,BufRead *.pov			setf pov
1030
1031" Povray configuration
1032au BufNewFile,BufRead .povrayrc			setf povini
1033
1034" Povray, PHP or assembly
1035au BufNewFile,BufRead *.inc			call FTCheck_inc()
1036
1037fun! FTCheck_inc()
1038  if exists("g:filetype_inc")
1039    exe "setf " . g:filetype_inc
1040  else
1041    let lines = getline(1).getline(2).getline(3)
1042    if lines =~? "perlscript"
1043      setf aspperl
1044    elseif lines =~ "<%"
1045      setf aspvbs
1046    elseif lines =~ "<?"
1047      setf php
1048    else
1049      call FTCheck_asmsyntax()
1050      if exists("b:asmsyntax")
1051	exe "setf " . b:asmsyntax
1052      else
1053	setf pov
1054      endif
1055    endif
1056  endif
1057endfun
1058
1059" Printcap and Termcap
1060au BufNewFile,BufRead *printcap
1061	\ let b:ptcap_type = "print" | setf ptcap
1062au BufNewFile,BufRead *termcap
1063	\ let b:ptcap_type = "term" | setf ptcap
1064
1065" PCCTS / ANTRL
1066"au BufNewFile,BufRead *.g			setf antrl
1067au BufNewFile,BufRead *.g			setf pccts
1068
1069" PPWizard
1070au BufNewFile,BufRead *.it,*.ih			setf ppwiz
1071
1072" Oracle Pro*C/C++
1073au BufNewFile,BufRead .pc			setf proc
1074
1075" Procmail
1076au BufNewFile,BufRead .procmail,.procmailrc	setf procmail
1077
1078" Progress or CWEB
1079au BufNewFile,BufRead *.w			call <SID>FTprogress_cweb()
1080
1081function! <SID>FTprogress_cweb()
1082  if exists("g:filetype_w")
1083    exe "setf " . g:filetype_w
1084    return
1085  endif
1086  if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
1087    setf progress
1088  else
1089    setf cweb
1090  endif
1091endfun
1092
1093" Progress or assembly
1094au BufNewFile,BufRead *.i			call <SID>FTprogress_asm()
1095
1096function! <SID>FTprogress_asm()
1097  if exists("g:filetype_i")
1098    exe "setf " . g:filetype_i
1099    return
1100  endif
1101  " This function checks for an assembly comment the first ten lines.
1102  " If not found, assume Progress.
1103  let lnum = 1
1104  while lnum <= 10
1105    let line = getline(lnum)
1106    if line =~ '^\s*;' || line =~ '^\*'
1107      call FTCheck_asm()
1108      return
1109    elseif line !~ '^\s*$' || line =~ '^/\*'
1110      " Not an empty line: Doesn't look like valid assembly code.
1111      " Or it looks like a Progress /* comment
1112      break
1113    endif
1114    let lnum = lnum + 1
1115  endw
1116  setf progress
1117endfun
1118
1119" Progress or Pascal
1120au BufNewFile,BufRead *.p			call <SID>FTprogress_pascal()
1121
1122function! <SID>FTprogress_pascal()
1123  if exists("g:filetype_p")
1124    exe "setf " . g:filetype_p
1125    return
1126  endif
1127  " This function checks for valid Pascal syntax in the first ten lines.
1128  " Look for either an opening comment or a program start.
1129  " If not found, assume Progress.
1130  let lnum = 1
1131  while lnum <= 10
1132    let line = getline(lnum)
1133    if line =~ '^\s*\(program\|procedure\|function\|const\|type\|var\)\>'
1134	\ || line =~ '^\s*{' || line =~ '^\s*(\*'
1135      setf pascal
1136      return
1137    elseif line !~ '^\s*$' || line =~ '^/\*'
1138      " Not an empty line: Doesn't look like valid Pascal code.
1139      " Or it looks like a Progress /* comment
1140      break
1141    endif
1142    let lnum = lnum + 1
1143  endw
1144  setf progress
1145endfun
1146
1147
1148" Software Distributor Product Specification File (POSIX 1387.2-1995)
1149au BufNewFile,BufRead *.psf			setf psf
1150au BufNewFile,BufRead INDEX,INFO
1151	\ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' |
1152	\   setf psf |
1153	\ endif
1154
1155" Prolog
1156au BufNewFile,BufRead *.pdb			setf prolog
1157
1158" Pyrex
1159au BufNewFile,BufRead *.pyx,*.pxd		setf pyrex
1160
1161" Python
1162au BufNewFile,BufRead *.py,*.pyw		setf python
1163
1164" Radiance
1165au BufNewFile,BufRead *.rad,*.mat		setf radiance
1166
1167" Ratpoison config/command files
1168au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc	setf ratpoison
1169
1170" RCS file
1171au BufNewFile,BufRead *\,v			setf rcs
1172
1173" Readline
1174au BufNewFile,BufRead .inputrc			setf readline
1175
1176" Registry for MS-Windows
1177au BufNewFile,BufRead *.reg
1178	\ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif
1179
1180" Renderman Interface Bytestream
1181au BufNewFile,BufRead *.rib			setf rib
1182
1183" Rexx
1184au BufNewFile,BufRead *.rexx,*.rex		setf rexx
1185
1186" R (Splus)
1187au BufNewFile,BufRead *.s,*.S			setf r
1188
1189" Rexx, Rebol or R
1190au BufNewFile,BufRead *.r,*.R			call <SID>FTCheck_r()
1191
1192fun! <SID>FTCheck_r()
1193  if getline(1) =~ '^REBOL'
1194    setf rebol
1195  else
1196    let n = 1
1197    let max = line("$")
1198    if max > 50
1199      let max = 50
1200    endif
1201    while n < max
1202      " R has # comments
1203      if getline(n) =~ '^\s*#'
1204	setf r
1205	break
1206      endif
1207      " Rexx has /* comments */
1208      if getline(n) =~ '^\s*/\*'
1209	setf rexx
1210	break
1211      endif
1212      let n = n + 1
1213    endwhile
1214    if n >= max
1215      setf rexx
1216    endif
1217  endif
1218endfun
1219
1220" Remind
1221au BufNewFile,BufRead .reminders*		setf remind
1222
1223" Resolv.conf
1224au BufNewFile,BufRead resolv.conf		setf resolv
1225
1226" Relax NG Compact
1227au BufNewFile,BufRead *.rnc			setf rnc
1228
1229" RPL/2
1230au BufNewFile,BufRead *.rpl			setf rpl
1231
1232" Robots.txt
1233au BufNewFile,BufRead robots.txt		setf robots
1234
1235" Rpcgen
1236au BufNewFile,BufRead *.x			setf rpcgen
1237
1238" reStructuredText Documentation Format
1239au BufNewFile,BufRead *.rst			setf rst
1240
1241" RTF
1242au BufNewFile,BufRead *.rtf			setf rtf
1243
1244" Ruby
1245au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec	setf ruby
1246
1247" S-lang (or shader language!)
1248au BufNewFile,BufRead *.sl			setf slang
1249
1250" Samba config
1251au BufNewFile,BufRead smb.conf			setf samba
1252
1253" SAS script
1254au BufNewFile,BufRead *.sas			setf sas
1255
1256" Sather
1257au BufNewFile,BufRead *.sa			setf sather
1258
1259" Scilab
1260au BufNewFile,BufRead *.sci			setf scilab
1261
1262" SDL
1263au BufNewFile,BufRead *.sdl,*.pr		setf sdl
1264
1265" sed
1266au BufNewFile,BufRead *.sed			setf sed
1267
1268" Sendmail
1269au BufNewFile,BufRead sendmail.cf		setf sm
1270
1271" Sendmail .mc files are actually m4
1272au BufNewFile,BufRead *.mc			setf m4
1273
1274" SGML
1275au BufNewFile,BufRead *.sgm,*.sgml
1276	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' |
1277	\   setf sgmllnx |
1278	\ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
1279	\   let b:docbk_type="sgml" |
1280	\   setf docbk |
1281	\ else |
1282	\   setf sgml |
1283	\ endif
1284
1285" SGMLDECL
1286au BufNewFile,BufRead *.decl,*.dcl,*.dec
1287	\ if getline(1).getline(2).getline(3) =~? '^<!SGML' |
1288	\    setf sgmldecl |
1289	\ endif
1290
1291" SGML catalog file
1292au BufNewFile,BufRead sgml.catalog*,catalog	setf catalog
1293
1294" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
1295" Gentoo ebuilds are actually bash scripts
1296au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash")
1297au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh")
1298au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
1299
1300fun! SetFileTypeSH(name)
1301  if a:name =~ '\<ksh\>'
1302    let b:is_kornshell = 1
1303    if exists("b:is_bash")
1304      unlet b:is_bash
1305    endif
1306    if exists("b:is_sh")
1307      unlet b:is_sh
1308    endif
1309  elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
1310    let b:is_bash = 1
1311    if exists("b:is_kornshell")
1312      unlet b:is_kornshell
1313    endif
1314    if exists("b:is_sh")
1315      unlet b:is_sh
1316    endif
1317  elseif a:name =~ '\<sh\>'
1318    let b:is_sh = 1
1319    if exists("b:is_kornshell")
1320      unlet b:is_kornshell
1321    endif
1322    if exists("b:is_bash")
1323      unlet b:is_bash
1324    endif
1325  endif
1326  setf sh
1327endfun
1328
1329" tcsh scripts
1330au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login	setf tcsh
1331
1332" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh)
1333au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias  call SetFileTypeCSH()
1334
1335fun! SetFileTypeCSH()
1336  if exists("g:filetype_csh")
1337    exe "setf " . g:filetype_csh
1338  elseif &shell =~ "tcsh"
1339    setf tcsh
1340  else
1341    setf csh
1342  endif
1343endfun
1344
1345" Z-Shell script
1346au BufNewFile,BufRead .zsh*,.zlog*,.zprofile,/etc/zprofile,.zfbfmarks,.zcompdump*  setf zsh
1347
1348" Scheme
1349au BufNewFile,BufRead *.scm,*.ss		setf scheme
1350
1351" Screen RC
1352au BufNewFile,BufRead .screenrc,screenrc	setf screen
1353
1354" Simula
1355au BufNewFile,BufRead *.sim			setf simula
1356
1357" SINDA
1358au BufNewFile,BufRead *.sin,*.s85		setf sinda
1359
1360" SKILL
1361au BufNewFile,BufRead *.il			setf skill
1362
1363" SLRN
1364au BufNewFile,BufRead .slrnrc			setf slrnrc
1365au BufNewFile,BufRead *.score			setf slrnsc
1366
1367" Smalltalk
1368au BufNewFile,BufRead *.st,*.cls		setf st
1369
1370" Smarty templates
1371au BufNewFile,BufRead *.tpl			setf smarty
1372
1373" SMIL or XML
1374au BufNewFile,BufRead *.smil
1375	\ if getline(1) =~ '<?\s*xml.*?>' |
1376	\   setf xml |
1377	\ else |
1378	\   setf smil |
1379	\ endif
1380
1381" SMIL or SNMP MIB file
1382au BufNewFile,BufRead *.smi
1383	\ if getline(1) =~ '\<smil\>' |
1384	\   setf smil |
1385	\ else |
1386	\   setf mib |
1387	\ endif
1388
1389" SMITH
1390au BufNewFile,BufRead *.smt,*.smith		setf smith
1391
1392" Snobol4
1393au BufNewFile,BufRead *.sno			setf snobol4
1394
1395" SNMP MIB files
1396au BufNewFile,BufRead *.mib,*.my		setf mib
1397
1398" Snort Configuration
1399au BufNewFile,BufRead *.hog,snort.conf,vision.conf,*.rules	setf hog
1400
1401" Spec (Linux RPM)
1402au BufNewFile,BufRead *.spec			setf spec
1403
1404" Speedup (AspenTech plant simulator)
1405au BufNewFile,BufRead *.speedup,*.spdata,*.spd	setf spup
1406
1407" Slice
1408au BufNewFile,BufRead *.ice			setf slice
1409
1410" Spice
1411au BufNewFile,BufRead *.sp,*.spice		setf spice
1412
1413" Spyce
1414au BufNewFile,BufRead *.spy,*.spi		setf spyce
1415
1416" Squid
1417au BufNewFile,BufRead squid.conf		setf squid
1418
1419" SQL (all but the first one for Oracle Designer)
1420au BufNewFile,BufRead *.sql,*.tyb,*.typ,*.tyc,*.pkb,*.pks	setf sql
1421
1422" SQLJ
1423au BufNewFile,BufRead *.sqlj			setf sqlj
1424
1425" SQR
1426au BufNewFile,BufRead *.sqr,*.sqi		setf sqr
1427
1428" OpenSSH configuration
1429au BufNewFile,BufRead ssh_config,*/.ssh/config	setf sshconfig
1430
1431" OpenSSH server configuration
1432au BufNewFile,BufRead sshd_config		setf sshdconfig
1433
1434" Stored Procedures
1435au BufNewFile,BufRead *.stp			setf stp
1436
1437" Standard ML
1438au BufNewFile,BufRead *.sml			setf sml
1439
1440" Tads (or Nroff)
1441au BufNewFile,BufRead *.t
1442	\ if !<SID>FTnroff() | setf tads | endif
1443
1444" Tags
1445au BufNewFile,BufRead tags			setf tags
1446
1447" TAK
1448au BufNewFile,BufRead *.tak			setf tak
1449
1450" Tcl
1451au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk	setf tcl
1452
1453" TealInfo
1454au BufNewFile,BufRead *.tli			setf tli
1455
1456" Telix Salt
1457au BufNewFile,BufRead *.slt			setf tsalt
1458
1459" Terminfo
1460au BufNewFile,BufRead *.ti			setf terminfo
1461
1462" TeX
1463au BufNewFile,BufRead *.tex,*.latex,*.sty,*.dtx,*.ltx,*.bbl	setf tex
1464
1465" Texinfo
1466au BufNewFile,BufRead *.texinfo,*.texi,*.txi	setf texinfo
1467
1468" TeX configuration
1469au BufNewFile,BufRead texmf.cnf			setf texmf
1470
1471" Tidy config
1472au BufNewFile,BufRead .tidyrc,tidyrc		setf tidy
1473
1474" TF mud client
1475au BufNewFile,BufRead *.tf,.tfrc,tfrc		setf tf
1476
1477" TSS - Geometry
1478au BufNewFile,BufReadPost *.tssgm		setf tssgm
1479
1480" TSS - Optics
1481au BufNewFile,BufReadPost *.tssop		setf tssop
1482
1483" TSS - Command Line (temporary)
1484au BufNewFile,BufReadPost *.tsscl		setf tsscl
1485
1486" Motif UIT/UIL files
1487au BufNewFile,BufRead *.uit,*.uil		setf uil
1488
1489" UnrealScript
1490au BufNewFile,BufRead *.uc			setf uc
1491
1492" Verilog HDL
1493au BufNewFile,BufRead *.v			setf verilog
1494
1495" VHDL
1496au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vhdl_[0-9]*,*.vbe,*.vst  setf vhdl
1497
1498" Vim script
1499au BufNewFile,BufRead *.vim,.exrc,_exrc		setf vim
1500
1501" Viminfo file
1502au BufNewFile,BufRead .viminfo,_viminfo		setf viminfo
1503
1504" Virata Config Script File
1505au BufRead,BufNewFile *.hw,*.module,*.pkg	setf virata
1506
1507" Visual Basic (also uses *.bas) or FORM
1508au BufNewFile,BufRead *.frm			call <SID>FTVB("form")
1509
1510" SaxBasic is close to Visual Basic
1511au BufNewFile,BufRead *.sba			setf vb
1512
1513" Vgrindefs file
1514au BufNewFile,BufRead vgrindefs			setf vgrindefs
1515
1516" VRML V1.0c
1517au BufNewFile,BufRead *.wrl			setf vrml
1518
1519" Webmacro
1520au BufNewFile,BufRead *.wm			setf webmacro
1521
1522" Wget config
1523au BufNewFile,BufRead .wgetrc,wgetrc		setf wget
1524
1525" Website MetaLanguage
1526au BufNewFile,BufRead *.wml			setf wml
1527
1528" Winbatch
1529au BufNewFile,BufRead *.wbt			setf winbatch
1530
1531" WvDial
1532au BufNewFile,BufRead wvdial.conf,.wvdialrc	setf wvdial
1533
1534" CVS RC file
1535au BufNewFile,BufRead .cvsrc			setf cvsrc
1536
1537" CVS commit file
1538au BufNewFile,BufRead cvs\d\+			setf cvs
1539
1540" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment
1541" lines in a WEB file).
1542au BufNewFile,BufRead *.web
1543	\ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" |
1544	\   setf web |
1545	\ else |
1546	\   setf winbatch |
1547	\ endif
1548
1549" Windows Scripting Host and Windows Script Component
1550au BufNewFile,BufRead *.ws[fc]			setf wsh
1551
1552" X Pixmap (dynamically sets colors, use BufEnter to make it work better)
1553au BufEnter *.xpm
1554	\ if getline(1) =~ "XPM2" |
1555	\   setf xpm2 |
1556	\ else |
1557	\   setf xpm |
1558	\ endif
1559au BufEnter *.xpm2				setf xpm2
1560
1561" XFree86 config
1562au BufNewFile,BufRead XF86Config
1563	\ if getline(1) =~ '\<XConfigurator\>' |
1564	\   let b:xf86c_xfree86_version = 3 |
1565	\ endif |
1566	\ setf xf86conf
1567
1568" Xorg config
1569au BufNewFile,BufRead xorg.conf,xorg.conf-4	let b:xf86c_xfree86_version = 4 | setf xf86conf
1570
1571" XS Perl extension interface language
1572au BufNewFile,BufRead *.xs			setf xs
1573
1574" X resources file
1575au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults
1576
1577" Xmath
1578au BufNewFile,BufRead *.msc,*.msf		setf xmath
1579au BufNewFile,BufRead *.ms
1580	\ if !<SID>FTnroff() | setf xmath | endif
1581
1582" XML
1583au BufNewFile,BufRead *.xml
1584	\ if getline(1) . getline(2) . getline(3) =~ '<!DOCTYPE.*DocBook' |
1585	\   let b:docbk_type="xml" |
1586	\   setf docbk |
1587	\ else |
1588	\   setf xml |
1589	\ endif
1590
1591" XMI (holding UML models) is also XML
1592au BufNewFile,BufRead *.xmi			setf xml
1593
1594" CSPROJ files are Visual Studio.NET's XML-based project config files
1595au BufNewFile,BufRead *.csproj,*.csproj.user	setf xml
1596
1597" Qt Linguist translation source and Qt User Interface Files are XML
1598au BufNewFile,BufRead *.ts,*.ui			setf xml
1599
1600" XSD
1601au BufNewFile,BufRead *.xsd			setf xsd
1602
1603" Xslt
1604au BufNewFile,BufRead *.xsl,*.xslt		setf xslt
1605
1606" Yacc
1607au BufNewFile,BufRead *.y,*.yy			setf yacc
1608
1609" Yaml
1610au BufNewFile,BufRead *.yaml,*.yml		setf yaml
1611
1612" Z80 assembler asz80
1613au BufNewFile,BufRead *.z8a			setf z8a
1614
1615augroup END
1616
1617
1618" Source the user-specified filetype file, for backwards compatibility with
1619" Vim 5.x.
1620if exists("myfiletypefile") && file_readable(expand(myfiletypefile))
1621  execute "source " . myfiletypefile
1622endif
1623
1624
1625" Check for "*" after loading myfiletypefile, so that scripts.vim is only used
1626" when there are no matching file name extensions.
1627" Don't do this for compressed files.
1628augroup filetypedetect
1629au BufNewFile,BufRead *
1630	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
1631	\ | runtime! scripts.vim | endif
1632au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
1633
1634
1635" Extra checks for when no filetype has been detected now.  Mostly used for
1636" patterns that end in "*".  E.g., "zsh*" matches "zsh.vim", but that's a Vim
1637" script file.
1638
1639" BIND zone
1640au BufNewFile,BufRead /var/named/*		setf bindzone
1641
1642" Changelog
1643au BufNewFile,BufRead [cC]hange[lL]og*		if getline(1) =~ '; urgency='
1644	\| setf debchangelog | else | setf changelog | endif
1645
1646" Crontab
1647au BufNewFile,BufRead crontab,crontab.*		setf crontab
1648
1649" Dracula
1650au BufNewFile,BufRead drac.*			setf dracula
1651
1652" Fvwm
1653au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
1654	\ let b:fvwm_version = 1 | setf fvwm
1655au BufNewFile,BufRead *fvwm2rc*
1656	\ if expand("<afile>:e") == "m4" | setf fvwm2m4 | else |
1657	\ let b:fvwm_version = 2 | setf fvwm | endif
1658
1659" GTK RC
1660au BufNewFile,BufRead .gtkrc*,gtkrc*		setf gtkrc
1661
1662" Jam
1663au BufNewFile,BufRead Prl*.*,JAM*.*		setf jam
1664
1665" Jargon
1666au! BufNewFile,BufRead *jarg*
1667	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE' |
1668	\   setf jargon |
1669	\ endif
1670
1671" Makefile
1672au BufNewFile,BufRead [mM]akefile*		setf make
1673
1674" Ruby Makefile
1675au BufNewFile,BufRead [rR]akefile*		setf ruby
1676
1677" Mutt setup file
1678au BufNewFile,BufRead muttrc*,Muttrc*		setf muttrc
1679
1680" Nroff macros
1681au BufNewFile,BufRead tmac.*			setf nroff
1682
1683" Printcap and Termcap
1684au BufNewFile,BufRead *printcap*
1685	\ if !did_filetype() | let b:ptcap_type = "print" | setf ptcap | endif
1686au BufNewFile,BufRead *termcap*
1687	\ if !did_filetype() | let b:ptcap_type = "term" | setf ptcap | endif
1688
1689" Vim script
1690au BufNewFile,BufRead *vimrc*			setf vim
1691
1692" Subversion commit file
1693au BufNewFile,BufRead svn-commit.*.tmp		setf svn
1694
1695" X resources file
1696au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* setf xdefaults
1697
1698" XFree86 config
1699au BufNewFile,BufRead XF86Config-4*
1700	\ let b:xf86c_xfree86_version = 4 | setf xf86conf
1701au BufNewFile,BufRead XF86Config*
1702	\ if getline(1) =~ '\<XConfigurator\>' |
1703	\   let b:xf86c_xfree86_version = 3 |
1704	\ endif |
1705	\ setf xf86conf
1706
1707" X11 xmodmap
1708au BufNewFile,BufRead *xmodmap*			setf xmodmap
1709
1710" Z-Shell script
1711au BufNewFile,BufRead zsh*,zlog*		setf zsh
1712
1713
1714" Generic configuration file (check this last, it's just guessing!)
1715au BufNewFile,BufRead,StdinReadPost *
1716	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
1717	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
1718	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
1719	\   setf conf |
1720	\ endif
1721
1722" Use the plugin-filetype checks last, they may overrule any of the previously
1723" detected filetypes.
1724runtime! ftdetect/*.vim
1725
1726augroup END
1727
1728
1729" If the GUI is already running, may still need to install the Syntax menu.
1730" Don't do it when the 'M' flag is included in 'guioptions'.
1731if has("menu") && has("gui_running")
1732      \ && !exists("did_install_syntax_menu") && &guioptions !~# "M"
1733  source <sfile>:p:h/menu.vim
1734endif
1735
1736" Restore 'cpoptions'
1737let &cpo = s:cpo_save
1738unlet s:cpo_save
1739