blob: 358d3282976417906b8d9e126b7538475a96e2df [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 Moolenaar3a429ef2017-06-11 17:10:32 +02004" Last change: 2017 Jun 11
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 Moolenaar071d4272004-06-13 20:20:40 +000069 call SetFileTypeSH(s:line1) " defined in filetype.vim
70
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 Moolenaar3fdfa4a2004-10-07 21:02:47 +000074 call SetFileTypeShell(g:filetype_csh)
Bram Moolenaar071d4272004-06-13 20:20:40 +000075 else
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +000076 call 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 Moolenaar3fdfa4a2004-10-07 21:02:47 +000081 call 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 Moolenaarf4630b62005-05-20 21:31:17 +0000103 " Lua
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200104 elseif s:name =~# 'lua'
Bram Moolenaarf4630b62005-05-20 21:31:17 +0000105 set ft=lua
106
Bram Moolenaar3b72f1d2010-07-29 23:12:43 +0200107 " Perl 6
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200108 elseif s:name =~# 'perl6'
Bram Moolenaar3b72f1d2010-07-29 23:12:43 +0200109 set ft=perl6
110
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111 " Perl
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200112 elseif s:name =~# 'perl'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113 set ft=perl
114
115 " PHP
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200116 elseif s:name =~# 'php'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117 set ft=php
118
119 " Python
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200120 elseif s:name =~# 'python'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121 set ft=python
122
123 " Groovy
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200124 elseif s:name =~# '^groovy\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125 set ft=groovy
126
127 " Ruby
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200128 elseif s:name =~# 'ruby'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 set ft=ruby
130
Bram Moolenaar214641f2017-03-05 17:04:09 +0100131 " JavaScript
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200132 elseif s:name =~# 'node\(js\)\=\>' || s:name =~# 'rhino\>'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100133 set ft=javascript
134
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135 " BC calculator
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200136 elseif s:name =~# '^bc\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137 set ft=bc
138
139 " sed
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200140 elseif s:name =~# 'sed\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141 set ft=sed
142
143 " OCaml-scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200144 elseif s:name =~# 'ocaml'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 set ft=ocaml
146
147 " Awk scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200148 elseif s:name =~# 'awk\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149 set ft=awk
150
151 " Website MetaLanguage
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200152 elseif s:name =~# 'wml'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153 set ft=wml
154
155 " Scheme scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200156 elseif s:name =~# 'scheme'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157 set ft=scheme
158
Bram Moolenaaraf289d32005-10-12 21:01:44 +0000159 " CFEngine scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200160 elseif s:name =~# 'cfengine'
Bram Moolenaaraf289d32005-10-12 21:01:44 +0000161 set ft=cfengine
162
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200163 " Erlang scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200164 elseif s:name =~# 'escript'
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200165 set ft=erlang
166
Bram Moolenaar214641f2017-03-05 17:04:09 +0100167 " Haskell
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200168 elseif s:name =~# 'haskell'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100169 set ft=haskell
170
171 " Scala
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200172 elseif s:name =~# 'scala\>'
Bram Moolenaar214641f2017-03-05 17:04:09 +0100173 set ft=scala
174
Bram Moolenaar071d4272004-06-13 20:20:40 +0000175 endif
176 unlet s:name
177
178else
179 " File does not start with "#!".
180
181 let s:line2 = getline(2)
182 let s:line3 = getline(3)
183 let s:line4 = getline(4)
184 let s:line5 = getline(5)
185
186 " Bourne-like shell scripts: sh ksh bash bash2
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200187 if s:line1 =~# '^:$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000188 call SetFileTypeSH(s:line1) " defined in filetype.vim
189
190 " Z shell scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200191 elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
192 \ "\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 +0000193 set ft=zsh
194
195 " ELM Mail files
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200196 elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197 set ft=mail
198
199 " Mason
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200200 elseif s:line1 =~# '^<[%&].*>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201 set ft=mason
202
203 " Vim scripts (must have '" vim' as the first line to trigger this)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200204 elseif s:line1 =~# '^" *[vV]im$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205 set ft=vim
206
207 " MOO
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200208 elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209 set ft=moo
210
211 " Diff file:
212 " - "diff" in first line (context diff)
213 " - "Only in " in first line
214 " - "--- " in first line and "+++ " in second line (unified diff).
215 " - "*** " in first line and "--- " in second line (context diff).
216 " - "# It was generated by makepatch " in the second line (makepatch diff).
217 " - "Index: <filename>" in the first line (CVS file)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000218 " - "=== ", line of "=", "---", "+++ " (SVK diff)
Bram Moolenaard2cec5b2006-03-28 21:08:56 +0000219 " - "=== ", "--- ", "+++ " (bzr diff, common case)
220 " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
Bram Moolenaard09acef2012-09-21 14:54:30 +0200221 " - "# HG changeset patch" in first line (Mercurial export format)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200222 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\)'
223 \ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
224 \ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
225 \ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
226 \ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
227 \ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228 set ft=diff
229
230 " PostScript Files (must have %!PS as the first line, like a2ps output)
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200231 elseif s:line1 =~# '^%![ \t]*PS'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232 set ft=postscr
233
234 " M4 scripts: Guess there is a line that starts with "dnl".
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200235 elseif s:line1 =~# '^\s*dnl\>'
236 \ || s:line2 =~# '^\s*dnl\>'
237 \ || s:line3 =~# '^\s*dnl\>'
238 \ || s:line4 =~# '^\s*dnl\>'
239 \ || s:line5 =~# '^\s*dnl\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240 set ft=m4
241
242 " AmigaDos scripts
243 elseif $TERM == "amiga"
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200244 \ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245 set ft=amiga
246
247 " SiCAD scripts (must have procn or procd as the first line to trigger this)
248 elseif s:line1 =~? '^ *proc[nd] *$'
249 set ft=sicad
250
251 " Purify log files start with "**** Purify"
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200252 elseif s:line1 =~# '^\*\*\*\* Purify'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253 set ft=purifylog
254
255 " XML
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200256 elseif s:line1 =~# '<?\s*xml.*?>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257 set ft=xml
258
259 " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200260 elseif s:line1 =~# '\<DTD\s\+XHTML\s'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 set ft=xhtml
262
Bram Moolenaar12b87e52008-08-25 03:04:18 +0000263 " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
Bram Moolenaar26852122016-05-24 20:02:38 +0200264 " Avoid "doctype html", used by slim.
265 elseif s:line1 =~? '<!DOCTYPE\s\+html\>'
Bram Moolenaar12b87e52008-08-25 03:04:18 +0000266 set ft=html
267
Bram Moolenaaraba88572008-06-25 20:13:35 +0000268 " PDF
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200269 elseif s:line1 =~# '^%PDF-'
Bram Moolenaaraba88572008-06-25 20:13:35 +0000270 set ft=pdf
271
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272 " XXD output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200273 elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274 set ft=xxd
275
276 " RCS/CVS log output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200277 elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278 set ft=rcslog
279
280 " CVS commit
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200281 elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282 set ft=cvs
283
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000284 " Prescribe
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200285 elseif s:line1 =~# '^!R!'
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000286 set ft=prescribe
287
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288 " Send-pr
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200289 elseif s:line1 =~# '^SEND-PR:'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290 set ft=sendpr
291
292 " SNNS files
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200293 elseif s:line1 =~# '^SNNS network definition file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000294 set ft=snnsnet
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200295 elseif s:line1 =~# '^SNNS pattern definition file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296 set ft=snnspat
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200297 elseif s:line1 =~# '^SNNS result file'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000298 set ft=snnsres
299
300 " Virata
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200301 elseif s:line1 =~# '^%.\{-}[Vv]irata'
302 \ || s:line2 =~# '^%.\{-}[Vv]irata'
303 \ || s:line3 =~# '^%.\{-}[Vv]irata'
304 \ || s:line4 =~# '^%.\{-}[Vv]irata'
305 \ || s:line5 =~# '^%.\{-}[Vv]irata'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000306 set ft=virata
307
308 " Strace
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200309 elseif s:line1 =~# '^\(\[pid \d\+\] \)\=[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000310 set ft=strace
311
312 " VSE JCL
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200313 elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314 set ft=vsejcl
315
316 " TAK and SINDA
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200317 elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000318 set ft=takout
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200319 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 +0000320 set ft=sindaout
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200321 elseif getline(6) =~# 'Run Date: '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322 set ft=takcmp
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200323 elseif getline(9) =~# 'Node File 1'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000324 set ft=sindacmp
325
326 " DNS zone files
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200327 elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA'
Bram Moolenaarbd404142006-03-25 22:05:04 +0000328 set ft=bindzone
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329
330 " BAAN
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200331 elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
332 \ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
Bram Moolenaar071d4272004-06-13 20:20:40 +0000333 set ft=baan
334
335 " Valgrind
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200336 elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000337 set ft=valgrind
338
Bram Moolenaar34401cc2014-08-29 15:12:19 +0200339 " Go docs
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200340 elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
Bram Moolenaar34401cc2014-08-29 15:12:19 +0200341 set ft=godoc
342
Bram Moolenaar071d4272004-06-13 20:20:40 +0000343 " Renderman Interface Bytestream
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200344 elseif s:line1 =~# '^##RenderMan'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345 set ft=rib
346
347 " Scheme scripts
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200348 elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000349 set ft=scheme
350
Bram Moolenaaraba88572008-06-25 20:13:35 +0000351 " Git output
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200352 elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
Bram Moolenaaraba88572008-06-25 20:13:35 +0000353 set ft=git
354
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200355 " Gprof (gnu profiler)
356 elseif s:line1 == 'Flat profile:'
357 \ && s:line2 == ''
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200358 \ && s:line3 =~# '^Each sample counts as .* seconds.$'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200359 set ft=gprof
360
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200361 " Erlang terms
362 " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
363 elseif s:line1 =~? '-\*-.*erlang.*-\*-'
364 set ft=erlang
365
Bram Moolenaar071d4272004-06-13 20:20:40 +0000366 " CVS diff
367 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100368 let s:lnum = 1
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200369 while getline(s:lnum) =~# "^? " && s:lnum < line("$")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100370 let s:lnum += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000371 endwhile
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200372 if getline(s:lnum) =~# '^Index:\s\+\f\+$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373 set ft=diff
374
375 " locale input files: Formal Definitions of Cultural Conventions
376 " filename must be like en_US, fr_FR@euro or en_US.UTF-8
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200377 elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100378 let s:lnum = 1
379 while s:lnum < 100 && s:lnum < line("$")
Bram Moolenaar3a429ef2017-06-11 17:10:32 +0200380 if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000381 setf fdcc
382 break
383 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100384 let s:lnum += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000385 endwhile
386 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100387 unlet s:lnum
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388
389 endif
390
391 unlet s:line2 s:line3 s:line4 s:line5
392
393endif
394
395" Restore 'cpoptions'
396let &cpo = s:cpo_save
397
398unlet s:cpo_save s:line1