blob: ab66c0c0a12b735a6637bd3053668f5d94f90686 [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 Moolenaarf4630b62005-05-20 21:31:17 +0000107 " Lua
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200108 elseif s:name =~# 'lua'
Bram Moolenaarf4630b62005-05-20 21:31:17 +0000109 set ft=lua
110
Bram Moolenaar3b72f1d2010-07-29 23:12:43 +0200111 " Perl 6
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200112 elseif s:name =~# 'perl6'
Bram Moolenaar3b72f1d2010-07-29 23:12:43 +0200113 set ft=perl6
114
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115 " Perl
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200116 elseif s:name =~# 'perl'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117 set ft=perl
118
119 " PHP
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200120 elseif s:name =~# 'php'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121 set ft=php
122
123 " Python
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200124 elseif s:name =~# 'python'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125 set ft=python
126
127 " Groovy
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200128 elseif s:name =~# '^groovy\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 set ft=groovy
130
131 " Ruby
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200132 elseif s:name =~# 'ruby'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133 set ft=ruby
134
Bram Moolenaar214641f2017-03-05 17:04:09 +0100135 " JavaScript
Bram Moolenaar4bc0bed2018-02-03 22:35:40 +0100136 elseif s:name =~# 'node\(js\)\=\>\|js\>' || s:name =~# 'rhino\>'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100137 set ft=javascript
138
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139 " BC calculator
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200140 elseif s:name =~# '^bc\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141 set ft=bc
142
143 " sed
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200144 elseif s:name =~# 'sed\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 set ft=sed
146
147 " OCaml-scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200148 elseif s:name =~# 'ocaml'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149 set ft=ocaml
150
151 " Awk scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200152 elseif s:name =~# 'awk\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153 set ft=awk
154
155 " Website MetaLanguage
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200156 elseif s:name =~# 'wml'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157 set ft=wml
158
159 " Scheme scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200160 elseif s:name =~# 'scheme'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161 set ft=scheme
162
Bram Moolenaaraf289d32005-10-12 21:01:44 +0000163 " CFEngine scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200164 elseif s:name =~# 'cfengine'
Bram Moolenaaraf289d32005-10-12 21:01:44 +0000165 set ft=cfengine
166
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200167 " Erlang scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200168 elseif s:name =~# 'escript'
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200169 set ft=erlang
170
Bram Moolenaar214641f2017-03-05 17:04:09 +0100171 " Haskell
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200172 elseif s:name =~# 'haskell'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100173 set ft=haskell
174
175 " Scala
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200176 elseif s:name =~# 'scala\>'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100177 set ft=scala
178
Bram Moolenaar8fd2ffc2018-02-03 15:43:15 +0100179 " Clojure
180 elseif s:name =~# 'clojure'
181 set ft=clojure
182
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 endif
184 unlet s:name
185
186else
187 " File does not start with "#!".
188
189 let s:line2 = getline(2)
190 let s:line3 = getline(3)
191 let s:line4 = getline(4)
192 let s:line5 = getline(5)
193
194 " Bourne-like shell scripts: sh ksh bash bash2
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200195 if s:line1 =~# '^:$'
Bram Moolenaard09a2062017-11-11 15:37:45 +0100196 call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197
198 " Z shell scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200199 elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
200 \ "\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 +0000201 set ft=zsh
202
203 " ELM Mail files
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200204 elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205 set ft=mail
206
207 " Mason
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200208 elseif s:line1 =~# '^<[%&].*>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209 set ft=mason
210
211 " Vim scripts (must have '" vim' as the first line to trigger this)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200212 elseif s:line1 =~# '^" *[vV]im$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213 set ft=vim
214
215 " MOO
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200216 elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217 set ft=moo
218
219 " Diff file:
220 " - "diff" in first line (context diff)
221 " - "Only in " in first line
222 " - "--- " in first line and "+++ " in second line (unified diff).
223 " - "*** " in first line and "--- " in second line (context diff).
224 " - "# It was generated by makepatch " in the second line (makepatch diff).
225 " - "Index: <filename>" in the first line (CVS file)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000226 " - "=== ", line of "=", "---", "+++ " (SVK diff)
Bram Moolenaard2cec5b2006-03-28 21:08:56 +0000227 " - "=== ", "--- ", "+++ " (bzr diff, common case)
228 " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
Bram Moolenaard09acef2012-09-21 14:54:30 +0200229 " - "# HG changeset patch" in first line (Mercurial export format)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200230 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\)'
231 \ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
232 \ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
233 \ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
234 \ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
235 \ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236 set ft=diff
237
238 " PostScript Files (must have %!PS as the first line, like a2ps output)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200239 elseif s:line1 =~# '^%![ \t]*PS'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240 set ft=postscr
241
242 " M4 scripts: Guess there is a line that starts with "dnl".
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200243 elseif s:line1 =~# '^\s*dnl\>'
244 \ || s:line2 =~# '^\s*dnl\>'
245 \ || s:line3 =~# '^\s*dnl\>'
246 \ || s:line4 =~# '^\s*dnl\>'
247 \ || s:line5 =~# '^\s*dnl\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248 set ft=m4
249
250 " AmigaDos scripts
251 elseif $TERM == "amiga"
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200252 \ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253 set ft=amiga
254
255 " SiCAD scripts (must have procn or procd as the first line to trigger this)
256 elseif s:line1 =~? '^ *proc[nd] *$'
257 set ft=sicad
258
259 " Purify log files start with "**** Purify"
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200260 elseif s:line1 =~# '^\*\*\*\* Purify'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 set ft=purifylog
262
263 " XML
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200264 elseif s:line1 =~# '<?\s*xml.*?>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265 set ft=xml
266
267 " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200268 elseif s:line1 =~# '\<DTD\s\+XHTML\s'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269 set ft=xhtml
270
Bram Moolenaar12b87e52008-08-25 03:04:18 +0000271 " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
Bram Moolenaar26852122016-05-24 20:02:38 +0200272 " Avoid "doctype html", used by slim.
273 elseif s:line1 =~? '<!DOCTYPE\s\+html\>'
Bram Moolenaar12b87e52008-08-25 03:04:18 +0000274 set ft=html
275
Bram Moolenaaraba88572008-06-25 20:13:35 +0000276 " PDF
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200277 elseif s:line1 =~# '^%PDF-'
Bram Moolenaaraba88572008-06-25 20:13:35 +0000278 set ft=pdf
279
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280 " XXD output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200281 elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282 set ft=xxd
283
284 " RCS/CVS log output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200285 elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 set ft=rcslog
287
288 " CVS commit
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200289 elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290 set ft=cvs
291
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000292 " Prescribe
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200293 elseif s:line1 =~# '^!R!'
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000294 set ft=prescribe
295
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296 " Send-pr
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200297 elseif s:line1 =~# '^SEND-PR:'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000298 set ft=sendpr
299
300 " SNNS files
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200301 elseif s:line1 =~# '^SNNS network definition file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000302 set ft=snnsnet
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200303 elseif s:line1 =~# '^SNNS pattern definition file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000304 set ft=snnspat
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200305 elseif s:line1 =~# '^SNNS result file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000306 set ft=snnsres
307
308 " Virata
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200309 elseif s:line1 =~# '^%.\{-}[Vv]irata'
310 \ || s:line2 =~# '^%.\{-}[Vv]irata'
311 \ || s:line3 =~# '^%.\{-}[Vv]irata'
312 \ || s:line4 =~# '^%.\{-}[Vv]irata'
313 \ || s:line5 =~# '^%.\{-}[Vv]irata'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314 set ft=virata
315
316 " Strace
Bram Moolenaarc572da52017-08-27 16:52:01 +0200317 elseif s:line1 =~# '[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000318 set ft=strace
319
320 " VSE JCL
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200321 elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322 set ft=vsejcl
323
324 " TAK and SINDA
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200325 elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000326 set ft=takout
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200327 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 +0000328 set ft=sindaout
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200329 elseif getline(6) =~# 'Run Date: '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000330 set ft=takcmp
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200331 elseif getline(9) =~# 'Node File 1'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000332 set ft=sindacmp
333
334 " DNS zone files
Bram Moolenaar01164a62017-11-02 22:58:42 +0100335 elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
Bram Moolenaarbd404142006-03-25 22:05:04 +0000336 set ft=bindzone
Bram Moolenaar071d4272004-06-13 20:20:40 +0000337
338 " BAAN
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200339 elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
340 \ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341 set ft=baan
342
343 " Valgrind
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200344 elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345 set ft=valgrind
346
Bram Moolenaar34401cc2014-08-29 15:12:19 +0200347 " Go docs
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200348 elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
Bram Moolenaar34401cc2014-08-29 15:12:19 +0200349 set ft=godoc
350
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351 " Renderman Interface Bytestream
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200352 elseif s:line1 =~# '^##RenderMan'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353 set ft=rib
354
355 " Scheme scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200356 elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000357 set ft=scheme
358
Bram Moolenaaraba88572008-06-25 20:13:35 +0000359 " Git output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200360 elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
Bram Moolenaaraba88572008-06-25 20:13:35 +0000361 set ft=git
362
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200363 " Gprof (gnu profiler)
364 elseif s:line1 == 'Flat profile:'
365 \ && s:line2 == ''
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200366 \ && s:line3 =~# '^Each sample counts as .* seconds.$'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200367 set ft=gprof
368
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200369 " Erlang terms
370 " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
371 elseif s:line1 =~? '-\*-.*erlang.*-\*-'
372 set ft=erlang
373
Bram Moolenaar071d4272004-06-13 20:20:40 +0000374 " CVS diff
375 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100376 let s:lnum = 1
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200377 while getline(s:lnum) =~# "^? " && s:lnum < line("$")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100378 let s:lnum += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000379 endwhile
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200380 if getline(s:lnum) =~# '^Index:\s\+\f\+$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000381 set ft=diff
382
383 " locale input files: Formal Definitions of Cultural Conventions
384 " filename must be like en_US, fr_FR@euro or en_US.UTF-8
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200385 elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100386 let s:lnum = 1
387 while s:lnum < 100 && s:lnum < line("$")
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200388 if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000389 setf fdcc
390 break
391 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100392 let s:lnum += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393 endwhile
394 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100395 unlet s:lnum
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396
397 endif
398
399 unlet s:line2 s:line3 s:line4 s:line5
400
401endif
402
403" Restore 'cpoptions'
404let &cpo = s:cpo_save
405
406unlet s:cpo_save s:line1