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