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