xref: /vim-8.2.3635/runtime/filetype.vim (revision 8ea05de6)
1" Vim support file to detect file types
2"
3" Maintainer:	Bram Moolenaar <[email protected]>
4" Last Change:	2020 Dec 07
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
19if exists("*fnameescape")
20au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.dpkg-new,?\+.dpkg-bak,?\+.rpmsave,?\+.rpmnew,?\+.pacsave,?\+.pacnew
21	\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
22au BufNewFile,BufRead *~
23	\ let s:name = expand("<afile>") |
24	\ let s:short = substitute(s:name, '\~$', '', '') |
25	\ if s:name != s:short && s:short != "" |
26	\   exe "doau filetypedetect BufRead " . fnameescape(s:short) |
27	\ endif |
28	\ unlet! s:name s:short
29au BufNewFile,BufRead ?\+.in
30	\ if expand("<afile>:t") != "configure.in" |
31	\   exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
32	\ endif
33elseif &verbose > 0
34  echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
35endif
36
37" Pattern used to match file names which should not be inspected.
38" Currently finds compressed files.
39if !exists("g:ft_ignore_pat")
40  let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
41endif
42
43" Function used for patterns that end in a star: don't set the filetype if the
44" file name matches ft_ignore_pat.
45" When using this, the entry should probably be further down below with the
46" other StarSetf() calls.
47func! s:StarSetf(ft)
48  if expand("<amatch>") !~ g:ft_ignore_pat
49    exe 'setf ' . a:ft
50  endif
51endfunc
52
53" Vim help file
54au BufNewFile,BufRead $VIMRUNTIME/doc/*.txt	setf help
55
56" Abaqus or Trasys
57au BufNewFile,BufRead *.inp			call dist#ft#Check_inp()
58
59" 8th (Firth-derivative)
60au BufNewFile,BufRead *.8th			setf 8th
61
62" A-A-P recipe
63au BufNewFile,BufRead *.aap			setf aap
64
65" A2ps printing utility
66au BufNewFile,BufRead */etc/a2ps.cfg,*/etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
67
68" ABAB/4
69au BufNewFile,BufRead *.abap			setf abap
70
71" ABC music notation
72au BufNewFile,BufRead *.abc			setf abc
73
74" ABEL
75au BufNewFile,BufRead *.abl			setf abel
76
77" AceDB
78au BufNewFile,BufRead *.wrm			setf acedb
79
80" Ada (83, 9X, 95)
81au BufNewFile,BufRead *.adb,*.ads,*.ada		setf ada
82if has("vms")
83  au BufNewFile,BufRead *.gpr,*.ada_m,*.adc	setf ada
84else
85  au BufNewFile,BufRead *.gpr			setf ada
86endif
87
88" AHDL
89au BufNewFile,BufRead *.tdf			setf ahdl
90
91" AIDL
92au BufNewFile,BufRead *.aidl			setf aidl
93
94" AMPL
95au BufNewFile,BufRead *.run			setf ampl
96
97" Ant
98au BufNewFile,BufRead build.xml			setf ant
99
100" Arduino
101au BufNewFile,BufRead *.ino,*.pde		setf arduino
102
103" Apache config file
104au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf		setf apache
105au BufNewFile,BufRead */etc/apache2/sites-*/*.com		setf apache
106
107" XA65 MOS6510 cross assembler
108au BufNewFile,BufRead *.a65			setf a65
109
110" Applescript
111au BufNewFile,BufRead *.scpt			setf applescript
112
113" Applix ELF
114au BufNewFile,BufRead *.am
115	\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
116
117" ALSA configuration
118au BufNewFile,BufRead .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf setf alsaconf
119
120" Arc Macro Language
121au BufNewFile,BufRead *.aml			setf aml
122
123" APT config file
124au BufNewFile,BufRead apt.conf		       setf aptconf
125au BufNewFile,BufRead */.aptitude/config       setf aptconf
126au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} setf aptconf
127
128" Arch Inventory file
129au BufNewFile,BufRead .arch-inventory,=tagging-method	setf arch
130
131" ART*Enterprise (formerly ART-IM)
132au BufNewFile,BufRead *.art			setf art
133
134" AsciiDoc
135au BufNewFile,BufRead *.asciidoc,*.adoc		setf asciidoc
136
137" ASN.1
138au BufNewFile,BufRead *.asn,*.asn1		setf asn
139
140" Active Server Pages (with Visual Basic Script)
141au BufNewFile,BufRead *.asa
142	\ if exists("g:filetype_asa") |
143	\   exe "setf " . g:filetype_asa |
144	\ else |
145	\   setf aspvbs |
146	\ endif
147
148" Active Server Pages (with Perl or Visual Basic Script)
149au BufNewFile,BufRead *.asp
150	\ if exists("g:filetype_asp") |
151	\   exe "setf " . g:filetype_asp |
152	\ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" |
153	\   setf aspperl |
154	\ else |
155	\   setf aspvbs |
156	\ endif
157
158" Grub (must be before catch *.lst)
159au BufNewFile,BufRead */boot/grub/menu.lst,*/boot/grub/grub.conf,*/etc/grub.conf setf grub
160
161" Assembly (all kinds)
162" *.lst is not pure assembly, it has two extra columns (address, byte codes)
163au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst	call dist#ft#FTasm()
164
165" Macro (VAX)
166au BufNewFile,BufRead *.mar			setf vmasm
167
168" Atlas
169au BufNewFile,BufRead *.atl,*.as		setf atlas
170
171" Autoit v3
172au BufNewFile,BufRead *.au3			setf autoit
173
174" Autohotkey
175au BufNewFile,BufRead *.ahk			setf autohotkey
176
177" Automake
178au BufNewFile,BufRead [mM]akefile.am,GNUmakefile.am	setf automake
179
180" Autotest .at files are actually m4
181au BufNewFile,BufRead *.at			setf m4
182
183" Avenue
184au BufNewFile,BufRead *.ave			setf ave
185
186" Awk
187au BufNewFile,BufRead *.awk,*.gawk		setf awk
188
189" B
190au BufNewFile,BufRead *.mch,*.ref,*.imp		setf b
191
192" BASIC or Visual Basic
193au BufNewFile,BufRead *.bas			call dist#ft#FTVB("basic")
194
195" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
196au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl	setf vb
197
198" IBasic file (similar to QBasic)
199au BufNewFile,BufRead *.iba,*.ibi		setf ibasic
200
201" FreeBasic file (similar to QBasic)
202au BufNewFile,BufRead *.fb,*.bi			setf freebasic
203
204" Batch file for MSDOS.
205au BufNewFile,BufRead *.bat,*.sys		setf dosbatch
206" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd.
207au BufNewFile,BufRead *.cmd
208	\ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif
209
210" Batch file for 4DOS
211au BufNewFile,BufRead *.btm			call dist#ft#FTbtm()
212
213" BC calculator
214au BufNewFile,BufRead *.bc			setf bc
215
216" BDF font
217au BufNewFile,BufRead *.bdf			setf bdf
218
219" BibTeX bibliography database file
220au BufNewFile,BufRead *.bib			setf bib
221
222" BibTeX Bibliography Style
223au BufNewFile,BufRead *.bst			setf bst
224
225" BIND configuration
226" sudoedit uses namedXXXX.conf
227au BufNewFile,BufRead named*.conf,rndc*.conf,rndc*.key	setf named
228
229" BIND zone
230au BufNewFile,BufRead named.root		setf bindzone
231au BufNewFile,BufRead *.db			call dist#ft#BindzoneCheck('')
232
233" Blank
234au BufNewFile,BufRead *.bl			setf blank
235
236" Blkid cache file
237au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old   setf xml
238
239" BSDL
240au BufNewFile,BufRead *bsd,*.bsdl		setf bsdl
241
242" Bazel (http://bazel.io)
243autocmd BufRead,BufNewFile *.bzl,*.bazel,WORKSPACE	setf bzl
244if has("fname_case")
245  " There is another check for BUILD further below.
246  autocmd BufRead,BufNewFile *.BUILD,BUILD		setf bzl
247endif
248
249" C or lpc
250au BufNewFile,BufRead *.c			call dist#ft#FTlpc()
251au BufNewFile,BufRead *.lpc,*.ulpc		setf lpc
252
253" Calendar
254au BufNewFile,BufRead calendar			setf calendar
255
256" C#
257au BufNewFile,BufRead *.cs			setf cs
258
259" CSDL
260au BufNewFile,BufRead *.csdl			setf csdl
261
262" Cabal
263au BufNewFile,BufRead *.cabal			setf cabal
264
265" Cdrdao TOC
266au BufNewFile,BufRead *.toc			setf cdrtoc
267
268" Cdrdao config
269au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao	setf cdrdaoconf
270
271" Cfengine
272au BufNewFile,BufRead cfengine.conf		setf cfengine
273
274" ChaiScript
275au BufRead,BufNewFile *.chai			setf chaiscript
276
277" Comshare Dimension Definition Language
278au BufNewFile,BufRead *.cdl			setf cdl
279
280" Conary Recipe
281au BufNewFile,BufRead *.recipe			setf conaryrecipe
282
283" Controllable Regex Mutilator
284au BufNewFile,BufRead *.crm			setf crm
285
286" Cyn++
287au BufNewFile,BufRead *.cyn			setf cynpp
288
289" Cynlib
290" .cc and .cpp files can be C++ or Cynlib.
291au BufNewFile,BufRead *.cc
292	\ if exists("cynlib_syntax_for_cc")|setf cynlib|else|setf cpp|endif
293au BufNewFile,BufRead *.cpp
294	\ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif
295
296" C++
297au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp
298if has("fname_case")
299  au BufNewFile,BufRead *.C,*.H setf cpp
300endif
301
302" .h files can be C, Ch C++, ObjC or ObjC++.
303" Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is
304" detected automatically.
305au BufNewFile,BufRead *.h			call dist#ft#FTheader()
306
307" Ch (CHscript)
308au BufNewFile,BufRead *.chf			setf ch
309
310" TLH files are C++ headers generated by Visual C++'s #import from typelibs
311au BufNewFile,BufRead *.tlh			setf cpp
312
313" Cascading Style Sheets
314au BufNewFile,BufRead *.css			setf css
315
316" Century Term Command Scripts (*.cmd too)
317au BufNewFile,BufRead *.con			setf cterm
318
319" Changelog
320au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch,*/debian/changelog
321					\	setf debchangelog
322
323au BufNewFile,BufRead [cC]hange[lL]og
324	\  if getline(1) =~ '; urgency='
325	\|   setf debchangelog
326	\| else
327	\|   setf changelog
328	\| endif
329
330au BufNewFile,BufRead NEWS
331	\  if getline(1) =~ '; urgency='
332	\|   setf debchangelog
333	\| endif
334
335" CHILL
336au BufNewFile,BufRead *..ch			setf chill
337
338" Changes for WEB and CWEB or CHILL
339au BufNewFile,BufRead *.ch			call dist#ft#FTchange()
340
341" ChordPro
342au BufNewFile,BufRead *.chopro,*.crd,*.cho,*.crdpro,*.chordpro	setf chordpro
343
344" Clean
345au BufNewFile,BufRead *.dcl,*.icl		setf clean
346
347" Clever
348au BufNewFile,BufRead *.eni			setf cl
349
350" Clever or dtd
351au BufNewFile,BufRead *.ent			call dist#ft#FTent()
352
353" Clipper (or FoxPro; could also be eviews)
354au BufNewFile,BufRead *.prg
355	\ if exists("g:filetype_prg") |
356	\   exe "setf " . g:filetype_prg |
357	\ else |
358	\   setf clipper |
359	\ endif
360
361" Clojure
362au BufNewFile,BufRead *.clj,*.cljs,*.cljx,*.cljc		setf clojure
363
364" Cmake
365au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in		setf cmake
366
367" Cmusrc
368au BufNewFile,BufRead */.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
369au BufNewFile,BufRead */cmus/{rc,*.theme}			setf cmusrc
370
371" Cobol
372au BufNewFile,BufRead *.cbl,*.cob,*.lib	setf cobol
373"   cobol or zope form controller python script? (heuristic)
374au BufNewFile,BufRead *.cpy
375	\ if getline(1) =~ '^##' |
376	\   setf python |
377	\ else |
378	\   setf cobol |
379	\ endif
380
381" Coco/R
382au BufNewFile,BufRead *.atg			setf coco
383
384" Cold Fusion
385au BufNewFile,BufRead *.cfm,*.cfi,*.cfc		setf cf
386
387" Configure scripts
388au BufNewFile,BufRead configure.in,configure.ac setf config
389
390" CUDA  Cumpute Unified Device Architecture
391au BufNewFile,BufRead *.cu,*.cuh		setf cuda
392
393" Dockerfile; Podman uses the same syntax with name Containerfile
394au BufNewFile,BufRead Containerfile,Dockerfile,*.Dockerfile	setf dockerfile
395
396" WildPackets EtherPeek Decoder
397au BufNewFile,BufRead *.dcd			setf dcd
398
399" Enlightenment configuration files
400au BufNewFile,BufRead *enlightenment/*.cfg	setf c
401
402" Eterm
403au BufNewFile,BufRead *Eterm/*.cfg		setf eterm
404
405" Euphoria 3 or 4
406au BufNewFile,BufRead *.eu,*.ew,*.ex,*.exu,*.exw  call dist#ft#EuphoriaCheck()
407if has("fname_case")
408   au BufNewFile,BufRead *.EU,*.EW,*.EX,*.EXU,*.EXW  call dist#ft#EuphoriaCheck()
409endif
410
411" Lynx config files
412au BufNewFile,BufRead lynx.cfg			setf lynx
413
414" Quake
415au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg	setf quake
416au BufNewFile,BufRead *quake[1-3]/*.cfg			setf quake
417
418" Quake C
419au BufNewFile,BufRead *.qc			setf c
420
421" Configure files
422au BufNewFile,BufRead *.cfg			setf cfg
423
424" Cucumber
425au BufNewFile,BufRead *.feature			setf cucumber
426
427" Communicating Sequential Processes
428au BufNewFile,BufRead *.csp,*.fdr		setf csp
429
430" CUPL logic description and simulation
431au BufNewFile,BufRead *.pld			setf cupl
432au BufNewFile,BufRead *.si			setf cuplsim
433
434" Dart
435au BufRead,BufNewfile *.dart,*.drt		setf dart
436
437" Debian Control
438au BufNewFile,BufRead */debian/control		setf debcontrol
439au BufNewFile,BufRead control
440	\  if getline(1) =~ '^Source:'
441	\|   setf debcontrol
442	\| endif
443
444" Debian Copyright
445au BufNewFile,BufRead */debian/copyright	setf debcopyright
446au BufNewFile,BufRead copyright
447	\  if getline(1) =~ '^Format:'
448	\|   setf debcopyright
449	\| endif
450
451" Debian Sources.list
452au BufNewFile,BufRead */etc/apt/sources.list		setf debsources
453au BufNewFile,BufRead */etc/apt/sources.list.d/*.list	setf debsources
454
455" Deny hosts
456au BufNewFile,BufRead denyhosts.conf		setf denyhosts
457
458" dnsmasq(8) configuration files
459au BufNewFile,BufRead */etc/dnsmasq.conf	setf dnsmasq
460
461" ROCKLinux package description
462au BufNewFile,BufRead *.desc			setf desc
463
464" the D language or dtrace
465au BufNewFile,BufRead *.d			call dist#ft#DtraceCheck()
466
467" Desktop files
468au BufNewFile,BufRead *.desktop,*.directory	setf desktop
469
470" Dict config
471au BufNewFile,BufRead dict.conf,.dictrc		setf dictconf
472
473" Dictd config
474au BufNewFile,BufRead dictd.conf		setf dictdconf
475
476" Diff files
477au BufNewFile,BufRead *.diff,*.rej		setf diff
478au BufNewFile,BufRead *.patch
479	\ if getline(1) =~ '^From [0-9a-f]\{40\} Mon Sep 17 00:00:00 2001$' |
480	\   setf gitsendemail |
481	\ else |
482	\   setf diff |
483	\ endif
484
485" Dircolors
486au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS	setf dircolors
487
488" Diva (with Skill) or InstallShield
489au BufNewFile,BufRead *.rul
490	\ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield' |
491	\   setf ishd |
492	\ else |
493	\   setf diva |
494	\ endif
495
496" DCL (Digital Command Language - vms) or DNS zone file
497au BufNewFile,BufRead *.com			call dist#ft#BindzoneCheck('dcl')
498
499" DOT
500au BufNewFile,BufRead *.dot,*.gv		setf dot
501
502" Dylan - lid files
503au BufNewFile,BufRead *.lid			setf dylanlid
504
505" Dylan - intr files (melange)
506au BufNewFile,BufRead *.intr			setf dylanintr
507
508" Dylan
509au BufNewFile,BufRead *.dylan			setf dylan
510
511" Microsoft Module Definition
512au BufNewFile,BufRead *.def			setf def
513
514" Dracula
515au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe	setf dracula
516
517" Datascript
518au BufNewFile,BufRead *.ds			setf datascript
519
520" dsl
521au BufNewFile,BufRead *.dsl			setf dsl
522
523" DTD (Document Type Definition for XML)
524au BufNewFile,BufRead *.dtd			setf dtd
525
526" DTS/DSTI (device tree files)
527au BufNewFile,BufRead *.dts,*.dtsi		setf dts
528
529" EDIF (*.edf,*.edif,*.edn,*.edo) or edn
530au BufNewFile,BufRead *.ed\(f\|if\|o\)		setf edif
531au BufNewFile,BufRead *.edn
532	\ if getline(1) =~ '^\s*(\s*edif\>' |
533	\   setf edif |
534	\ else |
535	\   setf clojure |
536	\ endif
537
538" EditorConfig (close enough to dosini)
539au BufNewFile,BufRead .editorconfig		setf dosini
540
541" Embedix Component Description
542au BufNewFile,BufRead *.ecd			setf ecd
543
544" Eiffel or Specman or Euphoria
545au BufNewFile,BufRead *.e,*.E			call dist#ft#FTe()
546
547" Elinks configuration
548au BufNewFile,BufRead elinks.conf		setf elinks
549
550" ERicsson LANGuage; Yaws is erlang too
551au BufNewFile,BufRead *.erl,*.hrl,*.yaws	setf erlang
552
553" Elm
554au BufNewFile,BufRead *.elm			setf elm
555
556" Elm Filter Rules file
557au BufNewFile,BufRead filter-rules		setf elmfilt
558
559" ESMTP rc file
560au BufNewFile,BufRead *esmtprc			setf esmtprc
561
562" ESQL-C
563au BufNewFile,BufRead *.ec,*.EC			setf esqlc
564
565" Esterel
566au BufNewFile,BufRead *.strl			setf esterel
567
568" Essbase script
569au BufNewFile,BufRead *.csc			setf csc
570
571" Exim
572au BufNewFile,BufRead exim.conf			setf exim
573
574" Expect
575au BufNewFile,BufRead *.exp			setf expect
576
577" Exports
578au BufNewFile,BufRead exports			setf exports
579
580" Falcon
581au BufNewFile,BufRead *.fal			setf falcon
582
583" Fantom
584au BufNewFile,BufRead *.fan,*.fwt		setf fan
585
586" Factor
587au BufNewFile,BufRead *.factor			setf factor
588
589" Fetchmail RC file
590au BufNewFile,BufRead .fetchmailrc		setf fetchmail
591
592" FlexWiki - disabled, because it has side effects when a .wiki file
593" is not actually FlexWiki
594"au BufNewFile,BufRead *.wiki			setf flexwiki
595
596" Focus Executable
597au BufNewFile,BufRead *.fex,*.focexec		setf focexec
598
599" Focus Master file (but not for auto.master)
600au BufNewFile,BufRead auto.master		setf conf
601au BufNewFile,BufRead *.mas,*.master		setf master
602
603" Forth
604au BufNewFile,BufRead *.fs,*.ft,*.fth		setf forth
605
606" Reva Forth
607au BufNewFile,BufRead *.frt			setf reva
608
609" Fortran
610if has("fname_case")
611  au BufNewFile,BufRead *.F,*.FOR,*.FPP,*.FTN,*.F77,*.F90,*.F95,*.F03,*.F08	 setf fortran
612endif
613au BufNewFile,BufRead   *.f,*.for,*.fortran,*.fpp,*.ftn,*.f77,*.f90,*.f95,*.f03,*.f08  setf fortran
614
615" Framescript
616au BufNewFile,BufRead *.fsl			setf framescript
617
618" FStab
619au BufNewFile,BufRead fstab,mtab		setf fstab
620
621" GDB command files
622au BufNewFile,BufRead .gdbinit			setf gdb
623
624" GDMO
625au BufNewFile,BufRead *.mo,*.gdmo		setf gdmo
626
627" Gedcom
628au BufNewFile,BufRead *.ged,lltxxxxx.txt	setf gedcom
629
630" Git
631au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG	setf gitcommit
632au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig	setf gitconfig
633au BufNewFile,BufRead */.config/git/config			setf gitconfig
634au BufNewFile,BufRead .gitmodules,*.git/modules/*/config	setf gitconfig
635if !empty($XDG_CONFIG_HOME)
636  au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config		setf gitconfig
637endif
638au BufNewFile,BufRead git-rebase-todo		setf gitrebase
639au BufRead,BufNewFile .gitsendemail.msg.??????	setf gitsendemail
640au BufNewFile,BufRead .msg.[0-9]*
641      \ if getline(1) =~ '^From.*# This line is ignored.$' |
642      \   setf gitsendemail |
643      \ endif
644au BufNewFile,BufRead *.git/*
645      \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
646      \   setf git |
647      \ endif
648
649" Gkrellmrc
650au BufNewFile,BufRead gkrellmrc,gkrellmrc_?	setf gkrellmrc
651
652" GP scripts (2.0 and onward)
653au BufNewFile,BufRead *.gp,.gprc		setf gp
654
655" GPG
656au BufNewFile,BufRead */.gnupg/options		setf gpg
657au BufNewFile,BufRead */.gnupg/gpg.conf		setf gpg
658au BufNewFile,BufRead */usr/*/gnupg/options.skel setf gpg
659if !empty($GNUPGHOME)
660  au BufNewFile,BufRead $GNUPGHOME/options	setf gpg
661  au BufNewFile,BufRead $GNUPGHOME/gpg.conf	setf gpg
662endif
663
664" gnash(1) configuration files
665au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash
666
667" Gitolite
668au BufNewFile,BufRead gitolite.conf		setf gitolite
669au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc	setf perl
670
671" Gnuplot scripts
672au BufNewFile,BufRead *.gpi			setf gnuplot
673
674" Go (Google)
675au BufNewFile,BufRead *.go			setf go
676
677" GrADS scripts
678au BufNewFile,BufRead *.gs			setf grads
679
680" Gretl
681au BufNewFile,BufRead *.gretl			setf gretl
682
683" Groovy
684au BufNewFile,BufRead *.gradle,*.groovy		setf groovy
685
686" GNU Server Pages
687au BufNewFile,BufRead *.gsp			setf gsp
688
689" Group file
690au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/etc/gshadow-,*/etc/gshadow.edit,*/var/backups/group.bak,*/var/backups/gshadow.bak  setf group
691
692" GTK RC
693au BufNewFile,BufRead .gtkrc,gtkrc		setf gtkrc
694
695" Haml
696au BufNewFile,BufRead *.haml			setf haml
697
698" Hamster Classic | Playground files
699au BufNewFile,BufRead *.hsm	  		setf hamster
700
701" Haskell
702au BufNewFile,BufRead *.hs,*.hsc,*.hs-boot	setf haskell
703au BufNewFile,BufRead *.lhs			setf lhaskell
704au BufNewFile,BufRead *.chs			setf chaskell
705au BufNewFile,BufRead cabal.project		setf cabalproject
706au BufNewFile,BufRead $HOME/.cabal/config	setf cabalconfig
707au BufNewFile,BufRead cabal.config		setf cabalconfig
708
709" Haste
710au BufNewFile,BufRead *.ht			setf haste
711au BufNewFile,BufRead *.htpp			setf hastepreproc
712
713" Hercules
714au BufNewFile,BufRead *.vc,*.ev,*.sum,*.errsum	setf hercules
715
716" HEX (Intel)
717au BufNewFile,BufRead *.hex,*.h32		setf hex
718
719" Hollywood
720au BufRead,BufNewFile *.hws			setf hollywood
721
722" Tilde (must be before HTML)
723au BufNewFile,BufRead *.t.html			setf tilde
724
725" HTML (.shtml and .stm for server side)
726au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm  call dist#ft#FThtml()
727
728" HTML with Ruby - eRuby
729au BufNewFile,BufRead *.erb,*.rhtml		setf eruby
730
731" HTML with M4
732au BufNewFile,BufRead *.html.m4			setf htmlm4
733
734" Some template.  Used to be HTML Cheetah.
735au BufNewFile,BufRead *.tmpl			setf template
736
737" Host config
738au BufNewFile,BufRead */etc/host.conf		setf hostconf
739
740" Hosts access
741au BufNewFile,BufRead */etc/hosts.allow,*/etc/hosts.deny  setf hostsaccess
742
743" Hyper Builder
744au BufNewFile,BufRead *.hb			setf hb
745
746" Httest
747au BufNewFile,BufRead *.htt,*.htb		setf httest
748
749" Icon
750au BufNewFile,BufRead *.icn			setf icon
751
752" IDL (Interface Description Language)
753au BufNewFile,BufRead *.idl			call dist#ft#FTidl()
754
755" Microsoft IDL (Interface Description Language)  Also *.idl
756" MOF = WMI (Windows Management Instrumentation) Managed Object Format
757au BufNewFile,BufRead *.odl,*.mof		setf msidl
758
759" Icewm menu
760au BufNewFile,BufRead */.icewm/menu		setf icemenu
761
762" Indent profile (must come before IDL *.pro!)
763au BufNewFile,BufRead .indent.pro		setf indent
764au BufNewFile,BufRead indent.pro		call dist#ft#ProtoCheck('indent')
765
766" IDL (Interactive Data Language)
767au BufNewFile,BufRead *.pro			call dist#ft#ProtoCheck('idlang')
768
769" Indent RC
770au BufNewFile,BufRead indentrc			setf indent
771
772" Inform
773au BufNewFile,BufRead *.inf,*.INF		setf inform
774
775" Initng
776au BufNewFile,BufRead */etc/initng/*/*.i,*.ii	setf initng
777
778" Innovation Data Processing
779au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c	setf upstreamdat
780au BufRead,BufNewFile fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c	setf upstreamlog
781au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog
782au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c	setf usserverlog
783au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c	setf usw2kagtlog
784
785" Ipfilter
786au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules	setf ipfilter
787
788" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.)
789au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl	setf fgl
790
791" .INI file for MSDOS
792au BufNewFile,BufRead *.ini			setf dosini
793
794" SysV Inittab
795au BufNewFile,BufRead inittab			setf inittab
796
797" Inno Setup
798au BufNewFile,BufRead *.iss			setf iss
799
800" J
801au BufNewFile,BufRead *.ijs			setf j
802
803" JAL
804au BufNewFile,BufRead *.jal,*.JAL		setf jal
805
806" Jam
807au BufNewFile,BufRead *.jpl,*.jpr		setf jam
808
809" Java
810au BufNewFile,BufRead *.java,*.jav		setf java
811
812" JavaCC
813au BufNewFile,BufRead *.jj,*.jjt		setf javacc
814
815" JavaScript, ECMAScript, ES module script, CommonJS script
816au BufNewFile,BufRead *.js,*.javascript,*.es,*.mjs,*.cjs   setf javascript
817
818" JavaScript with React
819au BufNewFile,BufRead *.jsx			setf javascriptreact
820
821" Java Server Pages
822au BufNewFile,BufRead *.jsp			setf jsp
823
824" Java Properties resource file (note: doesn't catch font.properties.pl)
825au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_??	setf jproperties
826
827" Jess
828au BufNewFile,BufRead *.clp			setf jess
829
830" Jgraph
831au BufNewFile,BufRead *.jgr			setf jgraph
832
833" Jovial
834au BufNewFile,BufRead *.jov,*.j73,*.jovial	setf jovial
835
836" JSON
837au BufNewFile,BufRead *.json,*.jsonp,*.webmanifest	setf json
838
839" Kixtart
840au BufNewFile,BufRead *.kix			setf kix
841
842" Kimwitu[++]
843au BufNewFile,BufRead *.k			setf kwt
844
845" Kivy
846au BufNewFile,BufRead *.kv			setf kivy
847
848" Kotlin
849au BufNewFile,BufRead *.kt,*.ktm,*.kts		setf kotlin
850
851" KDE script
852au BufNewFile,BufRead *.ks			setf kscript
853
854" Kconfig
855au BufNewFile,BufRead Kconfig,Kconfig.debug	setf kconfig
856
857" Lace (ISE)
858au BufNewFile,BufRead *.ace,*.ACE		setf lace
859
860" Latte
861au BufNewFile,BufRead *.latte,*.lte		setf latte
862
863" Limits
864au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf	setf limits
865
866" LambdaProlog (*.mod too, see Modsim)
867au BufNewFile,BufRead *.sig			setf lprolog
868
869" LDAP LDIF
870au BufNewFile,BufRead *.ldif			setf ldif
871
872" Ld loader
873au BufNewFile,BufRead *.ld			setf ld
874
875" Less
876au BufNewFile,BufRead *.less			setf less
877
878" Lex
879au BufNewFile,BufRead *.lex,*.l,*.lxx,*.l++	setf lex
880
881" Libao
882au BufNewFile,BufRead */etc/libao.conf,*/.libao	setf libao
883
884" Libsensors
885au BufNewFile,BufRead */etc/sensors.conf,*/etc/sensors3.conf	setf sensors
886
887" LFTP
888au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc	setf lftp
889
890" Lifelines (or Lex for C++!)
891au BufNewFile,BufRead *.ll			setf lifelines
892
893" Lilo: Linux loader
894au BufNewFile,BufRead lilo.conf			setf lilo
895
896" Lisp (*.el = ELisp, *.cl = Common Lisp)
897" *.jl was removed, it's also used for Julia, better skip than guess wrong.
898if has("fname_case")
899  au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.L,.emacs,.sawfishrc setf lisp
900else
901  au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,.emacs,.sawfishrc setf lisp
902endif
903
904" SBCL implementation of Common Lisp
905au BufNewFile,BufRead sbclrc,.sbclrc		setf lisp
906
907" Liquid
908au BufNewFile,BufRead *.liquid			setf liquid
909
910" Lite
911au BufNewFile,BufRead *.lite,*.lt		setf lite
912
913" LiteStep RC files
914au BufNewFile,BufRead */LiteStep/*/*.rc		setf litestep
915
916" Login access
917au BufNewFile,BufRead */etc/login.access	setf loginaccess
918
919" Login defs
920au BufNewFile,BufRead */etc/login.defs		setf logindefs
921
922" Logtalk
923au BufNewFile,BufRead *.lgt			setf logtalk
924
925" LOTOS
926au BufNewFile,BufRead *.lot,*.lotos		setf lotos
927
928" Lout (also: *.lt)
929au BufNewFile,BufRead *.lou,*.lout		setf lout
930
931" Lua
932au BufNewFile,BufRead *.lua			setf lua
933
934" Luarocks
935au BufNewFile,BufRead *.rockspec		setf lua
936
937" Linden Scripting Language (Second Life)
938au BufNewFile,BufRead *.lsl			setf lsl
939
940" Lynx style file (or LotusScript!)
941au BufNewFile,BufRead *.lss			setf lss
942
943" M4
944au BufNewFile,BufRead *.m4
945	\ if expand("<afile>") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif
946
947" MaGic Point
948au BufNewFile,BufRead *.mgp			setf mgp
949
950" Mail (for Elm, trn, mutt, muttng, rn, slrn, neomutt)
951au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\\\{6\},neomutt-*-\w\+,neomutt[[:alnum:]_-]\\\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
952
953" Mail aliases
954au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases	setf mailaliases
955
956" Mailcap configuration file
957au BufNewFile,BufRead .mailcap,mailcap		setf mailcap
958
959" Makefile
960au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make
961
962" MakeIndex
963au BufNewFile,BufRead *.ist,*.mst		setf ist
964
965" Mallard
966au BufNewFile,BufRead *.page			setf mallard
967
968" Manpage
969au BufNewFile,BufRead *.man			setf man
970
971" Man config
972au BufNewFile,BufRead */etc/man.conf,man.config	setf manconf
973
974" Maple V
975au BufNewFile,BufRead *.mv,*.mpl,*.mws		setf maple
976
977" Map (UMN mapserver config file)
978au BufNewFile,BufRead *.map			setf map
979
980" Markdown
981au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md  setf markdown
982
983" Mason
984au BufNewFile,BufRead *.mason,*.mhtml,*.comp	setf mason
985
986" Mathematica, Matlab, Murphi or Objective C
987au BufNewFile,BufRead *.m			call dist#ft#FTm()
988
989" Mathematica notebook
990au BufNewFile,BufRead *.nb			setf mma
991
992" Maya Extension Language
993au BufNewFile,BufRead *.mel			setf mel
994
995" Mercurial (hg) commit file
996au BufNewFile,BufRead hg-editor-*.txt		setf hgcommit
997
998" Mercurial config (looks like generic config file)
999au BufNewFile,BufRead *.hgrc,*hgrc		setf cfg
1000
1001" Meson Build system config
1002au BufNewFile,BufRead meson.build,meson_options.txt setf meson
1003
1004" Messages (logs mostly)
1005au BufNewFile,BufRead */log/{auth,cron,daemon,debug,kern,lpr,mail,messages,news/news,syslog,user}{,.log,.err,.info,.warn,.crit,.notice}{,.[0-9]*,-[0-9]*} setf messages
1006
1007" Metafont
1008au BufNewFile,BufRead *.mf			setf mf
1009
1010" MetaPost
1011au BufNewFile,BufRead *.mp			setf mp
1012
1013" MGL
1014au BufNewFile,BufRead *.mgl			setf mgl
1015
1016" MIX - Knuth assembly
1017au BufNewFile,BufRead *.mix,*.mixal		setf mix
1018
1019" MMIX or VMS makefile
1020au BufNewFile,BufRead *.mms			call dist#ft#FTmms()
1021
1022" Symbian meta-makefile definition (MMP)
1023au BufNewFile,BufRead *.mmp			setf mmp
1024
1025" Modsim III (or LambdaProlog)
1026au BufNewFile,BufRead *.mod
1027	\ if getline(1) =~ '\<module\>' |
1028	\   setf lprolog |
1029	\ else |
1030	\   setf modsim3 |
1031	\ endif
1032
1033" Modula 2  (.md removed in favor of Markdown)
1034au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.mi	setf modula2
1035
1036" Modula 3 (.m3, .i3, .mg, .ig)
1037au BufNewFile,BufRead *.[mi][3g]		setf modula3
1038
1039" Monk
1040au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc	setf monk
1041
1042" MOO
1043au BufNewFile,BufRead *.moo			setf moo
1044
1045" Modconf
1046au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
1047
1048" Mplayer config
1049au BufNewFile,BufRead mplayer.conf,*/.mplayer/config	setf mplayerconf
1050
1051" Motorola S record
1052au BufNewFile,BufRead *.s19,*.s28,*.s37,*.mot,*.srec	setf srec
1053
1054" Mrxvtrc
1055au BufNewFile,BufRead mrxvtrc,.mrxvtrc		setf mrxvtrc
1056
1057" Msql
1058au BufNewFile,BufRead *.msql			setf msql
1059
1060" Mysql
1061au BufNewFile,BufRead *.mysql			setf mysql
1062
1063" Mutt setup files (must be before catch *.rc)
1064au BufNewFile,BufRead */etc/Muttrc.d/*		call s:StarSetf('muttrc')
1065
1066" M$ Resource files
1067au BufNewFile,BufRead *.rc,*.rch		setf rc
1068
1069" MuPAD source
1070au BufRead,BufNewFile *.mu			setf mupad
1071
1072" Mush
1073au BufNewFile,BufRead *.mush			setf mush
1074
1075" Mutt setup file (also for Muttng)
1076au BufNewFile,BufRead Mutt{ng,}rc		setf muttrc
1077
1078" N1QL
1079au BufRead,BufNewfile *.n1ql,*.nql		setf n1ql
1080
1081" Nano
1082au BufNewFile,BufRead */etc/nanorc,*.nanorc	setf nanorc
1083
1084" Nastran input/DMAP
1085"au BufNewFile,BufRead *.dat			setf nastran
1086
1087" Natural
1088au BufNewFile,BufRead *.NS[ACGLMNPS]		setf natural
1089
1090" Noemutt setup file
1091au BufNewFile,BufRead Neomuttrc			setf neomuttrc
1092
1093" Netrc
1094au BufNewFile,BufRead .netrc			setf netrc
1095
1096" Ninja file
1097au BufNewFile,BufRead *.ninja			setf ninja
1098
1099" NPM RC file
1100au BufNewFile,BufRead npmrc,.npmrc		setf dosini
1101
1102" Novell netware batch files
1103au BufNewFile,BufRead *.ncf			setf ncf
1104
1105" Nroff/Troff (*.ms and *.t are checked below)
1106au BufNewFile,BufRead *.me
1107	\ if expand("<afile>") != "read.me" && expand("<afile>") != "click.me" |
1108	\   setf nroff |
1109	\ endif
1110au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom	setf nroff
1111au BufNewFile,BufRead *.[1-9]			call dist#ft#FTnroff()
1112
1113" Nroff or Objective C++
1114au BufNewFile,BufRead *.mm			call dist#ft#FTmm()
1115
1116" Not Quite C
1117au BufNewFile,BufRead *.nqc			setf nqc
1118
1119" NSE - Nmap Script Engine - uses Lua syntax
1120au BufNewFile,BufRead *.nse			setf lua
1121
1122" NSIS
1123au BufNewFile,BufRead *.nsi,*.nsh		setf nsis
1124
1125" OCAML
1126au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit	setf ocaml
1127
1128" Occam
1129au BufNewFile,BufRead *.occ			setf occam
1130
1131" Omnimark
1132au BufNewFile,BufRead *.xom,*.xin		setf omnimark
1133
1134" OpenROAD
1135au BufNewFile,BufRead *.or			setf openroad
1136
1137" OPL
1138au BufNewFile,BufRead *.[Oo][Pp][Ll]		setf opl
1139
1140" Oracle config file
1141au BufNewFile,BufRead *.ora			setf ora
1142
1143" Packet filter conf
1144au BufNewFile,BufRead pf.conf			setf pf
1145
1146" Pacman Config (close enough to dosini)
1147au BufNewFile,BufRead */etc/pacman.conf		setf dosini
1148
1149" Pacman hooks
1150au BufNewFile,BufRead *.hook
1151	\ if getline(1) == '[Trigger]' |
1152	\   setf dosini |
1153	\ endif
1154
1155" Pam conf
1156au BufNewFile,BufRead */etc/pam.conf			setf pamconf
1157
1158" Pam environment
1159au BufNewFile,BufRead pam_env.conf,.pam_environment	setf pamenv
1160
1161" PApp
1162au BufNewFile,BufRead *.papp,*.pxml,*.pxsl	setf papp
1163
1164" Password file
1165au BufNewFile,BufRead */etc/passwd,*/etc/passwd-,*/etc/passwd.edit,*/etc/shadow,*/etc/shadow-,*/etc/shadow.edit,*/var/backups/passwd.bak,*/var/backups/shadow.bak setf passwd
1166
1167" Pascal (also *.p)
1168au BufNewFile,BufRead *.pas,*.pp		setf pascal
1169
1170" Delphi or Lazarus program file
1171au BufNewFile,BufRead *.dpr,*.lpr		setf pascal
1172
1173" PDF
1174au BufNewFile,BufRead *.pdf			setf pdf
1175
1176" PCMK - HAE - crm configure edit
1177au BufNewFile,BufRead *.pcmk			setf pcmk
1178
1179" Perl
1180if has("fname_case")
1181  au BufNewFile,BufRead *.pl,*.PL		call dist#ft#FTpl()
1182else
1183  au BufNewFile,BufRead *.pl			call dist#ft#FTpl()
1184endif
1185au BufNewFile,BufRead *.plx,*.al,*.psgi		setf perl
1186au BufNewFile,BufRead *.p6,*.pm6,*.pl6		setf perl6
1187au BufNewFile,BufRead *.raku,*.rakumod		setf perl6
1188
1189" Perl, XPM or XPM2
1190au BufNewFile,BufRead *.pm
1191	\ if getline(1) =~ "XPM2" |
1192	\   setf xpm2 |
1193	\ elseif getline(1) =~ "XPM" |
1194	\   setf xpm |
1195	\ else |
1196	\   setf perl |
1197	\ endif
1198
1199" Perl POD
1200au BufNewFile,BufRead *.pod			setf pod
1201au BufNewFile,BufRead *.pod6			setf pod6
1202
1203" Php, php3, php4, etc.
1204" Also Phtml (was used for PHP 2 in the past)
1205" Also .ctp for Cake template file
1206au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp	setf php
1207
1208" PHP config
1209au BufNewFile,BufRead php.ini-*			setf dosini
1210
1211" Pike and Cmod
1212au BufNewFile,BufRead *.pike,*.pmod		setf pike
1213au BufNewFile,BufRead *.cmod			setf cmod
1214
1215" Pinfo config
1216au BufNewFile,BufRead */etc/pinforc,*/.pinforc	setf pinfo
1217
1218" Palm Resource compiler
1219au BufNewFile,BufRead *.rcp			setf pilrc
1220
1221" Pine config
1222au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex		setf pine
1223
1224" Pipenv Pipfiles
1225au BufNewFile,BufRead Pipfile			setf config
1226au BufNewFile,BufRead Pipfile.lock		setf json
1227
1228" PL/1, PL/I
1229au BufNewFile,BufRead *.pli,*.pl1		setf pli
1230
1231" PL/M (also: *.inp)
1232au BufNewFile,BufRead *.plm,*.p36,*.pac		setf plm
1233
1234" PL/SQL
1235au BufNewFile,BufRead *.pls,*.plsql		setf plsql
1236
1237" PLP
1238au BufNewFile,BufRead *.plp			setf plp
1239
1240" PO and PO template (GNU gettext)
1241au BufNewFile,BufRead *.po,*.pot		setf po
1242
1243" Postfix main config
1244au BufNewFile,BufRead main.cf			setf pfmain
1245
1246" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator)
1247au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai	  setf postscr
1248
1249" PostScript Printer Description
1250au BufNewFile,BufRead *.ppd			setf ppd
1251
1252" Povray
1253au BufNewFile,BufRead *.pov			setf pov
1254
1255" Povray configuration
1256au BufNewFile,BufRead .povrayrc			setf povini
1257
1258" Povray, PHP or assembly
1259au BufNewFile,BufRead *.inc			call dist#ft#FTinc()
1260
1261" Printcap and Termcap
1262au BufNewFile,BufRead *printcap
1263	\ let b:ptcap_type = "print" | setf ptcap
1264au BufNewFile,BufRead *termcap
1265	\ let b:ptcap_type = "term" | setf ptcap
1266
1267" PCCTS / ANTRL
1268"au BufNewFile,BufRead *.g			setf antrl
1269au BufNewFile,BufRead *.g			setf pccts
1270
1271" PPWizard
1272au BufNewFile,BufRead *.it,*.ih			setf ppwiz
1273
1274" Obj 3D file format
1275" TODO: is there a way to avoid MS-Windows Object files?
1276au BufNewFile,BufRead *.obj			setf obj
1277
1278" Oracle Pro*C/C++
1279au BufNewFile,BufRead *.pc			setf proc
1280
1281" Privoxy actions file
1282au BufNewFile,BufRead *.action			setf privoxy
1283
1284" Procmail
1285au BufNewFile,BufRead .procmail,.procmailrc	setf procmail
1286
1287" Progress or CWEB
1288au BufNewFile,BufRead *.w			call dist#ft#FTprogress_cweb()
1289
1290" Progress or assembly
1291au BufNewFile,BufRead *.i			call dist#ft#FTprogress_asm()
1292
1293" Progress or Pascal
1294au BufNewFile,BufRead *.p			call dist#ft#FTprogress_pascal()
1295
1296" Software Distributor Product Specification File (POSIX 1387.2-1995)
1297au BufNewFile,BufRead *.psf			setf psf
1298au BufNewFile,BufRead INDEX,INFO
1299	\ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' |
1300	\   setf psf |
1301	\ endif
1302
1303" Prolog
1304au BufNewFile,BufRead *.pdb			setf prolog
1305
1306" Promela
1307au BufNewFile,BufRead *.pml			setf promela
1308
1309" Google protocol buffers
1310au BufNewFile,BufRead *.proto			setf proto
1311au BufNewFile,BufRead *.pbtxt			setf pbtxt
1312
1313" Protocols
1314au BufNewFile,BufRead */etc/protocols		setf protocols
1315
1316" Pyrex
1317au BufNewFile,BufRead *.pyx,*.pxd		setf pyrex
1318
1319" Python, Python Shell Startup and Python Stub Files
1320" Quixote (Python-based web framework)
1321au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc  setf python
1322au BufNewFile,BufRead *.ptl,*.pyi,SConstruct		   setf python
1323
1324" Radiance
1325au BufNewFile,BufRead *.rad,*.mat		setf radiance
1326
1327" Ratpoison config/command files
1328au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc	setf ratpoison
1329
1330" RCS file
1331au BufNewFile,BufRead *\,v			setf rcs
1332
1333" Readline
1334au BufNewFile,BufRead .inputrc,inputrc		setf readline
1335
1336" Registry for MS-Windows
1337au BufNewFile,BufRead *.reg
1338	\ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif
1339
1340" Renderman Interface Bytestream
1341au BufNewFile,BufRead *.rib			setf rib
1342
1343" Rego Policy Language
1344au BufNewFile,BufRead *.rego			setf rego
1345
1346" Rexx
1347au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit	setf rexx
1348
1349" R Help file
1350if has("fname_case")
1351  au BufNewFile,BufRead *.rd,*.Rd		setf rhelp
1352else
1353  au BufNewFile,BufRead *.rd			setf rhelp
1354endif
1355
1356" R noweb file
1357if has("fname_case")
1358  au BufNewFile,BufRead *.Rnw,*.rnw,*.Snw,*.snw		setf rnoweb
1359else
1360  au BufNewFile,BufRead *.rnw,*.snw			setf rnoweb
1361endif
1362
1363" R Markdown file
1364if has("fname_case")
1365  au BufNewFile,BufRead *.Rmd,*.rmd,*.Smd,*.smd		setf rmd
1366else
1367  au BufNewFile,BufRead *.rmd,*.smd			setf rmd
1368endif
1369
1370" R reStructuredText file
1371if has("fname_case")
1372  au BufNewFile,BufRead *.Rrst,*.rrst,*.Srst,*.srst	setf rrst
1373else
1374  au BufNewFile,BufRead *.rrst,*.srst			setf rrst
1375endif
1376
1377" Rexx, Rebol or R
1378au BufNewFile,BufRead *.r,*.R				call dist#ft#FTr()
1379
1380" Remind
1381au BufNewFile,BufRead .reminders,*.remind,*.rem		setf remind
1382
1383" Resolv.conf
1384au BufNewFile,BufRead resolv.conf		setf resolv
1385
1386" Relax NG Compact
1387au BufNewFile,BufRead *.rnc			setf rnc
1388
1389" Relax NG XML
1390au BufNewFile,BufRead *.rng			setf rng
1391
1392" RPL/2
1393au BufNewFile,BufRead *.rpl			setf rpl
1394
1395" Robots.txt
1396au BufNewFile,BufRead robots.txt		setf robots
1397
1398" Rpcgen
1399au BufNewFile,BufRead *.x			setf rpcgen
1400
1401" reStructuredText Documentation Format
1402au BufNewFile,BufRead *.rst			setf rst
1403
1404" RTF
1405au BufNewFile,BufRead *.rtf			setf rtf
1406
1407" Interactive Ruby shell
1408au BufNewFile,BufRead .irbrc,irbrc		setf ruby
1409
1410" Ruby
1411au BufNewFile,BufRead *.rb,*.rbw		setf ruby
1412
1413" RubyGems
1414au BufNewFile,BufRead *.gemspec			setf ruby
1415
1416" Rust
1417au BufNewFile,BufRead *.rs			setf rust
1418
1419" Rackup
1420au BufNewFile,BufRead *.ru			setf ruby
1421
1422" Bundler
1423au BufNewFile,BufRead Gemfile			setf ruby
1424
1425" Ruby on Rails
1426au BufNewFile,BufRead *.builder,*.rxml,*.rjs	setf ruby
1427
1428" Rantfile and Rakefile is like Ruby
1429au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake	setf ruby
1430
1431" S-lang (or shader language, or SmallLisp)
1432au BufNewFile,BufRead *.sl			setf slang
1433
1434" Samba config
1435au BufNewFile,BufRead smb.conf			setf samba
1436
1437" SAS script
1438au BufNewFile,BufRead *.sas			setf sas
1439
1440" Sass
1441au BufNewFile,BufRead *.sass			setf sass
1442
1443" Sather
1444au BufNewFile,BufRead *.sa			setf sather
1445
1446" Scala
1447au BufNewFile,BufRead *.scala			setf scala
1448
1449" SBT - Scala Build Tool
1450au BufNewFile,BufRead *.sbt			setf sbt
1451
1452" Scilab
1453au BufNewFile,BufRead *.sci,*.sce		setf scilab
1454
1455" SCSS
1456au BufNewFile,BufRead *.scss			setf scss
1457
1458" SD: Streaming Descriptors
1459au BufNewFile,BufRead *.sd			setf sd
1460
1461" SDL
1462au BufNewFile,BufRead *.sdl,*.pr		setf sdl
1463
1464" sed
1465au BufNewFile,BufRead *.sed			setf sed
1466
1467" Sieve (RFC 3028, 5228)
1468au BufNewFile,BufRead *.siv,*.sieve		setf sieve
1469
1470" Sendmail
1471au BufNewFile,BufRead sendmail.cf		setf sm
1472
1473" Sendmail .mc files are actually m4.  Could also be MS Message text file.
1474au BufNewFile,BufRead *.mc			call dist#ft#McSetf()
1475
1476" Services
1477au BufNewFile,BufRead */etc/services		setf services
1478
1479" Service Location config
1480au BufNewFile,BufRead */etc/slp.conf		setf slpconf
1481
1482" Service Location registration
1483au BufNewFile,BufRead */etc/slp.reg		setf slpreg
1484
1485" Service Location SPI
1486au BufNewFile,BufRead */etc/slp.spi		setf slpspi
1487
1488" Setserial config
1489au BufNewFile,BufRead */etc/serial.conf		setf setserial
1490
1491" SGML
1492au BufNewFile,BufRead *.sgm,*.sgml
1493	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' |
1494	\   setf sgmllnx |
1495	\ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
1496	\   let b:docbk_type = "sgml" |
1497	\   let b:docbk_ver = 4 |
1498	\   setf docbk |
1499	\ else |
1500	\   setf sgml |
1501	\ endif
1502
1503" SGMLDECL
1504au BufNewFile,BufRead *.decl,*.dcl,*.dec
1505	\ if getline(1).getline(2).getline(3) =~? '^<!SGML' |
1506	\    setf sgmldecl |
1507	\ endif
1508
1509" SGML catalog file
1510au BufNewFile,BufRead catalog			setf catalog
1511
1512" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
1513" Gentoo ebuilds, Arch Linux PKGBUILDs and Alpine Linux APKBUILDs are actually
1514" bash scripts.
1515" NOTE: Patterns ending in a star are further down, these have lower priority.
1516au BufNewFile,BufRead .bashrc,bashrc,bash.bashrc,.bash[_-]profile,.bash[_-]logout,.bash[_-]aliases,bash-fc[-.],*.bash,*/{,.}bash[_-]completion{,.d,.sh}{,/*},*.ebuild,*.eclass,PKGBUILD,APKBUILD call dist#ft#SetFileTypeSH("bash")
1517au BufNewFile,BufRead .kshrc,*.ksh call dist#ft#SetFileTypeSH("ksh")
1518au BufNewFile,BufRead */etc/profile,.profile,*.sh,*.env call dist#ft#SetFileTypeSH(getline(1))
1519
1520
1521" Shell script (Arch Linux) or PHP file (Drupal)
1522au BufNewFile,BufRead *.install
1523	\ if getline(1) =~ '<?php' |
1524	\   setf php |
1525	\ else |
1526	\   call dist#ft#SetFileTypeSH("bash") |
1527	\ endif
1528
1529" tcsh scripts (patterns ending in a star further below)
1530au BufNewFile,BufRead .tcshrc,*.tcsh,tcsh.tcshrc,tcsh.login	call dist#ft#SetFileTypeShell("tcsh")
1531
1532" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh)
1533" (patterns ending in a start further below)
1534au BufNewFile,BufRead .login,.cshrc,csh.cshrc,csh.login,csh.logout,*.csh,.alias  call dist#ft#CSH()
1535
1536" Z-Shell script (patterns ending in a star further below)
1537au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks  setf zsh
1538au BufNewFile,BufRead .zshrc,.zshenv,.zlogin,.zlogout,.zcompdump setf zsh
1539au BufNewFile,BufRead *.zsh			setf zsh
1540
1541" Scheme
1542au BufNewFile,BufRead *.scm,*.ss,*.rkt		setf scheme
1543
1544" Screen RC
1545au BufNewFile,BufRead .screenrc,screenrc	setf screen
1546
1547" Simula
1548au BufNewFile,BufRead *.sim			setf simula
1549
1550" SINDA
1551au BufNewFile,BufRead *.sin,*.s85		setf sinda
1552
1553" SiSU
1554au BufNewFile,BufRead *.sst,*.ssm,*.ssi,*.-sst,*._sst setf sisu
1555au BufNewFile,BufRead *.sst.meta,*.-sst.meta,*._sst.meta setf sisu
1556
1557" SKILL
1558au BufNewFile,BufRead *.il,*.ils,*.cdf		setf skill
1559
1560" SLRN
1561au BufNewFile,BufRead .slrnrc			setf slrnrc
1562au BufNewFile,BufRead *.score			setf slrnsc
1563
1564" Smalltalk (and TeX)
1565au BufNewFile,BufRead *.st			setf st
1566au BufNewFile,BufRead *.cls
1567	\ if getline(1) =~ '^%' |
1568	\  setf tex |
1569	\ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' |
1570	\  setf rexx |
1571	\ else |
1572	\  setf st |
1573	\ endif
1574
1575" Smarty templates
1576au BufNewFile,BufRead *.tpl			setf smarty
1577
1578" SMIL or XML
1579au BufNewFile,BufRead *.smil
1580	\ if getline(1) =~ '<?\s*xml.*?>' |
1581	\   setf xml |
1582	\ else |
1583	\   setf smil |
1584	\ endif
1585
1586" SMIL or SNMP MIB file
1587au BufNewFile,BufRead *.smi
1588	\ if getline(1) =~ '\<smil\>' |
1589	\   setf smil |
1590	\ else |
1591	\   setf mib |
1592	\ endif
1593
1594" SMITH
1595au BufNewFile,BufRead *.smt,*.smith		setf smith
1596
1597" Snobol4 and spitbol
1598au BufNewFile,BufRead *.sno,*.spt		setf snobol4
1599
1600" SNMP MIB files
1601au BufNewFile,BufRead *.mib,*.my		setf mib
1602
1603" Snort Configuration
1604au BufNewFile,BufRead *.hog,snort.conf,vision.conf	setf hog
1605au BufNewFile,BufRead *.rules			call dist#ft#FTRules()
1606
1607" Spec (Linux RPM)
1608au BufNewFile,BufRead *.spec			setf spec
1609
1610" Speedup (AspenTech plant simulator)
1611au BufNewFile,BufRead *.speedup,*.spdata,*.spd	setf spup
1612
1613" Slice
1614au BufNewFile,BufRead *.ice			setf slice
1615
1616" Spice
1617au BufNewFile,BufRead *.sp,*.spice		setf spice
1618
1619" Spyce
1620au BufNewFile,BufRead *.spy,*.spi		setf spyce
1621
1622" Squid
1623au BufNewFile,BufRead squid.conf		setf squid
1624
1625" SQL for Oracle Designer
1626au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks	setf sql
1627
1628" SQL
1629au BufNewFile,BufRead *.sql			call dist#ft#SQL()
1630
1631" SQLJ
1632au BufNewFile,BufRead *.sqlj			setf sqlj
1633
1634" SQR
1635au BufNewFile,BufRead *.sqr,*.sqi		setf sqr
1636
1637" OpenSSH configuration
1638au BufNewFile,BufRead ssh_config,*/.ssh/config		setf sshconfig
1639au BufNewFile,BufRead */etc/ssh/ssh_config.d/*.conf	setf sshconfig
1640
1641" OpenSSH server configuration
1642au BufNewFile,BufRead sshd_config			setf sshdconfig
1643au BufNewFile,BufRead */etc/ssh/sshd_config.d/*.conf	setf sshdconfig
1644
1645" Stata
1646au BufNewFile,BufRead *.ado,*.do,*.imata,*.mata	setf stata
1647" Also *.class, but not when it's a Java bytecode file
1648au BufNewFile,BufRead *.class
1649	\ if getline(1) !~ "^\xca\xfe\xba\xbe" | setf stata | endif
1650
1651" SMCL
1652au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl	setf smcl
1653
1654" Stored Procedures
1655au BufNewFile,BufRead *.stp			setf stp
1656
1657" Standard ML
1658au BufNewFile,BufRead *.sml			setf sml
1659
1660" Sratus VOS command macro
1661au BufNewFile,BufRead *.cm			setf voscm
1662
1663" Swift
1664au BufNewFile,BufRead *.swift			setf swift
1665au BufNewFile,BufRead *.swift.gyb		setf swiftgyb
1666
1667" Swift Intermediate Language
1668au BufNewFile,BufRead *.sil			setf sil
1669
1670" Sysctl
1671au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf	setf sysctl
1672
1673" Systemd unit files
1674au BufNewFile,BufRead */systemd/*.{automount,dnssd,link,mount,netdev,network,nspawn,path,service,slice,socket,swap,target,timer}	setf systemd
1675" Systemd overrides
1676au BufNewFile,BufRead */etc/systemd/*.conf.d/*.conf	setf systemd
1677au BufNewFile,BufRead */etc/systemd/system/*.d/*.conf	setf systemd
1678au BufNewFile,BufRead */.config/systemd/user/*.d/*.conf	setf systemd
1679" Systemd temp files
1680au BufNewFile,BufRead */etc/systemd/system/*.d/.#*	setf systemd
1681au BufNewFile,BufRead */etc/systemd/system/.#*		setf systemd
1682au BufNewFile,BufRead */.config/systemd/user/*.d/.#*	setf systemd
1683au BufNewFile,BufRead */.config/systemd/user/.#*	setf systemd
1684
1685" Synopsys Design Constraints
1686au BufNewFile,BufRead *.sdc			setf sdc
1687
1688" Sudoers
1689au BufNewFile,BufRead */etc/sudoers,sudoers.tmp	setf sudoers
1690
1691" SVG (Scalable Vector Graphics)
1692au BufNewFile,BufRead *.svg			setf svg
1693
1694" Tads (or Nroff or Perl test file)
1695au BufNewFile,BufRead *.t
1696	\ if !dist#ft#FTnroff() && !dist#ft#FTperl() | setf tads | endif
1697
1698" Tags
1699au BufNewFile,BufRead tags			setf tags
1700
1701" TAK
1702au BufNewFile,BufRead *.tak			setf tak
1703
1704" Task
1705au BufRead,BufNewFile {pending,completed,undo}.data  setf taskdata
1706au BufRead,BufNewFile *.task			setf taskedit
1707
1708" Tcl (JACL too)
1709au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl	setf tcl
1710
1711" TealInfo
1712au BufNewFile,BufRead *.tli			setf tli
1713
1714" Telix Salt
1715au BufNewFile,BufRead *.slt			setf tsalt
1716
1717" Tera Term Language
1718au BufRead,BufNewFile *.ttl			setf teraterm
1719
1720" Terminfo
1721au BufNewFile,BufRead *.ti			setf terminfo
1722
1723" TeX
1724au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl	setf tex
1725au BufNewFile,BufRead *.tex			call dist#ft#FTtex()
1726
1727" ConTeXt
1728au BufNewFile,BufRead *.mkii,*.mkiv,*.mkvi,*.mkxl,*.mklx   setf context
1729
1730" Texinfo
1731au BufNewFile,BufRead *.texinfo,*.texi,*.txi	setf texinfo
1732
1733" TeX configuration
1734au BufNewFile,BufRead texmf.cnf			setf texmf
1735
1736" Tidy config
1737au BufNewFile,BufRead .tidyrc,tidyrc,tidy.conf	setf tidy
1738
1739" TF mud client
1740au BufNewFile,BufRead *.tf,.tfrc,tfrc		setf tf
1741
1742" tmux configuration
1743au BufNewFile,BufRead {.,}tmux*.conf		setf tmux
1744
1745" TOML
1746au BufNewFile,BufRead *.toml			setf toml
1747
1748" TPP - Text Presentation Program
1749au BufNewFile,BufReadPost *.tpp			setf tpp
1750
1751" Treetop
1752au BufRead,BufNewFile *.treetop			setf treetop
1753
1754" Trustees
1755au BufNewFile,BufRead trustees.conf		setf trustees
1756
1757" TSS - Geometry
1758au BufNewFile,BufReadPost *.tssgm		setf tssgm
1759
1760" TSS - Optics
1761au BufNewFile,BufReadPost *.tssop		setf tssop
1762
1763" TSS - Command Line (temporary)
1764au BufNewFile,BufReadPost *.tsscl		setf tsscl
1765
1766" TWIG files
1767au BufNewFile,BufReadPost *.twig		setf twig
1768
1769" Typescript or Qt translation file (which is XML)
1770au BufNewFile,BufReadPost *.ts
1771	\ if getline(1) =~ '<?xml' |
1772	\   setf xml |
1773	\ else |
1774	\   setf typescript |
1775	\ endif
1776
1777" TypeScript with React
1778au BufNewFile,BufRead *.tsx			setf typescriptreact
1779
1780" Motif UIT/UIL files
1781au BufNewFile,BufRead *.uit,*.uil		setf uil
1782
1783" Udev conf
1784au BufNewFile,BufRead */etc/udev/udev.conf	setf udevconf
1785
1786" Udev permissions
1787au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm
1788"
1789" Udev symlinks config
1790au BufNewFile,BufRead */etc/udev/cdsymlinks.conf	setf sh
1791
1792" UnrealScript
1793au BufNewFile,BufRead *.uc			setf uc
1794
1795" Updatedb
1796au BufNewFile,BufRead */etc/updatedb.conf	setf updatedb
1797
1798" Upstart (init(8)) config files
1799au BufNewFile,BufRead */usr/share/upstart/*.conf	       setf upstart
1800au BufNewFile,BufRead */usr/share/upstart/*.override	       setf upstart
1801au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override  setf upstart
1802au BufNewFile,BufRead */.init/*.conf,*/.init/*.override	       setf upstart
1803au BufNewFile,BufRead */.config/upstart/*.conf		       setf upstart
1804au BufNewFile,BufRead */.config/upstart/*.override	       setf upstart
1805
1806" Vera
1807au BufNewFile,BufRead *.vr,*.vri,*.vrh		setf vera
1808
1809" Verilog HDL
1810au BufNewFile,BufRead *.v			setf verilog
1811
1812" Verilog-AMS HDL
1813au BufNewFile,BufRead *.va,*.vams		setf verilogams
1814
1815" SystemVerilog
1816au BufNewFile,BufRead *.sv,*.svh		setf systemverilog
1817
1818" VHDL
1819au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst,*.vho  setf vhdl
1820
1821" Vim script
1822au BufNewFile,BufRead *.vim,*.vba,.exrc,_exrc	setf vim
1823
1824" Viminfo file
1825au BufNewFile,BufRead .viminfo,_viminfo		setf viminfo
1826
1827" Virata Config Script File or Drupal module
1828au BufRead,BufNewFile *.hw,*.module,*.pkg
1829	\ if getline(1) =~ '<?php' |
1830	\   setf php |
1831	\ else |
1832	\   setf virata |
1833	\ endif
1834
1835" Visual Basic (also uses *.bas) or FORM
1836au BufNewFile,BufRead *.frm			call dist#ft#FTVB("form")
1837
1838" SaxBasic is close to Visual Basic
1839au BufNewFile,BufRead *.sba			setf vb
1840
1841" Vgrindefs file
1842au BufNewFile,BufRead vgrindefs			setf vgrindefs
1843
1844" VRML V1.0c
1845au BufNewFile,BufRead *.wrl			setf vrml
1846
1847" Vroom (vim testing and executable documentation)
1848au BufNewFile,BufRead *.vroom			setf vroom
1849
1850" Vue.js Single File Component
1851au BufNewFile,BufRead *.vue			setf vue
1852
1853" WebAssembly
1854au BufNewFile,BufRead *.wast,*.wat		setf wast
1855
1856" Webmacro
1857au BufNewFile,BufRead *.wm			setf webmacro
1858
1859" Wget config
1860au BufNewFile,BufRead .wgetrc,wgetrc		setf wget
1861
1862" Website MetaLanguage
1863au BufNewFile,BufRead *.wml			setf wml
1864
1865" Winbatch
1866au BufNewFile,BufRead *.wbt			setf winbatch
1867
1868" WSML
1869au BufNewFile,BufRead *.wsml			setf wsml
1870
1871" WPL
1872au BufNewFile,BufRead *.wpl			setf xml
1873
1874" WvDial
1875au BufNewFile,BufRead wvdial.conf,.wvdialrc	setf wvdial
1876
1877" CVS RC file
1878au BufNewFile,BufRead .cvsrc			setf cvsrc
1879
1880" CVS commit file
1881au BufNewFile,BufRead cvs\d\+			setf cvs
1882
1883" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment
1884" lines in a WEB file).
1885au BufNewFile,BufRead *.web
1886	\ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" |
1887	\   setf web |
1888	\ else |
1889	\   setf winbatch |
1890	\ endif
1891
1892" Windows Scripting Host and Windows Script Component
1893au BufNewFile,BufRead *.ws[fc]			setf wsh
1894
1895" XHTML
1896au BufNewFile,BufRead *.xhtml,*.xht		setf xhtml
1897
1898" X Pixmap (dynamically sets colors, use BufEnter to make it work better)
1899au BufEnter *.xpm
1900	\ if getline(1) =~ "XPM2" |
1901	\   setf xpm2 |
1902	\ else |
1903	\   setf xpm |
1904	\ endif
1905au BufEnter *.xpm2				setf xpm2
1906
1907" XFree86 config
1908au BufNewFile,BufRead XF86Config
1909	\ if getline(1) =~ '\<XConfigurator\>' |
1910	\   let b:xf86conf_xfree86_version = 3 |
1911	\ endif |
1912	\ setf xf86conf
1913au BufNewFile,BufRead */xorg.conf.d/*.conf
1914	\ let b:xf86conf_xfree86_version = 4 |
1915	\ setf xf86conf
1916
1917" Xorg config
1918au BufNewFile,BufRead xorg.conf,xorg.conf-4	let b:xf86conf_xfree86_version = 4 | setf xf86conf
1919
1920" Xinetd conf
1921au BufNewFile,BufRead */etc/xinetd.conf		setf xinetd
1922
1923" XS Perl extension interface language
1924au BufNewFile,BufRead *.xs			setf xs
1925
1926" X resources file
1927au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults
1928
1929" Xmath
1930au BufNewFile,BufRead *.msc,*.msf		setf xmath
1931au BufNewFile,BufRead *.ms
1932	\ if !dist#ft#FTnroff() | setf xmath | endif
1933
1934" XML  specific variants: docbk and xbl
1935au BufNewFile,BufRead *.xml			call dist#ft#FTxml()
1936
1937" XMI (holding UML models) is also XML
1938au BufNewFile,BufRead *.xmi			setf xml
1939
1940" CSPROJ files are Visual Studio.NET's XML-based project config files
1941au BufNewFile,BufRead *.csproj,*.csproj.user	setf xml
1942
1943" Qt Linguist translation source and Qt User Interface Files are XML
1944" However, for .ts Typescript is more common.
1945au BufNewFile,BufRead *.ui			setf xml
1946
1947" TPM's are RDF-based descriptions of TeX packages (Nikolai Weibull)
1948au BufNewFile,BufRead *.tpm			setf xml
1949
1950" Xdg menus
1951au BufNewFile,BufRead */etc/xdg/menus/*.menu	setf xml
1952
1953" ATI graphics driver configuration
1954au BufNewFile,BufRead fglrxrc			setf xml
1955
1956" Web Services Description Language (WSDL)
1957au BufNewFile,BufRead *.wsdl			setf xml
1958
1959" XLIFF (XML Localisation Interchange File Format) is also XML
1960au BufNewFile,BufRead *.xlf			setf xml
1961au BufNewFile,BufRead *.xliff			setf xml
1962
1963" XML User Interface Language
1964au BufNewFile,BufRead *.xul			setf xml
1965
1966" X11 xmodmap (also see below)
1967au BufNewFile,BufRead *Xmodmap			setf xmodmap
1968
1969" Xquery
1970au BufNewFile,BufRead *.xq,*.xql,*.xqm,*.xquery,*.xqy	setf xquery
1971
1972" XSD
1973au BufNewFile,BufRead *.xsd			setf xsd
1974
1975" Xslt
1976au BufNewFile,BufRead *.xsl,*.xslt		setf xslt
1977
1978" Yacc
1979au BufNewFile,BufRead *.yy,*.yxx,*.y++		setf yacc
1980
1981" Yacc or racc
1982au BufNewFile,BufRead *.y			call dist#ft#FTy()
1983
1984" Yaml
1985au BufNewFile,BufRead *.yaml,*.yml		setf yaml
1986
1987" Raml
1988au BufNewFile,BufRead *.raml			setf raml
1989
1990" yum conf (close enough to dosini)
1991au BufNewFile,BufRead */etc/yum.conf		setf dosini
1992
1993" Zimbu
1994au BufNewFile,BufRead *.zu			setf zimbu
1995" Zimbu Templates
1996au BufNewFile,BufRead *.zut			setf zimbutempl
1997
1998" Zope
1999"   dtml (zope dynamic template markup language), pt (zope page template),
2000"   cpt (zope form controller page template)
2001au BufNewFile,BufRead *.dtml,*.pt,*.cpt		call dist#ft#FThtml()
2002"   zsql (zope sql method)
2003au BufNewFile,BufRead *.zsql			call dist#ft#SQL()
2004
2005" Z80 assembler asz80
2006au BufNewFile,BufRead *.z8a			setf z8a
2007
2008augroup END
2009
2010
2011" Source the user-specified filetype file, for backwards compatibility with
2012" Vim 5.x.
2013if exists("myfiletypefile") && filereadable(expand(myfiletypefile))
2014  execute "source " . myfiletypefile
2015endif
2016
2017
2018" Check for "*" after loading myfiletypefile, so that scripts.vim is only used
2019" when there are no matching file name extensions.
2020" Don't do this for compressed files.
2021augroup filetypedetect
2022au BufNewFile,BufRead *
2023	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
2024	\ | runtime! scripts.vim | endif
2025au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
2026
2027
2028" Extra checks for when no filetype has been detected now.  Mostly used for
2029" patterns that end in "*".  E.g., "zsh*" matches "zsh.vim", but that's a Vim
2030" script file.
2031" Most of these should call s:StarSetf() to avoid names ending in .gz and the
2032" like are used.
2033
2034" More Apache style config files
2035au BufNewFile,BufRead */etc/proftpd/*.conf*,*/etc/proftpd/conf.*/*	call s:StarSetf('apachestyle')
2036au BufNewFile,BufRead proftpd.conf*					call s:StarSetf('apachestyle')
2037
2038" More Apache config files
2039au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf*	call s:StarSetf('apache')
2040au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf*		call s:StarSetf('apache')
2041
2042" Asterisk config file
2043au BufNewFile,BufRead *asterisk/*.conf*		call s:StarSetf('asterisk')
2044au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm')
2045
2046" Bazaar version control
2047au BufNewFile,BufRead bzr_log.*			setf bzr
2048
2049" Bazel build file
2050if !has("fname_case")
2051  au BufNewFile,BufRead *.BUILD,BUILD		setf bzl
2052endif
2053
2054" BIND zone
2055au BufNewFile,BufRead */named/db.*,*/bind/db.*	call s:StarSetf('bindzone')
2056
2057au BufNewFile,BufRead cabal.project.*		call s:StarSetf('cabalproject')
2058
2059" Calendar
2060au BufNewFile,BufRead */.calendar/*,
2061	\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
2062	\					call s:StarSetf('calendar')
2063
2064" Changelog
2065au BufNewFile,BufRead [cC]hange[lL]og*
2066	\ if getline(1) =~ '; urgency='
2067	\|  call s:StarSetf('debchangelog')
2068	\|else
2069	\|  call s:StarSetf('changelog')
2070	\|endif
2071
2072" Crontab
2073au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/*		call s:StarSetf('crontab')
2074
2075" dnsmasq(8) configuration
2076au BufNewFile,BufRead */etc/dnsmasq.d/*		call s:StarSetf('dnsmasq')
2077
2078" Dracula
2079au BufNewFile,BufRead drac.*			call s:StarSetf('dracula')
2080
2081" Fvwm
2082au BufNewFile,BufRead */.fvwm/*			call s:StarSetf('fvwm')
2083au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
2084	\ let b:fvwm_version = 1 | call s:StarSetf('fvwm')
2085au BufNewFile,BufRead *fvwm2rc*
2086	\ if expand("<afile>:e") == "m4"
2087	\|  call s:StarSetf('fvwm2m4')
2088	\|else
2089	\|  let b:fvwm_version = 2 | call s:StarSetf('fvwm')
2090	\|endif
2091
2092" Gedcom
2093au BufNewFile,BufRead */tmp/lltmp*		call s:StarSetf('gedcom')
2094
2095" Git
2096au BufNewFile,BufRead */.gitconfig.d/*,/etc/gitconfig.d/*	call s:StarSetf('gitconfig')
2097
2098" Gitolite
2099au BufNewFile,BufRead */gitolite-admin/conf/*	call s:StarSetf('gitolite')
2100
2101" GTK RC
2102au BufNewFile,BufRead .gtkrc*,gtkrc*		call s:StarSetf('gtkrc')
2103
2104" Jam
2105au BufNewFile,BufRead Prl*.*,JAM*.*		call s:StarSetf('jam')
2106
2107" Jargon
2108au! BufNewFile,BufRead *jarg*
2109	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE'
2110	\|  call s:StarSetf('jargon')
2111	\|endif
2112
2113" Java Properties resource file (note: doesn't catch font.properties.pl)
2114au BufNewFile,BufRead *.properties_??_??_*	call s:StarSetf('jproperties')
2115
2116" Kconfig
2117au BufNewFile,BufRead Kconfig.*			call s:StarSetf('kconfig')
2118
2119" Lilo: Linux loader
2120au BufNewFile,BufRead lilo.conf*		call s:StarSetf('lilo')
2121
2122" Logcheck
2123au BufNewFile,BufRead */etc/logcheck/*.d*/*	call s:StarSetf('logcheck')
2124
2125" Makefile
2126au BufNewFile,BufRead [mM]akefile*		call s:StarSetf('make')
2127
2128" Ruby Makefile
2129au BufNewFile,BufRead [rR]akefile*		call s:StarSetf('ruby')
2130
2131" Mail (also matches muttrc.vim, so this is below the other checks)
2132au BufNewFile,BufRead {neo,}mutt[[:alnum:]._-]\\\{6\}	setf mail
2133
2134au BufNewFile,BufRead reportbug-*		call s:StarSetf('mail')
2135
2136" Modconf
2137au BufNewFile,BufRead */etc/modutils/*
2138	\ if executable(expand("<afile>")) != 1
2139	\|  call s:StarSetf('modconf')
2140	\|endif
2141au BufNewFile,BufRead */etc/modprobe.*		call s:StarSetf('modconf')
2142
2143" Mutt setup file
2144au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc*	call s:StarSetf('muttrc')
2145au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc*		call s:StarSetf('muttrc')
2146
2147" Neomutt setup file
2148au BufNewFile,BufRead .neomuttrc*,*/.neomutt/neomuttrc*	call s:StarSetf('neomuttrc')
2149au BufNewFile,BufRead neomuttrc*,Neomuttrc*		call s:StarSetf('neomuttrc')
2150
2151" Nroff macros
2152au BufNewFile,BufRead tmac.*			call s:StarSetf('nroff')
2153
2154" OpenBSD hostname.if
2155au BufNewFile,BufRead /etc/hostname.*		call s:StarSetf('config')
2156
2157" Pam conf
2158au BufNewFile,BufRead */etc/pam.d/*		call s:StarSetf('pamconf')
2159
2160" Printcap and Termcap
2161au BufNewFile,BufRead *printcap*
2162	\ if !did_filetype()
2163	\|  let b:ptcap_type = "print" | call s:StarSetf('ptcap')
2164	\|endif
2165au BufNewFile,BufRead *termcap*
2166	\ if !did_filetype()
2167	\|  let b:ptcap_type = "term" | call s:StarSetf('ptcap')
2168	\|endif
2169
2170" ReDIF
2171" Only used when the .rdf file was not detected to be XML.
2172au BufRead,BufNewFile *.rdf			call dist#ft#Redif()
2173
2174" Remind
2175au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
2176
2177" SGML catalog file
2178au BufNewFile,BufRead sgml.catalog*		call s:StarSetf('catalog')
2179
2180" Shell scripts ending in a star
2181au BufNewFile,BufRead .bashrc*,.bash[_-]profile*,.bash[_-]logout*,.bash[_-]aliases*,bash-fc[-.]*,PKGBUILD*,APKBUILD* call dist#ft#SetFileTypeSH("bash")
2182au BufNewFile,BufRead .kshrc* call dist#ft#SetFileTypeSH("ksh")
2183au BufNewFile,BufRead .profile* call dist#ft#SetFileTypeSH(getline(1))
2184
2185" tcsh scripts ending in a star
2186au BufNewFile,BufRead .tcshrc*	call dist#ft#SetFileTypeShell("tcsh")
2187
2188" csh scripts ending in a star
2189au BufNewFile,BufRead .login*,.cshrc*  call dist#ft#CSH()
2190
2191" VHDL
2192au BufNewFile,BufRead *.vhdl_[0-9]*		call s:StarSetf('vhdl')
2193
2194" Vim script
2195au BufNewFile,BufRead *vimrc*			call s:StarSetf('vim')
2196
2197" Subversion commit file
2198au BufNewFile,BufRead svn-commit*.tmp		setf svn
2199
2200" X resources file
2201au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults')
2202
2203" XFree86 config
2204au BufNewFile,BufRead XF86Config-4*
2205	\ let b:xf86conf_xfree86_version = 4 | call s:StarSetf('xf86conf')
2206au BufNewFile,BufRead XF86Config*
2207	\ if getline(1) =~ '\<XConfigurator\>'
2208	\|  let b:xf86conf_xfree86_version = 3
2209	\|endif
2210	\|call s:StarSetf('xf86conf')
2211
2212" X11 xmodmap
2213au BufNewFile,BufRead *xmodmap*			call s:StarSetf('xmodmap')
2214
2215" Xinetd conf
2216au BufNewFile,BufRead */etc/xinetd.d/*		call s:StarSetf('xinetd')
2217
2218" yum conf (close enough to dosini)
2219au BufNewFile,BufRead */etc/yum.repos.d/*	call s:StarSetf('dosini')
2220
2221" Z-Shell script ending in a star
2222au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump*  call s:StarSetf('zsh')
2223au BufNewFile,BufRead zsh*,zlog*		call s:StarSetf('zsh')
2224
2225
2226" Plain text files, needs to be far down to not override others.  This avoids
2227" the "conf" type being used if there is a line starting with '#'.
2228au BufNewFile,BufRead *.text,README		setf text
2229
2230" Help files match *.txt but should have a last line that is a modeline.
2231au BufNewFile,BufRead *.txt
2232	\  if getline('$') !~ 'vim:.*ft=help'
2233	\|   setf text
2234	\| endif
2235
2236
2237" Use the filetype detect plugins.  They may overrule any of the previously
2238" detected filetypes.
2239runtime! ftdetect/*.vim
2240
2241" NOTE: The above command could have ended the filetypedetect autocmd group
2242" and started another one. Let's make sure it has ended to get to a consistent
2243" state.
2244augroup END
2245
2246" Generic configuration file. Use FALLBACK, it's just guessing!
2247au filetypedetect BufNewFile,BufRead,StdinReadPost *
2248	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
2249	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
2250	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
2251	\   setf FALLBACK conf |
2252	\ endif
2253
2254
2255" If the GUI is already running, may still need to install the Syntax menu.
2256" Don't do it when the 'M' flag is included in 'guioptions'.
2257if has("menu") && has("gui_running")
2258      \ && !exists("did_install_syntax_menu") && &guioptions !~# "M"
2259  source <sfile>:p:h/menu.vim
2260endif
2261
2262" Function called for testing all functions defined here.  These are
2263" script-local, thus need to be executed here.
2264" Returns a string with error messages (hopefully empty).
2265func! TestFiletypeFuncs(testlist)
2266  let output = ''
2267  for f in a:testlist
2268    try
2269      exe f
2270    catch
2271      let output = output . "\n" . f . ": " . v:exception
2272    endtry
2273  endfor
2274  return output
2275endfunc
2276
2277" Restore 'cpoptions'
2278let &cpo = s:cpo_save
2279unlet s:cpo_save
2280