1071d4279SBram Moolenaar" Vim support file to detect file types in scripts 2071d4279SBram Moolenaar" 3071d4279SBram Moolenaar" Maintainer: Bram Moolenaar <[email protected]> 4*3a429efbSBram Moolenaar" Last change: 2017 Jun 11 5071d4279SBram Moolenaar 6071d4279SBram Moolenaar" This file is called by an autocommand for every file that has just been 7071d4279SBram Moolenaar" loaded into a buffer. It checks if the type of file can be recognized by 8071d4279SBram Moolenaar" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim. 9*3a429efbSBram Moolenaar" 10*3a429efbSBram Moolenaar" Note that the pattern matches are done with =~# to avoid the value of the 11*3a429efbSBram Moolenaar" 'ignorecase' option making a difference. Where case is to be ignored use 12*3a429efbSBram Moolenaar" =~? instead. Do not use =~ anywhere. 13071d4279SBram Moolenaar 14071d4279SBram Moolenaar 15071d4279SBram Moolenaar" Only do the rest when the FileType autocommand has not been triggered yet. 16071d4279SBram Moolenaarif did_filetype() 17071d4279SBram Moolenaar finish 18071d4279SBram Moolenaarendif 19071d4279SBram Moolenaar 20071d4279SBram Moolenaar" Load the user defined scripts file first 21071d4279SBram Moolenaar" Only do this when the FileType autocommand has not been triggered yet 22f4630b60SBram Moolenaarif exists("myscriptsfile") && filereadable(expand(myscriptsfile)) 23071d4279SBram Moolenaar execute "source " . myscriptsfile 24071d4279SBram Moolenaar if did_filetype() 25071d4279SBram Moolenaar finish 26071d4279SBram Moolenaar endif 27071d4279SBram Moolenaarendif 28071d4279SBram Moolenaar 29071d4279SBram Moolenaar" Line continuation is used here, remove 'C' from 'cpoptions' 30071d4279SBram Moolenaarlet s:cpo_save = &cpo 31071d4279SBram Moolenaarset cpo&vim 32071d4279SBram Moolenaar 33071d4279SBram Moolenaarlet s:line1 = getline(1) 34071d4279SBram Moolenaar 35*3a429efbSBram Moolenaarif s:line1 =~# "^#!" 36071d4279SBram Moolenaar " A script that starts with "#!". 37071d4279SBram Moolenaar 38071d4279SBram Moolenaar " Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into 39071d4279SBram Moolenaar " "#!/usr/bin/bash" to make matching easier. 40*3a429efbSBram Moolenaar if s:line1 =~# '^#!\s*\S*\<env\s' 41071d4279SBram Moolenaar let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g') 42071d4279SBram Moolenaar let s:line1 = substitute(s:line1, '\<env\s\+', '', '') 43071d4279SBram Moolenaar endif 44071d4279SBram Moolenaar 45071d4279SBram Moolenaar " Get the program name. 46071d4279SBram Moolenaar " Only accept spaces in PC style paths: "#!c:/program files/perl [args]". 47f4630b60SBram Moolenaar " If the word env is used, use the first word after the space: 48f4630b60SBram Moolenaar " "#!/usr/bin/env perl [path/args]" 49071d4279SBram Moolenaar " If there is no path use the first word: "#!perl [path/args]". 50071d4279SBram Moolenaar " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]". 51*3a429efbSBram Moolenaar if s:line1 =~# '^#!\s*\a:[/\\]' 52071d4279SBram Moolenaar let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '') 53*3a429efbSBram Moolenaar elseif s:line1 =~# '^#!.*\<env\>' 54f4630b60SBram Moolenaar let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '') 55*3a429efbSBram Moolenaar elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)' 56071d4279SBram Moolenaar let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '') 57071d4279SBram Moolenaar else 58071d4279SBram Moolenaar let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '') 59071d4279SBram Moolenaar endif 60071d4279SBram Moolenaar 61a8c4d563SBram Moolenaar " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the 62a8c4d563SBram Moolenaar " third line. Suggested by Steven Atkinson. 63*3a429efbSBram Moolenaar if getline(3) =~# '^exec wish' 64a8c4d563SBram Moolenaar let s:name = 'wish' 65a8c4d563SBram Moolenaar endif 66a8c4d563SBram Moolenaar 67d4755bb0SBram Moolenaar " Bourne-like shell scripts: bash bash2 ksh ksh93 sh 68*3a429efbSBram Moolenaar if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>' 69071d4279SBram Moolenaar call SetFileTypeSH(s:line1) " defined in filetype.vim 70071d4279SBram Moolenaar 71071d4279SBram Moolenaar " csh scripts 72*3a429efbSBram Moolenaar elseif s:name =~# '^csh\>' 73071d4279SBram Moolenaar if exists("g:filetype_csh") 743fdfa4a9SBram Moolenaar call SetFileTypeShell(g:filetype_csh) 75071d4279SBram Moolenaar else 763fdfa4a9SBram Moolenaar call SetFileTypeShell("csh") 77071d4279SBram Moolenaar endif 78071d4279SBram Moolenaar 79071d4279SBram Moolenaar " tcsh scripts 80*3a429efbSBram Moolenaar elseif s:name =~# '^tcsh\>' 813fdfa4a9SBram Moolenaar call SetFileTypeShell("tcsh") 82071d4279SBram Moolenaar 83071d4279SBram Moolenaar " Z shell scripts 84*3a429efbSBram Moolenaar elseif s:name =~# '^zsh\>' 85071d4279SBram Moolenaar set ft=zsh 86071d4279SBram Moolenaar 87071d4279SBram Moolenaar " TCL scripts 88*3a429efbSBram Moolenaar elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>' 89071d4279SBram Moolenaar set ft=tcl 90071d4279SBram Moolenaar 91071d4279SBram Moolenaar " Expect scripts 92*3a429efbSBram Moolenaar elseif s:name =~# '^expect\>' 93071d4279SBram Moolenaar set ft=expect 94071d4279SBram Moolenaar 95071d4279SBram Moolenaar " Gnuplot scripts 96*3a429efbSBram Moolenaar elseif s:name =~# '^gnuplot\>' 97071d4279SBram Moolenaar set ft=gnuplot 98071d4279SBram Moolenaar 99071d4279SBram Moolenaar " Makefiles 100*3a429efbSBram Moolenaar elseif s:name =~# 'make\>' 101071d4279SBram Moolenaar set ft=make 102071d4279SBram Moolenaar 103f4630b60SBram Moolenaar " Lua 104*3a429efbSBram Moolenaar elseif s:name =~# 'lua' 105f4630b60SBram Moolenaar set ft=lua 106f4630b60SBram Moolenaar 1073b72f1d2SBram Moolenaar " Perl 6 108*3a429efbSBram Moolenaar elseif s:name =~# 'perl6' 1093b72f1d2SBram Moolenaar set ft=perl6 1103b72f1d2SBram Moolenaar 111071d4279SBram Moolenaar " Perl 112*3a429efbSBram Moolenaar elseif s:name =~# 'perl' 113071d4279SBram Moolenaar set ft=perl 114071d4279SBram Moolenaar 115071d4279SBram Moolenaar " PHP 116*3a429efbSBram Moolenaar elseif s:name =~# 'php' 117071d4279SBram Moolenaar set ft=php 118071d4279SBram Moolenaar 119071d4279SBram Moolenaar " Python 120*3a429efbSBram Moolenaar elseif s:name =~# 'python' 121071d4279SBram Moolenaar set ft=python 122071d4279SBram Moolenaar 123071d4279SBram Moolenaar " Groovy 124*3a429efbSBram Moolenaar elseif s:name =~# '^groovy\>' 125071d4279SBram Moolenaar set ft=groovy 126071d4279SBram Moolenaar 127071d4279SBram Moolenaar " Ruby 128*3a429efbSBram Moolenaar elseif s:name =~# 'ruby' 129071d4279SBram Moolenaar set ft=ruby 130071d4279SBram Moolenaar 131214641f7SBram Moolenaar " JavaScript 132*3a429efbSBram Moolenaar elseif s:name =~# 'node\(js\)\=\>' || s:name =~# 'rhino\>' 133214641f7SBram Moolenaar set ft=javascript 134214641f7SBram Moolenaar 135071d4279SBram Moolenaar " BC calculator 136*3a429efbSBram Moolenaar elseif s:name =~# '^bc\>' 137071d4279SBram Moolenaar set ft=bc 138071d4279SBram Moolenaar 139071d4279SBram Moolenaar " sed 140*3a429efbSBram Moolenaar elseif s:name =~# 'sed\>' 141071d4279SBram Moolenaar set ft=sed 142071d4279SBram Moolenaar 143071d4279SBram Moolenaar " OCaml-scripts 144*3a429efbSBram Moolenaar elseif s:name =~# 'ocaml' 145071d4279SBram Moolenaar set ft=ocaml 146071d4279SBram Moolenaar 147071d4279SBram Moolenaar " Awk scripts 148*3a429efbSBram Moolenaar elseif s:name =~# 'awk\>' 149071d4279SBram Moolenaar set ft=awk 150071d4279SBram Moolenaar 151071d4279SBram Moolenaar " Website MetaLanguage 152*3a429efbSBram Moolenaar elseif s:name =~# 'wml' 153071d4279SBram Moolenaar set ft=wml 154071d4279SBram Moolenaar 155071d4279SBram Moolenaar " Scheme scripts 156*3a429efbSBram Moolenaar elseif s:name =~# 'scheme' 157071d4279SBram Moolenaar set ft=scheme 158071d4279SBram Moolenaar 159af289d33SBram Moolenaar " CFEngine scripts 160*3a429efbSBram Moolenaar elseif s:name =~# 'cfengine' 161af289d33SBram Moolenaar set ft=cfengine 162af289d33SBram Moolenaar 163203d04d7SBram Moolenaar " Erlang scripts 164*3a429efbSBram Moolenaar elseif s:name =~# 'escript' 165203d04d7SBram Moolenaar set ft=erlang 166203d04d7SBram Moolenaar 167214641f7SBram Moolenaar " Haskell 168*3a429efbSBram Moolenaar elseif s:name =~# 'haskell' 169214641f7SBram Moolenaar set ft=haskell 170214641f7SBram Moolenaar 171214641f7SBram Moolenaar " Scala 172*3a429efbSBram Moolenaar elseif s:name =~# 'scala\>' 173214641f7SBram Moolenaar set ft=scala 174214641f7SBram Moolenaar 175071d4279SBram Moolenaar endif 176071d4279SBram Moolenaar unlet s:name 177071d4279SBram Moolenaar 178071d4279SBram Moolenaarelse 179071d4279SBram Moolenaar " File does not start with "#!". 180071d4279SBram Moolenaar 181071d4279SBram Moolenaar let s:line2 = getline(2) 182071d4279SBram Moolenaar let s:line3 = getline(3) 183071d4279SBram Moolenaar let s:line4 = getline(4) 184071d4279SBram Moolenaar let s:line5 = getline(5) 185071d4279SBram Moolenaar 186071d4279SBram Moolenaar " Bourne-like shell scripts: sh ksh bash bash2 187*3a429efbSBram Moolenaar if s:line1 =~# '^:$' 188071d4279SBram Moolenaar call SetFileTypeSH(s:line1) " defined in filetype.vim 189071d4279SBram Moolenaar 190071d4279SBram Moolenaar " Z shell scripts 191*3a429efbSBram Moolenaar elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' || 192*3a429efbSBram Moolenaar \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>' 193071d4279SBram Moolenaar set ft=zsh 194071d4279SBram Moolenaar 195071d4279SBram Moolenaar " ELM Mail files 196*3a429efbSBram Moolenaar elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$' 197071d4279SBram Moolenaar set ft=mail 198071d4279SBram Moolenaar 199071d4279SBram Moolenaar " Mason 200*3a429efbSBram Moolenaar elseif s:line1 =~# '^<[%&].*>' 201071d4279SBram Moolenaar set ft=mason 202071d4279SBram Moolenaar 203071d4279SBram Moolenaar " Vim scripts (must have '" vim' as the first line to trigger this) 204*3a429efbSBram Moolenaar elseif s:line1 =~# '^" *[vV]im$' 205071d4279SBram Moolenaar set ft=vim 206071d4279SBram Moolenaar 207071d4279SBram Moolenaar " MOO 208*3a429efbSBram Moolenaar elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$' 209071d4279SBram Moolenaar set ft=moo 210071d4279SBram Moolenaar 211071d4279SBram Moolenaar " Diff file: 212071d4279SBram Moolenaar " - "diff" in first line (context diff) 213071d4279SBram Moolenaar " - "Only in " in first line 214071d4279SBram Moolenaar " - "--- " in first line and "+++ " in second line (unified diff). 215071d4279SBram Moolenaar " - "*** " in first line and "--- " in second line (context diff). 216071d4279SBram Moolenaar " - "# It was generated by makepatch " in the second line (makepatch diff). 217071d4279SBram Moolenaar " - "Index: <filename>" in the first line (CVS file) 218899dddf8SBram Moolenaar " - "=== ", line of "=", "---", "+++ " (SVK diff) 219d2cec5b0SBram Moolenaar " - "=== ", "--- ", "+++ " (bzr diff, common case) 220d2cec5b0SBram Moolenaar " - "=== (removed|added|renamed|modified)" (bzr diff, alternative) 221d09acef4SBram Moolenaar " - "# HG changeset patch" in first line (Mercurial export format) 222*3a429efbSBram Moolenaar 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*3a429efbSBram Moolenaar \ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ') 224*3a429efbSBram Moolenaar \ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ') 225*3a429efbSBram Moolenaar \ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ') 226*3a429efbSBram Moolenaar \ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ '))) 227*3a429efbSBram Moolenaar \ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)') 228071d4279SBram Moolenaar set ft=diff 229071d4279SBram Moolenaar 230071d4279SBram Moolenaar " PostScript Files (must have %!PS as the first line, like a2ps output) 231*3a429efbSBram Moolenaar elseif s:line1 =~# '^%![ \t]*PS' 232071d4279SBram Moolenaar set ft=postscr 233071d4279SBram Moolenaar 234071d4279SBram Moolenaar " M4 scripts: Guess there is a line that starts with "dnl". 235*3a429efbSBram Moolenaar elseif s:line1 =~# '^\s*dnl\>' 236*3a429efbSBram Moolenaar \ || s:line2 =~# '^\s*dnl\>' 237*3a429efbSBram Moolenaar \ || s:line3 =~# '^\s*dnl\>' 238*3a429efbSBram Moolenaar \ || s:line4 =~# '^\s*dnl\>' 239*3a429efbSBram Moolenaar \ || s:line5 =~# '^\s*dnl\>' 240071d4279SBram Moolenaar set ft=m4 241071d4279SBram Moolenaar 242071d4279SBram Moolenaar " AmigaDos scripts 243071d4279SBram Moolenaar elseif $TERM == "amiga" 244*3a429efbSBram Moolenaar \ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra') 245071d4279SBram Moolenaar set ft=amiga 246071d4279SBram Moolenaar 247071d4279SBram Moolenaar " SiCAD scripts (must have procn or procd as the first line to trigger this) 248071d4279SBram Moolenaar elseif s:line1 =~? '^ *proc[nd] *$' 249071d4279SBram Moolenaar set ft=sicad 250071d4279SBram Moolenaar 251071d4279SBram Moolenaar " Purify log files start with "**** Purify" 252*3a429efbSBram Moolenaar elseif s:line1 =~# '^\*\*\*\* Purify' 253071d4279SBram Moolenaar set ft=purifylog 254071d4279SBram Moolenaar 255071d4279SBram Moolenaar " XML 256*3a429efbSBram Moolenaar elseif s:line1 =~# '<?\s*xml.*?>' 257071d4279SBram Moolenaar set ft=xml 258071d4279SBram Moolenaar 259071d4279SBram Moolenaar " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN") 260*3a429efbSBram Moolenaar elseif s:line1 =~# '\<DTD\s\+XHTML\s' 261071d4279SBram Moolenaar set ft=xhtml 262071d4279SBram Moolenaar 26312b87e55SBram Moolenaar " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN") 26426852128SBram Moolenaar " Avoid "doctype html", used by slim. 26526852128SBram Moolenaar elseif s:line1 =~? '<!DOCTYPE\s\+html\>' 26612b87e55SBram Moolenaar set ft=html 26712b87e55SBram Moolenaar 268aba8857aSBram Moolenaar " PDF 269*3a429efbSBram Moolenaar elseif s:line1 =~# '^%PDF-' 270aba8857aSBram Moolenaar set ft=pdf 271aba8857aSBram Moolenaar 272071d4279SBram Moolenaar " XXD output 273*3a429efbSBram Moolenaar elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} ' 274071d4279SBram Moolenaar set ft=xxd 275071d4279SBram Moolenaar 276071d4279SBram Moolenaar " RCS/CVS log output 277*3a429efbSBram Moolenaar elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:' 278071d4279SBram Moolenaar set ft=rcslog 279071d4279SBram Moolenaar 280071d4279SBram Moolenaar " CVS commit 281*3a429efbSBram Moolenaar elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: ' 282071d4279SBram Moolenaar set ft=cvs 283071d4279SBram Moolenaar 28419a09a18SBram Moolenaar " Prescribe 285*3a429efbSBram Moolenaar elseif s:line1 =~# '^!R!' 28619a09a18SBram Moolenaar set ft=prescribe 28719a09a18SBram Moolenaar 288071d4279SBram Moolenaar " Send-pr 289*3a429efbSBram Moolenaar elseif s:line1 =~# '^SEND-PR:' 290071d4279SBram Moolenaar set ft=sendpr 291071d4279SBram Moolenaar 292071d4279SBram Moolenaar " SNNS files 293*3a429efbSBram Moolenaar elseif s:line1 =~# '^SNNS network definition file' 294071d4279SBram Moolenaar set ft=snnsnet 295*3a429efbSBram Moolenaar elseif s:line1 =~# '^SNNS pattern definition file' 296071d4279SBram Moolenaar set ft=snnspat 297*3a429efbSBram Moolenaar elseif s:line1 =~# '^SNNS result file' 298071d4279SBram Moolenaar set ft=snnsres 299071d4279SBram Moolenaar 300071d4279SBram Moolenaar " Virata 301*3a429efbSBram Moolenaar elseif s:line1 =~# '^%.\{-}[Vv]irata' 302*3a429efbSBram Moolenaar \ || s:line2 =~# '^%.\{-}[Vv]irata' 303*3a429efbSBram Moolenaar \ || s:line3 =~# '^%.\{-}[Vv]irata' 304*3a429efbSBram Moolenaar \ || s:line4 =~# '^%.\{-}[Vv]irata' 305*3a429efbSBram Moolenaar \ || s:line5 =~# '^%.\{-}[Vv]irata' 306071d4279SBram Moolenaar set ft=virata 307071d4279SBram Moolenaar 308071d4279SBram Moolenaar " Strace 309*3a429efbSBram Moolenaar elseif s:line1 =~# '^\(\[pid \d\+\] \)\=[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main' 310071d4279SBram Moolenaar set ft=strace 311071d4279SBram Moolenaar 312071d4279SBram Moolenaar " VSE JCL 313*3a429efbSBram Moolenaar elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>' 314071d4279SBram Moolenaar set ft=vsejcl 315071d4279SBram Moolenaar 316071d4279SBram Moolenaar " TAK and SINDA 317*3a429efbSBram Moolenaar elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000' 318071d4279SBram Moolenaar set ft=takout 319*3a429efbSBram Moolenaar elseif s:line3 =~# 'S Y S T E M S I M P R O V E D ' 320071d4279SBram Moolenaar set ft=sindaout 321*3a429efbSBram Moolenaar elseif getline(6) =~# 'Run Date: ' 322071d4279SBram Moolenaar set ft=takcmp 323*3a429efbSBram Moolenaar elseif getline(9) =~# 'Node File 1' 324071d4279SBram Moolenaar set ft=sindacmp 325071d4279SBram Moolenaar 326071d4279SBram Moolenaar " DNS zone files 327*3a429efbSBram Moolenaar elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA' 328bd404149SBram Moolenaar set ft=bindzone 329071d4279SBram Moolenaar 330071d4279SBram Moolenaar " BAAN 331*3a429efbSBram Moolenaar elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC ' 332*3a429efbSBram Moolenaar \ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC ' 333071d4279SBram Moolenaar set ft=baan 334071d4279SBram Moolenaar 335071d4279SBram Moolenaar " Valgrind 336*3a429efbSBram Moolenaar elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind' 337071d4279SBram Moolenaar set ft=valgrind 338071d4279SBram Moolenaar 33934401ccaSBram Moolenaar " Go docs 340*3a429efbSBram Moolenaar elseif s:line1 =~# '^PACKAGE DOCUMENTATION$' 34134401ccaSBram Moolenaar set ft=godoc 34234401ccaSBram Moolenaar 343071d4279SBram Moolenaar " Renderman Interface Bytestream 344*3a429efbSBram Moolenaar elseif s:line1 =~# '^##RenderMan' 345071d4279SBram Moolenaar set ft=rib 346071d4279SBram Moolenaar 347071d4279SBram Moolenaar " Scheme scripts 348*3a429efbSBram Moolenaar elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme' 349071d4279SBram Moolenaar set ft=scheme 350071d4279SBram Moolenaar 351aba8857aSBram Moolenaar " Git output 352*3a429efbSBram Moolenaar elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$' 353aba8857aSBram Moolenaar set ft=git 354aba8857aSBram Moolenaar 355543b7ef7SBram Moolenaar " Gprof (gnu profiler) 356543b7ef7SBram Moolenaar elseif s:line1 == 'Flat profile:' 357543b7ef7SBram Moolenaar \ && s:line2 == '' 358*3a429efbSBram Moolenaar \ && s:line3 =~# '^Each sample counts as .* seconds.$' 359543b7ef7SBram Moolenaar set ft=gprof 360543b7ef7SBram Moolenaar 361203d04d7SBram Moolenaar " Erlang terms 362203d04d7SBram Moolenaar " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes) 363203d04d7SBram Moolenaar elseif s:line1 =~? '-\*-.*erlang.*-\*-' 364203d04d7SBram Moolenaar set ft=erlang 365203d04d7SBram Moolenaar 366071d4279SBram Moolenaar " CVS diff 367071d4279SBram Moolenaar else 3685c73622aSBram Moolenaar let s:lnum = 1 369*3a429efbSBram Moolenaar while getline(s:lnum) =~# "^? " && s:lnum < line("$") 3705c73622aSBram Moolenaar let s:lnum += 1 371071d4279SBram Moolenaar endwhile 372*3a429efbSBram Moolenaar if getline(s:lnum) =~# '^Index:\s\+\f\+$' 373071d4279SBram Moolenaar set ft=diff 374071d4279SBram Moolenaar 375071d4279SBram Moolenaar " locale input files: Formal Definitions of Cultural Conventions 376071d4279SBram Moolenaar " filename must be like en_US, fr_FR@euro or en_US.UTF-8 377*3a429efbSBram Moolenaar elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_' 3785c73622aSBram Moolenaar let s:lnum = 1 3795c73622aSBram Moolenaar while s:lnum < 100 && s:lnum < line("$") 380*3a429efbSBram Moolenaar if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$' 381071d4279SBram Moolenaar setf fdcc 382071d4279SBram Moolenaar break 383071d4279SBram Moolenaar endif 3845c73622aSBram Moolenaar let s:lnum += 1 385071d4279SBram Moolenaar endwhile 386071d4279SBram Moolenaar endif 3875c73622aSBram Moolenaar unlet s:lnum 388071d4279SBram Moolenaar 389071d4279SBram Moolenaar endif 390071d4279SBram Moolenaar 391071d4279SBram Moolenaar unlet s:line2 s:line3 s:line4 s:line5 392071d4279SBram Moolenaar 393071d4279SBram Moolenaarendif 394071d4279SBram Moolenaar 395071d4279SBram Moolenaar" Restore 'cpoptions' 396071d4279SBram Moolenaarlet &cpo = s:cpo_save 397071d4279SBram Moolenaar 398071d4279SBram Moolenaarunlet s:cpo_save s:line1 399