blob: fe05d265b32d78881dbc59720e38e675eb76bb1c [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim support file to detect file types in scripts
2"
3" Maintainer: Bram Moolenaar <Bram@vim.org>
Bram Moolenaar8fd2ffc2018-02-03 15:43:15 +01004" Last change: 2018 Feb 03
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
6" This file is called by an autocommand for every file that has just been
7" loaded into a buffer. It checks if the type of file can be recognized by
8" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim.
Bram Moolenaar3a429ef2017-06-11 17:10:32 +02009"
10" Note that the pattern matches are done with =~# to avoid the value of the
11" 'ignorecase' option making a difference. Where case is to be ignored use
12" =~? instead. Do not use =~ anywhere.
Bram Moolenaar071d4272004-06-13 20:20:40 +000013
14
15" Only do the rest when the FileType autocommand has not been triggered yet.
16if did_filetype()
17 finish
18endif
19
20" Load the user defined scripts file first
21" Only do this when the FileType autocommand has not been triggered yet
Bram Moolenaarf4630b62005-05-20 21:31:17 +000022if exists("myscriptsfile") && filereadable(expand(myscriptsfile))
Bram Moolenaar071d4272004-06-13 20:20:40 +000023 execute "source " . myscriptsfile
24 if did_filetype()
25 finish
26 endif
27endif
28
29" Line continuation is used here, remove 'C' from 'cpoptions'
30let s:cpo_save = &cpo
31set cpo&vim
32
33let s:line1 = getline(1)
34
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020035if s:line1 =~# "^#!"
Bram Moolenaar071d4272004-06-13 20:20:40 +000036 " A script that starts with "#!".
37
38 " Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into
39 " "#!/usr/bin/bash" to make matching easier.
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020040 if s:line1 =~# '^#!\s*\S*\<env\s'
Bram Moolenaar071d4272004-06-13 20:20:40 +000041 let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
42 let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
43 endif
44
45 " Get the program name.
46 " Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
Bram Moolenaarf4630b62005-05-20 21:31:17 +000047 " If the word env is used, use the first word after the space:
48 " "#!/usr/bin/env perl [path/args]"
Bram Moolenaar071d4272004-06-13 20:20:40 +000049 " If there is no path use the first word: "#!perl [path/args]".
50 " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020051 if s:line1 =~# '^#!\s*\a:[/\\]'
Bram Moolenaar071d4272004-06-13 20:20:40 +000052 let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020053 elseif s:line1 =~# '^#!.*\<env\>'
Bram Moolenaarf4630b62005-05-20 21:31:17 +000054 let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020055 elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
Bram Moolenaar071d4272004-06-13 20:20:40 +000056 let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
57 else
58 let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
59 endif
60
Bram Moolenaara8c4d562006-08-08 18:54:11 +000061 " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
62 " third line. Suggested by Steven Atkinson.
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020063 if getline(3) =~# '^exec wish'
Bram Moolenaara8c4d562006-08-08 18:54:11 +000064 let s:name = 'wish'
65 endif
66
Bram Moolenaard4755bb2004-09-02 19:12:26 +000067 " Bourne-like shell scripts: bash bash2 ksh ksh93 sh
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020068 if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>'
Bram Moolenaard09a2062017-11-11 15:37:45 +010069 call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000070
71 " csh scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020072 elseif s:name =~# '^csh\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +000073 if exists("g:filetype_csh")
Bram Moolenaard09a2062017-11-11 15:37:45 +010074 call dist#ft#SetFileTypeShell(g:filetype_csh)
Bram Moolenaar071d4272004-06-13 20:20:40 +000075 else
Bram Moolenaard09a2062017-11-11 15:37:45 +010076 call dist#ft#SetFileTypeShell("csh")
Bram Moolenaar071d4272004-06-13 20:20:40 +000077 endif
78
79 " tcsh scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020080 elseif s:name =~# '^tcsh\>'
Bram Moolenaard09a2062017-11-11 15:37:45 +010081 call dist#ft#SetFileTypeShell("tcsh")
Bram Moolenaar071d4272004-06-13 20:20:40 +000082
83 " Z shell scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020084 elseif s:name =~# '^zsh\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +000085 set ft=zsh
86
87 " TCL scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020088 elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +000089 set ft=tcl
90
91 " Expect scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020092 elseif s:name =~# '^expect\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +000093 set ft=expect
94
95 " Gnuplot scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +020096 elseif s:name =~# '^gnuplot\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +000097 set ft=gnuplot
98
99 " Makefiles
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200100 elseif s:name =~# 'make\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101 set ft=make
102
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100103 " Pike
104 elseif s:name =~# '^pike\%(\>\|[0-9]\)'
105 set ft=pike
106
Bram Moolenaar8fd2ffc2018-02-03 15:43:15 +0100107 " Pike
108 elseif s:name =~# '^pike\%(\>\|[0-9]\)'
109 set ft=pike
110
Bram Moolenaarf4630b62005-05-20 21:31:17 +0000111 " Lua
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200112 elseif s:name =~# 'lua'
Bram Moolenaarf4630b62005-05-20 21:31:17 +0000113 set ft=lua
114
Bram Moolenaar3b72f1d2010-07-29 23:12:43 +0200115 " Perl 6
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200116 elseif s:name =~# 'perl6'
Bram Moolenaar3b72f1d2010-07-29 23:12:43 +0200117 set ft=perl6
118
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119 " Perl
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200120 elseif s:name =~# 'perl'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121 set ft=perl
122
123 " PHP
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200124 elseif s:name =~# 'php'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125 set ft=php
126
127 " Python
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200128 elseif s:name =~# 'python'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 set ft=python
130
131 " Groovy
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200132 elseif s:name =~# '^groovy\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133 set ft=groovy
134
135 " Ruby
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200136 elseif s:name =~# 'ruby'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137 set ft=ruby
138
Bram Moolenaar214641f2017-03-05 17:04:09 +0100139 " JavaScript
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200140 elseif s:name =~# 'node\(js\)\=\>' || s:name =~# 'rhino\>'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100141 set ft=javascript
142
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143 " BC calculator
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200144 elseif s:name =~# '^bc\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 set ft=bc
146
147 " sed
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200148 elseif s:name =~# 'sed\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149 set ft=sed
150
151 " OCaml-scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200152 elseif s:name =~# 'ocaml'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153 set ft=ocaml
154
155 " Awk scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200156 elseif s:name =~# 'awk\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157 set ft=awk
158
159 " Website MetaLanguage
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200160 elseif s:name =~# 'wml'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161 set ft=wml
162
163 " Scheme scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200164 elseif s:name =~# 'scheme'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165 set ft=scheme
166
Bram Moolenaaraf289d32005-10-12 21:01:44 +0000167 " CFEngine scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200168 elseif s:name =~# 'cfengine'
Bram Moolenaaraf289d32005-10-12 21:01:44 +0000169 set ft=cfengine
170
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200171 " Erlang scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200172 elseif s:name =~# 'escript'
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200173 set ft=erlang
174
Bram Moolenaar214641f2017-03-05 17:04:09 +0100175 " Haskell
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200176 elseif s:name =~# 'haskell'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100177 set ft=haskell
178
179 " Scala
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200180 elseif s:name =~# 'scala\>'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100181 set ft=scala
182
Bram Moolenaar8fd2ffc2018-02-03 15:43:15 +0100183 " Clojure
184 elseif s:name =~# 'clojure'
185 set ft=clojure
186
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187 endif
188 unlet s:name
189
190else
191 " File does not start with "#!".
192
193 let s:line2 = getline(2)
194 let s:line3 = getline(3)
195 let s:line4 = getline(4)
196 let s:line5 = getline(5)
197
198 " Bourne-like shell scripts: sh ksh bash bash2
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200199 if s:line1 =~# '^:$'
Bram Moolenaard09a2062017-11-11 15:37:45 +0100200 call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201
202 " Z shell scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200203 elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
204 \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205 set ft=zsh
206
207 " ELM Mail files
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200208 elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209 set ft=mail
210
211 " Mason
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200212 elseif s:line1 =~# '^<[%&].*>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213 set ft=mason
214
215 " Vim scripts (must have '" vim' as the first line to trigger this)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200216 elseif s:line1 =~# '^" *[vV]im$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217 set ft=vim
218
219 " MOO
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200220 elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221 set ft=moo
222
223 " Diff file:
224 " - "diff" in first line (context diff)
225 " - "Only in " in first line
226 " - "--- " in first line and "+++ " in second line (unified diff).
227 " - "*** " in first line and "--- " in second line (context diff).
228 " - "# It was generated by makepatch " in the second line (makepatch diff).
229 " - "Index: <filename>" in the first line (CVS file)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000230 " - "=== ", line of "=", "---", "+++ " (SVK diff)
Bram Moolenaard2cec5b2006-03-28 21:08:56 +0000231 " - "=== ", "--- ", "+++ " (bzr diff, common case)
232 " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
Bram Moolenaard09acef2012-09-21 14:54:30 +0200233 " - "# HG changeset patch" in first line (Mercurial export format)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200234 elseif s:line1 =~# '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
235 \ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
236 \ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
237 \ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
238 \ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
239 \ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240 set ft=diff
241
242 " PostScript Files (must have %!PS as the first line, like a2ps output)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200243 elseif s:line1 =~# '^%![ \t]*PS'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000244 set ft=postscr
245
246 " M4 scripts: Guess there is a line that starts with "dnl".
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200247 elseif s:line1 =~# '^\s*dnl\>'
248 \ || s:line2 =~# '^\s*dnl\>'
249 \ || s:line3 =~# '^\s*dnl\>'
250 \ || s:line4 =~# '^\s*dnl\>'
251 \ || s:line5 =~# '^\s*dnl\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252 set ft=m4
253
254 " AmigaDos scripts
255 elseif $TERM == "amiga"
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200256 \ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257 set ft=amiga
258
259 " SiCAD scripts (must have procn or procd as the first line to trigger this)
260 elseif s:line1 =~? '^ *proc[nd] *$'
261 set ft=sicad
262
263 " Purify log files start with "**** Purify"
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200264 elseif s:line1 =~# '^\*\*\*\* Purify'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265 set ft=purifylog
266
267 " XML
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200268 elseif s:line1 =~# '<?\s*xml.*?>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269 set ft=xml
270
271 " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200272 elseif s:line1 =~# '\<DTD\s\+XHTML\s'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273 set ft=xhtml
274
Bram Moolenaar12b87e52008-08-25 03:04:18 +0000275 " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
Bram Moolenaar26852122016-05-24 20:02:38 +0200276 " Avoid "doctype html", used by slim.
277 elseif s:line1 =~? '<!DOCTYPE\s\+html\>'
Bram Moolenaar12b87e52008-08-25 03:04:18 +0000278 set ft=html
279
Bram Moolenaaraba88572008-06-25 20:13:35 +0000280 " PDF
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200281 elseif s:line1 =~# '^%PDF-'
Bram Moolenaaraba88572008-06-25 20:13:35 +0000282 set ft=pdf
283
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284 " XXD output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200285 elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 set ft=xxd
287
288 " RCS/CVS log output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200289 elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290 set ft=rcslog
291
292 " CVS commit
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200293 elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000294 set ft=cvs
295
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000296 " Prescribe
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200297 elseif s:line1 =~# '^!R!'
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000298 set ft=prescribe
299
Bram Moolenaar071d4272004-06-13 20:20:40 +0000300 " Send-pr
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200301 elseif s:line1 =~# '^SEND-PR:'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000302 set ft=sendpr
303
304 " SNNS files
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200305 elseif s:line1 =~# '^SNNS network definition file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000306 set ft=snnsnet
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200307 elseif s:line1 =~# '^SNNS pattern definition file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308 set ft=snnspat
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200309 elseif s:line1 =~# '^SNNS result file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000310 set ft=snnsres
311
312 " Virata
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200313 elseif s:line1 =~# '^%.\{-}[Vv]irata'
314 \ || s:line2 =~# '^%.\{-}[Vv]irata'
315 \ || s:line3 =~# '^%.\{-}[Vv]irata'
316 \ || s:line4 =~# '^%.\{-}[Vv]irata'
317 \ || s:line5 =~# '^%.\{-}[Vv]irata'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000318 set ft=virata
319
320 " Strace
Bram Moolenaarc572da52017-08-27 16:52:01 +0200321 elseif s:line1 =~# '[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322 set ft=strace
323
324 " VSE JCL
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200325 elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000326 set ft=vsejcl
327
328 " TAK and SINDA
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200329 elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000330 set ft=takout
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200331 elseif s:line3 =~# 'S Y S T E M S I M P R O V E D '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000332 set ft=sindaout
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200333 elseif getline(6) =~# 'Run Date: '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000334 set ft=takcmp
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200335 elseif getline(9) =~# 'Node File 1'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000336 set ft=sindacmp
337
338 " DNS zone files
Bram Moolenaar01164a62017-11-02 22:58:42 +0100339 elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
Bram Moolenaarbd404142006-03-25 22:05:04 +0000340 set ft=bindzone
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341
342 " BAAN
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200343 elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
344 \ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345 set ft=baan
346
347 " Valgrind
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200348 elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000349 set ft=valgrind
350
Bram Moolenaar34401cc2014-08-29 15:12:19 +0200351 " Go docs
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200352 elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
Bram Moolenaar34401cc2014-08-29 15:12:19 +0200353 set ft=godoc
354
Bram Moolenaar071d4272004-06-13 20:20:40 +0000355 " Renderman Interface Bytestream
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200356 elseif s:line1 =~# '^##RenderMan'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000357 set ft=rib
358
359 " Scheme scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200360 elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361 set ft=scheme
362
Bram Moolenaaraba88572008-06-25 20:13:35 +0000363 " Git output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200364 elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
Bram Moolenaaraba88572008-06-25 20:13:35 +0000365 set ft=git
366
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200367 " Gprof (gnu profiler)
368 elseif s:line1 == 'Flat profile:'
369 \ && s:line2 == ''
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200370 \ && s:line3 =~# '^Each sample counts as .* seconds.$'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200371 set ft=gprof
372
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200373 " Erlang terms
374 " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
375 elseif s:line1 =~? '-\*-.*erlang.*-\*-'
376 set ft=erlang
377
Bram Moolenaar071d4272004-06-13 20:20:40 +0000378 " CVS diff
379 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100380 let s:lnum = 1
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200381 while getline(s:lnum) =~# "^? " && s:lnum < line("$")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100382 let s:lnum += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383 endwhile
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200384 if getline(s:lnum) =~# '^Index:\s\+\f\+$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000385 set ft=diff
386
387 " locale input files: Formal Definitions of Cultural Conventions
388 " filename must be like en_US, fr_FR@euro or en_US.UTF-8
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200389 elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100390 let s:lnum = 1
391 while s:lnum < 100 && s:lnum < line("$")
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200392 if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393 setf fdcc
394 break
395 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100396 let s:lnum += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000397 endwhile
398 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100399 unlet s:lnum
Bram Moolenaar071d4272004-06-13 20:20:40 +0000400
401 endif
402
403 unlet s:line2 s:line3 s:line4 s:line5
404
405endif
406
407" Restore 'cpoptions'
408let &cpo = s:cpo_save
409
410unlet s:cpo_save s:line1