1071d4279SBram Moolenaar" Vim support file to detect file types in scripts 2071d4279SBram Moolenaar" 3071d4279SBram Moolenaar" Maintainer: Bram Moolenaar <[email protected]> 4*214641f7SBram Moolenaar" Last change: 2017 Mar 04 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. 9071d4279SBram Moolenaar 10071d4279SBram Moolenaar 11071d4279SBram Moolenaar" Only do the rest when the FileType autocommand has not been triggered yet. 12071d4279SBram Moolenaarif did_filetype() 13071d4279SBram Moolenaar finish 14071d4279SBram Moolenaarendif 15071d4279SBram Moolenaar 16071d4279SBram Moolenaar" Load the user defined scripts file first 17071d4279SBram Moolenaar" Only do this when the FileType autocommand has not been triggered yet 18f4630b60SBram Moolenaarif exists("myscriptsfile") && filereadable(expand(myscriptsfile)) 19071d4279SBram Moolenaar execute "source " . myscriptsfile 20071d4279SBram Moolenaar if did_filetype() 21071d4279SBram Moolenaar finish 22071d4279SBram Moolenaar endif 23071d4279SBram Moolenaarendif 24071d4279SBram Moolenaar 25071d4279SBram Moolenaar" Line continuation is used here, remove 'C' from 'cpoptions' 26071d4279SBram Moolenaarlet s:cpo_save = &cpo 27071d4279SBram Moolenaarset cpo&vim 28071d4279SBram Moolenaar 29071d4279SBram Moolenaarlet s:line1 = getline(1) 30071d4279SBram Moolenaar 31071d4279SBram Moolenaarif s:line1 =~ "^#!" 32071d4279SBram Moolenaar " A script that starts with "#!". 33071d4279SBram Moolenaar 34071d4279SBram Moolenaar " Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into 35071d4279SBram Moolenaar " "#!/usr/bin/bash" to make matching easier. 36071d4279SBram Moolenaar if s:line1 =~ '^#!\s*\S*\<env\s' 37071d4279SBram Moolenaar let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g') 38071d4279SBram Moolenaar let s:line1 = substitute(s:line1, '\<env\s\+', '', '') 39071d4279SBram Moolenaar endif 40071d4279SBram Moolenaar 41071d4279SBram Moolenaar " Get the program name. 42071d4279SBram Moolenaar " Only accept spaces in PC style paths: "#!c:/program files/perl [args]". 43f4630b60SBram Moolenaar " If the word env is used, use the first word after the space: 44f4630b60SBram Moolenaar " "#!/usr/bin/env perl [path/args]" 45071d4279SBram Moolenaar " If there is no path use the first word: "#!perl [path/args]". 46071d4279SBram Moolenaar " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]". 47071d4279SBram Moolenaar if s:line1 =~ '^#!\s*\a:[/\\]' 48071d4279SBram Moolenaar let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '') 49f4630b60SBram Moolenaar elseif s:line1 =~ '^#!.*\<env\>' 50f4630b60SBram Moolenaar let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '') 51071d4279SBram Moolenaar elseif s:line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)' 52071d4279SBram Moolenaar let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '') 53071d4279SBram Moolenaar else 54071d4279SBram Moolenaar let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '') 55071d4279SBram Moolenaar endif 56071d4279SBram Moolenaar 57a8c4d563SBram Moolenaar " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the 58a8c4d563SBram Moolenaar " third line. Suggested by Steven Atkinson. 59a8c4d563SBram Moolenaar if getline(3) =~ '^exec wish' 60a8c4d563SBram Moolenaar let s:name = 'wish' 61a8c4d563SBram Moolenaar endif 62a8c4d563SBram Moolenaar 63d4755bb0SBram Moolenaar " Bourne-like shell scripts: bash bash2 ksh ksh93 sh 64d4755bb0SBram Moolenaar if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>' 65071d4279SBram Moolenaar call SetFileTypeSH(s:line1) " defined in filetype.vim 66071d4279SBram Moolenaar 67071d4279SBram Moolenaar " csh scripts 68071d4279SBram Moolenaar elseif s:name =~ '^csh\>' 69071d4279SBram Moolenaar if exists("g:filetype_csh") 703fdfa4a9SBram Moolenaar call SetFileTypeShell(g:filetype_csh) 71071d4279SBram Moolenaar else 723fdfa4a9SBram Moolenaar call SetFileTypeShell("csh") 73071d4279SBram Moolenaar endif 74071d4279SBram Moolenaar 75071d4279SBram Moolenaar " tcsh scripts 76071d4279SBram Moolenaar elseif s:name =~ '^tcsh\>' 773fdfa4a9SBram Moolenaar call SetFileTypeShell("tcsh") 78071d4279SBram Moolenaar 79071d4279SBram Moolenaar " Z shell scripts 80071d4279SBram Moolenaar elseif s:name =~ '^zsh\>' 81071d4279SBram Moolenaar set ft=zsh 82071d4279SBram Moolenaar 83071d4279SBram Moolenaar " TCL scripts 84071d4279SBram Moolenaar elseif s:name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>' 85071d4279SBram Moolenaar set ft=tcl 86071d4279SBram Moolenaar 87071d4279SBram Moolenaar " Expect scripts 88071d4279SBram Moolenaar elseif s:name =~ '^expect\>' 89071d4279SBram Moolenaar set ft=expect 90071d4279SBram Moolenaar 91071d4279SBram Moolenaar " Gnuplot scripts 92071d4279SBram Moolenaar elseif s:name =~ '^gnuplot\>' 93071d4279SBram Moolenaar set ft=gnuplot 94071d4279SBram Moolenaar 95071d4279SBram Moolenaar " Makefiles 96071d4279SBram Moolenaar elseif s:name =~ 'make\>' 97071d4279SBram Moolenaar set ft=make 98071d4279SBram Moolenaar 99f4630b60SBram Moolenaar " Lua 100f4630b60SBram Moolenaar elseif s:name =~ 'lua' 101f4630b60SBram Moolenaar set ft=lua 102f4630b60SBram Moolenaar 1033b72f1d2SBram Moolenaar " Perl 6 1043b72f1d2SBram Moolenaar elseif s:name =~ 'perl6' 1053b72f1d2SBram Moolenaar set ft=perl6 1063b72f1d2SBram Moolenaar 107071d4279SBram Moolenaar " Perl 108071d4279SBram Moolenaar elseif s:name =~ 'perl' 109071d4279SBram Moolenaar set ft=perl 110071d4279SBram Moolenaar 111071d4279SBram Moolenaar " PHP 112071d4279SBram Moolenaar elseif s:name =~ 'php' 113071d4279SBram Moolenaar set ft=php 114071d4279SBram Moolenaar 115071d4279SBram Moolenaar " Python 116071d4279SBram Moolenaar elseif s:name =~ 'python' 117071d4279SBram Moolenaar set ft=python 118071d4279SBram Moolenaar 119071d4279SBram Moolenaar " Groovy 120071d4279SBram Moolenaar elseif s:name =~ '^groovy\>' 121071d4279SBram Moolenaar set ft=groovy 122071d4279SBram Moolenaar 123071d4279SBram Moolenaar " Ruby 124071d4279SBram Moolenaar elseif s:name =~ 'ruby' 125071d4279SBram Moolenaar set ft=ruby 126071d4279SBram Moolenaar 127*214641f7SBram Moolenaar " JavaScript 128*214641f7SBram Moolenaar elseif s:name =~ 'node\(js\)\=\>' || s:name =~ 'rhino\>' 129*214641f7SBram Moolenaar set ft=javascript 130*214641f7SBram Moolenaar 131071d4279SBram Moolenaar " BC calculator 132071d4279SBram Moolenaar elseif s:name =~ '^bc\>' 133071d4279SBram Moolenaar set ft=bc 134071d4279SBram Moolenaar 135071d4279SBram Moolenaar " sed 136071d4279SBram Moolenaar elseif s:name =~ 'sed\>' 137071d4279SBram Moolenaar set ft=sed 138071d4279SBram Moolenaar 139071d4279SBram Moolenaar " OCaml-scripts 140071d4279SBram Moolenaar elseif s:name =~ 'ocaml' 141071d4279SBram Moolenaar set ft=ocaml 142071d4279SBram Moolenaar 143071d4279SBram Moolenaar " Awk scripts 144071d4279SBram Moolenaar elseif s:name =~ 'awk\>' 145071d4279SBram Moolenaar set ft=awk 146071d4279SBram Moolenaar 147071d4279SBram Moolenaar " Website MetaLanguage 148071d4279SBram Moolenaar elseif s:name =~ 'wml' 149071d4279SBram Moolenaar set ft=wml 150071d4279SBram Moolenaar 151071d4279SBram Moolenaar " Scheme scripts 152071d4279SBram Moolenaar elseif s:name =~ 'scheme' 153071d4279SBram Moolenaar set ft=scheme 154071d4279SBram Moolenaar 155af289d33SBram Moolenaar " CFEngine scripts 156af289d33SBram Moolenaar elseif s:name =~ 'cfengine' 157af289d33SBram Moolenaar set ft=cfengine 158af289d33SBram Moolenaar 159203d04d7SBram Moolenaar " Erlang scripts 160203d04d7SBram Moolenaar elseif s:name =~ 'escript' 161203d04d7SBram Moolenaar set ft=erlang 162203d04d7SBram Moolenaar 163*214641f7SBram Moolenaar " Haskell 164*214641f7SBram Moolenaar elseif s:name =~ 'haskell' 165*214641f7SBram Moolenaar set ft=haskell 166*214641f7SBram Moolenaar 167*214641f7SBram Moolenaar " Scala 168*214641f7SBram Moolenaar elseif s:name =~ 'scala\>' 169*214641f7SBram Moolenaar set ft=scala 170*214641f7SBram Moolenaar 171071d4279SBram Moolenaar endif 172071d4279SBram Moolenaar unlet s:name 173071d4279SBram Moolenaar 174071d4279SBram Moolenaarelse 175071d4279SBram Moolenaar " File does not start with "#!". 176071d4279SBram Moolenaar 177071d4279SBram Moolenaar let s:line2 = getline(2) 178071d4279SBram Moolenaar let s:line3 = getline(3) 179071d4279SBram Moolenaar let s:line4 = getline(4) 180071d4279SBram Moolenaar let s:line5 = getline(5) 181071d4279SBram Moolenaar 182071d4279SBram Moolenaar " Bourne-like shell scripts: sh ksh bash bash2 183071d4279SBram Moolenaar if s:line1 =~ '^:$' 184071d4279SBram Moolenaar call SetFileTypeSH(s:line1) " defined in filetype.vim 185071d4279SBram Moolenaar 186071d4279SBram Moolenaar " Z shell scripts 1874a74803eSBram Moolenaar elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>' || 1884a74803eSBram Moolenaar \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>' 189071d4279SBram Moolenaar set ft=zsh 190071d4279SBram Moolenaar 191071d4279SBram Moolenaar " ELM Mail files 192c236c16dSBram Moolenaar elseif s:line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$' 193071d4279SBram Moolenaar set ft=mail 194071d4279SBram Moolenaar 195071d4279SBram Moolenaar " Mason 196071d4279SBram Moolenaar elseif s:line1 =~ '^<[%&].*>' 197071d4279SBram Moolenaar set ft=mason 198071d4279SBram Moolenaar 199071d4279SBram Moolenaar " Vim scripts (must have '" vim' as the first line to trigger this) 200071d4279SBram Moolenaar elseif s:line1 =~ '^" *[vV]im$' 201071d4279SBram Moolenaar set ft=vim 202071d4279SBram Moolenaar 203071d4279SBram Moolenaar " MOO 204071d4279SBram Moolenaar elseif s:line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$' 205071d4279SBram Moolenaar set ft=moo 206071d4279SBram Moolenaar 207071d4279SBram Moolenaar " Diff file: 208071d4279SBram Moolenaar " - "diff" in first line (context diff) 209071d4279SBram Moolenaar " - "Only in " in first line 210071d4279SBram Moolenaar " - "--- " in first line and "+++ " in second line (unified diff). 211071d4279SBram Moolenaar " - "*** " in first line and "--- " in second line (context diff). 212071d4279SBram Moolenaar " - "# It was generated by makepatch " in the second line (makepatch diff). 213071d4279SBram Moolenaar " - "Index: <filename>" in the first line (CVS file) 214899dddf8SBram Moolenaar " - "=== ", line of "=", "---", "+++ " (SVK diff) 215d2cec5b0SBram Moolenaar " - "=== ", "--- ", "+++ " (bzr diff, common case) 216d2cec5b0SBram Moolenaar " - "=== (removed|added|renamed|modified)" (bzr diff, alternative) 217d09acef4SBram Moolenaar " - "# HG changeset patch" in first line (Mercurial export format) 218d09acef4SBram 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\)' 219071d4279SBram Moolenaar \ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ') 220bfd8fc05SBram Moolenaar \ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ') 221071d4279SBram Moolenaar \ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ') 222d2cec5b0SBram Moolenaar \ || (s:line1 =~ '^=== ' && ((s:line2 =~ '^=\{66\}' && s:line3 =~ '^--- ' && s:line4 =~ '^+++') || (s:line2 =~ '^--- ' && s:line3 =~ '^+++ '))) 223d2cec5b0SBram Moolenaar \ || (s:line1 =~ '^=== \(removed\|added\|renamed\|modified\)') 224071d4279SBram Moolenaar set ft=diff 225071d4279SBram Moolenaar 226071d4279SBram Moolenaar " PostScript Files (must have %!PS as the first line, like a2ps output) 227071d4279SBram Moolenaar elseif s:line1 =~ '^%![ \t]*PS' 228071d4279SBram Moolenaar set ft=postscr 229071d4279SBram Moolenaar 230071d4279SBram Moolenaar " M4 scripts: Guess there is a line that starts with "dnl". 231071d4279SBram Moolenaar elseif s:line1 =~ '^\s*dnl\>' 232071d4279SBram Moolenaar \ || s:line2 =~ '^\s*dnl\>' 233071d4279SBram Moolenaar \ || s:line3 =~ '^\s*dnl\>' 234071d4279SBram Moolenaar \ || s:line4 =~ '^\s*dnl\>' 235071d4279SBram Moolenaar \ || s:line5 =~ '^\s*dnl\>' 236071d4279SBram Moolenaar set ft=m4 237071d4279SBram Moolenaar 238071d4279SBram Moolenaar " AmigaDos scripts 239071d4279SBram Moolenaar elseif $TERM == "amiga" 240071d4279SBram Moolenaar \ && (s:line1 =~ "^;" || s:line1 =~ '^\.[bB][rR][aA]') 241071d4279SBram Moolenaar set ft=amiga 242071d4279SBram Moolenaar 243071d4279SBram Moolenaar " SiCAD scripts (must have procn or procd as the first line to trigger this) 244071d4279SBram Moolenaar elseif s:line1 =~? '^ *proc[nd] *$' 245071d4279SBram Moolenaar set ft=sicad 246071d4279SBram Moolenaar 247071d4279SBram Moolenaar " Purify log files start with "**** Purify" 248071d4279SBram Moolenaar elseif s:line1 =~ '^\*\*\*\* Purify' 249071d4279SBram Moolenaar set ft=purifylog 250071d4279SBram Moolenaar 251071d4279SBram Moolenaar " XML 252071d4279SBram Moolenaar elseif s:line1 =~ '<?\s*xml.*?>' 253071d4279SBram Moolenaar set ft=xml 254071d4279SBram Moolenaar 255071d4279SBram Moolenaar " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN") 256071d4279SBram Moolenaar elseif s:line1 =~ '\<DTD\s\+XHTML\s' 257071d4279SBram Moolenaar set ft=xhtml 258071d4279SBram Moolenaar 25912b87e55SBram Moolenaar " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN") 26026852128SBram Moolenaar " Avoid "doctype html", used by slim. 26126852128SBram Moolenaar elseif s:line1 =~? '<!DOCTYPE\s\+html\>' 26212b87e55SBram Moolenaar set ft=html 26312b87e55SBram Moolenaar 264aba8857aSBram Moolenaar " PDF 265aba8857aSBram Moolenaar elseif s:line1 =~ '^%PDF-' 266aba8857aSBram Moolenaar set ft=pdf 267aba8857aSBram Moolenaar 268071d4279SBram Moolenaar " XXD output 269071d4279SBram Moolenaar elseif s:line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} ' 270071d4279SBram Moolenaar set ft=xxd 271071d4279SBram Moolenaar 272071d4279SBram Moolenaar " RCS/CVS log output 273071d4279SBram Moolenaar elseif s:line1 =~ '^RCS file:' || s:line2 =~ '^RCS file:' 274071d4279SBram Moolenaar set ft=rcslog 275071d4279SBram Moolenaar 276071d4279SBram Moolenaar " CVS commit 277d4755bb0SBram Moolenaar elseif s:line2 =~ '^CVS:' || getline("$") =~ '^CVS: ' 278071d4279SBram Moolenaar set ft=cvs 279071d4279SBram Moolenaar 28019a09a18SBram Moolenaar " Prescribe 28119a09a18SBram Moolenaar elseif s:line1 =~ '^!R!' 28219a09a18SBram Moolenaar set ft=prescribe 28319a09a18SBram Moolenaar 284071d4279SBram Moolenaar " Send-pr 285071d4279SBram Moolenaar elseif s:line1 =~ '^SEND-PR:' 286071d4279SBram Moolenaar set ft=sendpr 287071d4279SBram Moolenaar 288071d4279SBram Moolenaar " SNNS files 289071d4279SBram Moolenaar elseif s:line1 =~ '^SNNS network definition file' 290071d4279SBram Moolenaar set ft=snnsnet 291071d4279SBram Moolenaar elseif s:line1 =~ '^SNNS pattern definition file' 292071d4279SBram Moolenaar set ft=snnspat 293071d4279SBram Moolenaar elseif s:line1 =~ '^SNNS result file' 294071d4279SBram Moolenaar set ft=snnsres 295071d4279SBram Moolenaar 296071d4279SBram Moolenaar " Virata 297071d4279SBram Moolenaar elseif s:line1 =~ '^%.\{-}[Vv]irata' 298071d4279SBram Moolenaar \ || s:line2 =~ '^%.\{-}[Vv]irata' 299071d4279SBram Moolenaar \ || s:line3 =~ '^%.\{-}[Vv]irata' 300071d4279SBram Moolenaar \ || s:line4 =~ '^%.\{-}[Vv]irata' 301071d4279SBram Moolenaar \ || s:line5 =~ '^%.\{-}[Vv]irata' 302071d4279SBram Moolenaar set ft=virata 303071d4279SBram Moolenaar 304071d4279SBram Moolenaar " Strace 305e37d50a5SBram Moolenaar elseif s:line1 =~ '^\(\[pid \d\+\] \)\=[0-9:.]* *execve(' || s:line1 =~ '^__libc_start_main' 306071d4279SBram Moolenaar set ft=strace 307071d4279SBram Moolenaar 308071d4279SBram Moolenaar " VSE JCL 309071d4279SBram Moolenaar elseif s:line1 =~ '^\* $$ JOB\>' || s:line1 =~ '^// *JOB\>' 310071d4279SBram Moolenaar set ft=vsejcl 311071d4279SBram Moolenaar 312071d4279SBram Moolenaar " TAK and SINDA 313071d4279SBram Moolenaar elseif s:line4 =~ 'K & K Associates' || s:line2 =~ 'TAK 2000' 314071d4279SBram Moolenaar set ft=takout 315071d4279SBram Moolenaar elseif s:line3 =~ 'S Y S T E M S I M P R O V E D ' 316071d4279SBram Moolenaar set ft=sindaout 317071d4279SBram Moolenaar elseif getline(6) =~ 'Run Date: ' 318071d4279SBram Moolenaar set ft=takcmp 319071d4279SBram Moolenaar elseif getline(9) =~ 'Node File 1' 320071d4279SBram Moolenaar set ft=sindacmp 321071d4279SBram Moolenaar 322071d4279SBram Moolenaar " DNS zone files 323bd404149SBram Moolenaar elseif s:line1.s:line2.s:line3.s:line4 =~ '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA' 324bd404149SBram Moolenaar set ft=bindzone 325071d4279SBram Moolenaar 326071d4279SBram Moolenaar " BAAN 327071d4279SBram Moolenaar elseif s:line1 =~ '|\*\{1,80}' && s:line2 =~ 'VRC ' 328071d4279SBram Moolenaar \ || s:line2 =~ '|\*\{1,80}' && s:line3 =~ 'VRC ' 329071d4279SBram Moolenaar set ft=baan 330071d4279SBram Moolenaar 331071d4279SBram Moolenaar " Valgrind 332a9af0e6aSBram Moolenaar elseif s:line1 =~ '^==\d\+== valgrind' || s:line3 =~ '^==\d\+== Using valgrind' 333071d4279SBram Moolenaar set ft=valgrind 334071d4279SBram Moolenaar 33534401ccaSBram Moolenaar " Go docs 33634401ccaSBram Moolenaar elseif s:line1 =~ '^PACKAGE DOCUMENTATION$' 33734401ccaSBram Moolenaar set ft=godoc 33834401ccaSBram Moolenaar 339071d4279SBram Moolenaar " Renderman Interface Bytestream 340071d4279SBram Moolenaar elseif s:line1 =~ '^##RenderMan' 341071d4279SBram Moolenaar set ft=rib 342071d4279SBram Moolenaar 343071d4279SBram Moolenaar " Scheme scripts 344071d4279SBram Moolenaar elseif s:line1 =~ 'exec\s\+\S*scheme' || s:line2 =~ 'exec\s\+\S*scheme' 345071d4279SBram Moolenaar set ft=scheme 346071d4279SBram Moolenaar 347aba8857aSBram Moolenaar " Git output 3485c73622aSBram Moolenaar elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$' 349aba8857aSBram Moolenaar set ft=git 350aba8857aSBram Moolenaar 351543b7ef7SBram Moolenaar " Gprof (gnu profiler) 352543b7ef7SBram Moolenaar elseif s:line1 == 'Flat profile:' 353543b7ef7SBram Moolenaar \ && s:line2 == '' 354543b7ef7SBram Moolenaar \ && s:line3 =~ '^Each sample counts as .* seconds.$' 355543b7ef7SBram Moolenaar set ft=gprof 356543b7ef7SBram Moolenaar 357203d04d7SBram Moolenaar " Erlang terms 358203d04d7SBram Moolenaar " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes) 359203d04d7SBram Moolenaar elseif s:line1 =~? '-\*-.*erlang.*-\*-' 360203d04d7SBram Moolenaar set ft=erlang 361203d04d7SBram Moolenaar 362071d4279SBram Moolenaar " CVS diff 363071d4279SBram Moolenaar else 3645c73622aSBram Moolenaar let s:lnum = 1 3655c73622aSBram Moolenaar while getline(s:lnum) =~ "^? " && s:lnum < line("$") 3665c73622aSBram Moolenaar let s:lnum += 1 367071d4279SBram Moolenaar endwhile 3685c73622aSBram Moolenaar if getline(s:lnum) =~ '^Index:\s\+\f\+$' 369071d4279SBram Moolenaar set ft=diff 370071d4279SBram Moolenaar 371071d4279SBram Moolenaar " locale input files: Formal Definitions of Cultural Conventions 372071d4279SBram Moolenaar " filename must be like en_US, fr_FR@euro or en_US.UTF-8 373071d4279SBram Moolenaar elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_' 3745c73622aSBram Moolenaar let s:lnum = 1 3755c73622aSBram Moolenaar while s:lnum < 100 && s:lnum < line("$") 3765c73622aSBram Moolenaar if getline(s:lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$' 377071d4279SBram Moolenaar setf fdcc 378071d4279SBram Moolenaar break 379071d4279SBram Moolenaar endif 3805c73622aSBram Moolenaar let s:lnum += 1 381071d4279SBram Moolenaar endwhile 382071d4279SBram Moolenaar endif 3835c73622aSBram Moolenaar unlet s:lnum 384071d4279SBram Moolenaar 385071d4279SBram Moolenaar endif 386071d4279SBram Moolenaar 387071d4279SBram Moolenaar unlet s:line2 s:line3 s:line4 s:line5 388071d4279SBram Moolenaar 389071d4279SBram Moolenaarendif 390071d4279SBram Moolenaar 391071d4279SBram Moolenaar" Restore 'cpoptions' 392071d4279SBram Moolenaarlet &cpo = s:cpo_save 393071d4279SBram Moolenaar 394071d4279SBram Moolenaarunlet s:cpo_save s:line1 395