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