1071d4279SBram Moolenaar" Vim support file to detect file types in scripts 2071d4279SBram Moolenaar" 3071d4279SBram Moolenaar" Maintainer: Bram Moolenaar <[email protected]> 4*8fd2ffc5SBram Moolenaar" Last change: 2018 Feb 03 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. 93a429efbSBram Moolenaar" 103a429efbSBram Moolenaar" Note that the pattern matches are done with =~# to avoid the value of the 113a429efbSBram Moolenaar" 'ignorecase' option making a difference. Where case is to be ignored use 123a429efbSBram 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 353a429efbSBram 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. 403a429efbSBram 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]". 513a429efbSBram Moolenaar if s:line1 =~# '^#!\s*\a:[/\\]' 52071d4279SBram Moolenaar let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '') 533a429efbSBram Moolenaar elseif s:line1 =~# '^#!.*\<env\>' 54f4630b60SBram Moolenaar let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '') 553a429efbSBram 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. 633a429efbSBram 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 683a429efbSBram Moolenaar if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>' 69d09a206eSBram Moolenaar call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim 70071d4279SBram Moolenaar 71071d4279SBram Moolenaar " csh scripts 723a429efbSBram Moolenaar elseif s:name =~# '^csh\>' 73071d4279SBram Moolenaar if exists("g:filetype_csh") 74d09a206eSBram Moolenaar call dist#ft#SetFileTypeShell(g:filetype_csh) 75071d4279SBram Moolenaar else 76d09a206eSBram Moolenaar call dist#ft#SetFileTypeShell("csh") 77071d4279SBram Moolenaar endif 78071d4279SBram Moolenaar 79071d4279SBram Moolenaar " tcsh scripts 803a429efbSBram Moolenaar elseif s:name =~# '^tcsh\>' 81d09a206eSBram Moolenaar call dist#ft#SetFileTypeShell("tcsh") 82071d4279SBram Moolenaar 83071d4279SBram Moolenaar " Z shell scripts 843a429efbSBram Moolenaar elseif s:name =~# '^zsh\>' 85071d4279SBram Moolenaar set ft=zsh 86071d4279SBram Moolenaar 87071d4279SBram Moolenaar " TCL scripts 883a429efbSBram Moolenaar elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>' 89071d4279SBram Moolenaar set ft=tcl 90071d4279SBram Moolenaar 91071d4279SBram Moolenaar " Expect scripts 923a429efbSBram Moolenaar elseif s:name =~# '^expect\>' 93071d4279SBram Moolenaar set ft=expect 94071d4279SBram Moolenaar 95071d4279SBram Moolenaar " Gnuplot scripts 963a429efbSBram Moolenaar elseif s:name =~# '^gnuplot\>' 97071d4279SBram Moolenaar set ft=gnuplot 98071d4279SBram Moolenaar 99071d4279SBram Moolenaar " Makefiles 1003a429efbSBram Moolenaar elseif s:name =~# 'make\>' 101071d4279SBram Moolenaar set ft=make 102071d4279SBram Moolenaar 10340962ec9SBram Moolenaar " Pike 10440962ec9SBram Moolenaar elseif s:name =~# '^pike\%(\>\|[0-9]\)' 10540962ec9SBram Moolenaar set ft=pike 10640962ec9SBram Moolenaar 107*8fd2ffc5SBram Moolenaar " Pike 108*8fd2ffc5SBram Moolenaar elseif s:name =~# '^pike\%(\>\|[0-9]\)' 109*8fd2ffc5SBram Moolenaar set ft=pike 110*8fd2ffc5SBram Moolenaar 111f4630b60SBram Moolenaar " Lua 1123a429efbSBram Moolenaar elseif s:name =~# 'lua' 113f4630b60SBram Moolenaar set ft=lua 114f4630b60SBram Moolenaar 1153b72f1d2SBram Moolenaar " Perl 6 1163a429efbSBram Moolenaar elseif s:name =~# 'perl6' 1173b72f1d2SBram Moolenaar set ft=perl6 1183b72f1d2SBram Moolenaar 119071d4279SBram Moolenaar " Perl 1203a429efbSBram Moolenaar elseif s:name =~# 'perl' 121071d4279SBram Moolenaar set ft=perl 122071d4279SBram Moolenaar 123071d4279SBram Moolenaar " PHP 1243a429efbSBram Moolenaar elseif s:name =~# 'php' 125071d4279SBram Moolenaar set ft=php 126071d4279SBram Moolenaar 127071d4279SBram Moolenaar " Python 1283a429efbSBram Moolenaar elseif s:name =~# 'python' 129071d4279SBram Moolenaar set ft=python 130071d4279SBram Moolenaar 131071d4279SBram Moolenaar " Groovy 1323a429efbSBram Moolenaar elseif s:name =~# '^groovy\>' 133071d4279SBram Moolenaar set ft=groovy 134071d4279SBram Moolenaar 135071d4279SBram Moolenaar " Ruby 1363a429efbSBram Moolenaar elseif s:name =~# 'ruby' 137071d4279SBram Moolenaar set ft=ruby 138071d4279SBram Moolenaar 139214641f7SBram Moolenaar " JavaScript 1403a429efbSBram Moolenaar elseif s:name =~# 'node\(js\)\=\>' || s:name =~# 'rhino\>' 141214641f7SBram Moolenaar set ft=javascript 142214641f7SBram Moolenaar 143071d4279SBram Moolenaar " BC calculator 1443a429efbSBram Moolenaar elseif s:name =~# '^bc\>' 145071d4279SBram Moolenaar set ft=bc 146071d4279SBram Moolenaar 147071d4279SBram Moolenaar " sed 1483a429efbSBram Moolenaar elseif s:name =~# 'sed\>' 149071d4279SBram Moolenaar set ft=sed 150071d4279SBram Moolenaar 151071d4279SBram Moolenaar " OCaml-scripts 1523a429efbSBram Moolenaar elseif s:name =~# 'ocaml' 153071d4279SBram Moolenaar set ft=ocaml 154071d4279SBram Moolenaar 155071d4279SBram Moolenaar " Awk scripts 1563a429efbSBram Moolenaar elseif s:name =~# 'awk\>' 157071d4279SBram Moolenaar set ft=awk 158071d4279SBram Moolenaar 159071d4279SBram Moolenaar " Website MetaLanguage 1603a429efbSBram Moolenaar elseif s:name =~# 'wml' 161071d4279SBram Moolenaar set ft=wml 162071d4279SBram Moolenaar 163071d4279SBram Moolenaar " Scheme scripts 1643a429efbSBram Moolenaar elseif s:name =~# 'scheme' 165071d4279SBram Moolenaar set ft=scheme 166071d4279SBram Moolenaar 167af289d33SBram Moolenaar " CFEngine scripts 1683a429efbSBram Moolenaar elseif s:name =~# 'cfengine' 169af289d33SBram Moolenaar set ft=cfengine 170af289d33SBram Moolenaar 171203d04d7SBram Moolenaar " Erlang scripts 1723a429efbSBram Moolenaar elseif s:name =~# 'escript' 173203d04d7SBram Moolenaar set ft=erlang 174203d04d7SBram Moolenaar 175214641f7SBram Moolenaar " Haskell 1763a429efbSBram Moolenaar elseif s:name =~# 'haskell' 177214641f7SBram Moolenaar set ft=haskell 178214641f7SBram Moolenaar 179214641f7SBram Moolenaar " Scala 1803a429efbSBram Moolenaar elseif s:name =~# 'scala\>' 181214641f7SBram Moolenaar set ft=scala 182214641f7SBram Moolenaar 183*8fd2ffc5SBram Moolenaar " Clojure 184*8fd2ffc5SBram Moolenaar elseif s:name =~# 'clojure' 185*8fd2ffc5SBram Moolenaar set ft=clojure 186*8fd2ffc5SBram Moolenaar 187071d4279SBram Moolenaar endif 188071d4279SBram Moolenaar unlet s:name 189071d4279SBram Moolenaar 190071d4279SBram Moolenaarelse 191071d4279SBram Moolenaar " File does not start with "#!". 192071d4279SBram Moolenaar 193071d4279SBram Moolenaar let s:line2 = getline(2) 194071d4279SBram Moolenaar let s:line3 = getline(3) 195071d4279SBram Moolenaar let s:line4 = getline(4) 196071d4279SBram Moolenaar let s:line5 = getline(5) 197071d4279SBram Moolenaar 198071d4279SBram Moolenaar " Bourne-like shell scripts: sh ksh bash bash2 1993a429efbSBram Moolenaar if s:line1 =~# '^:$' 200d09a206eSBram Moolenaar call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim 201071d4279SBram Moolenaar 202071d4279SBram Moolenaar " Z shell scripts 2033a429efbSBram Moolenaar elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' || 2043a429efbSBram Moolenaar \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>' 205071d4279SBram Moolenaar set ft=zsh 206071d4279SBram Moolenaar 207071d4279SBram Moolenaar " ELM Mail files 2083a429efbSBram Moolenaar elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$' 209071d4279SBram Moolenaar set ft=mail 210071d4279SBram Moolenaar 211071d4279SBram Moolenaar " Mason 2123a429efbSBram Moolenaar elseif s:line1 =~# '^<[%&].*>' 213071d4279SBram Moolenaar set ft=mason 214071d4279SBram Moolenaar 215071d4279SBram Moolenaar " Vim scripts (must have '" vim' as the first line to trigger this) 2163a429efbSBram Moolenaar elseif s:line1 =~# '^" *[vV]im$' 217071d4279SBram Moolenaar set ft=vim 218071d4279SBram Moolenaar 219071d4279SBram Moolenaar " MOO 2203a429efbSBram Moolenaar elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$' 221071d4279SBram Moolenaar set ft=moo 222071d4279SBram Moolenaar 223071d4279SBram Moolenaar " Diff file: 224071d4279SBram Moolenaar " - "diff" in first line (context diff) 225071d4279SBram Moolenaar " - "Only in " in first line 226071d4279SBram Moolenaar " - "--- " in first line and "+++ " in second line (unified diff). 227071d4279SBram Moolenaar " - "*** " in first line and "--- " in second line (context diff). 228071d4279SBram Moolenaar " - "# It was generated by makepatch " in the second line (makepatch diff). 229071d4279SBram Moolenaar " - "Index: <filename>" in the first line (CVS file) 230899dddf8SBram Moolenaar " - "=== ", line of "=", "---", "+++ " (SVK diff) 231d2cec5b0SBram Moolenaar " - "=== ", "--- ", "+++ " (bzr diff, common case) 232d2cec5b0SBram Moolenaar " - "=== (removed|added|renamed|modified)" (bzr diff, alternative) 233d09acef4SBram Moolenaar " - "# HG changeset patch" in first line (Mercurial export format) 2343a429efbSBram 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\)' 2353a429efbSBram Moolenaar \ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ') 2363a429efbSBram Moolenaar \ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ') 2373a429efbSBram Moolenaar \ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ') 2383a429efbSBram Moolenaar \ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ '))) 2393a429efbSBram Moolenaar \ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)') 240071d4279SBram Moolenaar set ft=diff 241071d4279SBram Moolenaar 242071d4279SBram Moolenaar " PostScript Files (must have %!PS as the first line, like a2ps output) 2433a429efbSBram Moolenaar elseif s:line1 =~# '^%![ \t]*PS' 244071d4279SBram Moolenaar set ft=postscr 245071d4279SBram Moolenaar 246071d4279SBram Moolenaar " M4 scripts: Guess there is a line that starts with "dnl". 2473a429efbSBram Moolenaar elseif s:line1 =~# '^\s*dnl\>' 2483a429efbSBram Moolenaar \ || s:line2 =~# '^\s*dnl\>' 2493a429efbSBram Moolenaar \ || s:line3 =~# '^\s*dnl\>' 2503a429efbSBram Moolenaar \ || s:line4 =~# '^\s*dnl\>' 2513a429efbSBram Moolenaar \ || s:line5 =~# '^\s*dnl\>' 252071d4279SBram Moolenaar set ft=m4 253071d4279SBram Moolenaar 254071d4279SBram Moolenaar " AmigaDos scripts 255071d4279SBram Moolenaar elseif $TERM == "amiga" 2563a429efbSBram Moolenaar \ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra') 257071d4279SBram Moolenaar set ft=amiga 258071d4279SBram Moolenaar 259071d4279SBram Moolenaar " SiCAD scripts (must have procn or procd as the first line to trigger this) 260071d4279SBram Moolenaar elseif s:line1 =~? '^ *proc[nd] *$' 261071d4279SBram Moolenaar set ft=sicad 262071d4279SBram Moolenaar 263071d4279SBram Moolenaar " Purify log files start with "**** Purify" 2643a429efbSBram Moolenaar elseif s:line1 =~# '^\*\*\*\* Purify' 265071d4279SBram Moolenaar set ft=purifylog 266071d4279SBram Moolenaar 267071d4279SBram Moolenaar " XML 2683a429efbSBram Moolenaar elseif s:line1 =~# '<?\s*xml.*?>' 269071d4279SBram Moolenaar set ft=xml 270071d4279SBram Moolenaar 271071d4279SBram Moolenaar " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN") 2723a429efbSBram Moolenaar elseif s:line1 =~# '\<DTD\s\+XHTML\s' 273071d4279SBram Moolenaar set ft=xhtml 274071d4279SBram Moolenaar 27512b87e55SBram Moolenaar " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN") 27626852128SBram Moolenaar " Avoid "doctype html", used by slim. 27726852128SBram Moolenaar elseif s:line1 =~? '<!DOCTYPE\s\+html\>' 27812b87e55SBram Moolenaar set ft=html 27912b87e55SBram Moolenaar 280aba8857aSBram Moolenaar " PDF 2813a429efbSBram Moolenaar elseif s:line1 =~# '^%PDF-' 282aba8857aSBram Moolenaar set ft=pdf 283aba8857aSBram Moolenaar 284071d4279SBram Moolenaar " XXD output 2853a429efbSBram Moolenaar elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} ' 286071d4279SBram Moolenaar set ft=xxd 287071d4279SBram Moolenaar 288071d4279SBram Moolenaar " RCS/CVS log output 2893a429efbSBram Moolenaar elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:' 290071d4279SBram Moolenaar set ft=rcslog 291071d4279SBram Moolenaar 292071d4279SBram Moolenaar " CVS commit 2933a429efbSBram Moolenaar elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: ' 294071d4279SBram Moolenaar set ft=cvs 295071d4279SBram Moolenaar 29619a09a18SBram Moolenaar " Prescribe 2973a429efbSBram Moolenaar elseif s:line1 =~# '^!R!' 29819a09a18SBram Moolenaar set ft=prescribe 29919a09a18SBram Moolenaar 300071d4279SBram Moolenaar " Send-pr 3013a429efbSBram Moolenaar elseif s:line1 =~# '^SEND-PR:' 302071d4279SBram Moolenaar set ft=sendpr 303071d4279SBram Moolenaar 304071d4279SBram Moolenaar " SNNS files 3053a429efbSBram Moolenaar elseif s:line1 =~# '^SNNS network definition file' 306071d4279SBram Moolenaar set ft=snnsnet 3073a429efbSBram Moolenaar elseif s:line1 =~# '^SNNS pattern definition file' 308071d4279SBram Moolenaar set ft=snnspat 3093a429efbSBram Moolenaar elseif s:line1 =~# '^SNNS result file' 310071d4279SBram Moolenaar set ft=snnsres 311071d4279SBram Moolenaar 312071d4279SBram Moolenaar " Virata 3133a429efbSBram Moolenaar elseif s:line1 =~# '^%.\{-}[Vv]irata' 3143a429efbSBram Moolenaar \ || s:line2 =~# '^%.\{-}[Vv]irata' 3153a429efbSBram Moolenaar \ || s:line3 =~# '^%.\{-}[Vv]irata' 3163a429efbSBram Moolenaar \ || s:line4 =~# '^%.\{-}[Vv]irata' 3173a429efbSBram Moolenaar \ || s:line5 =~# '^%.\{-}[Vv]irata' 318071d4279SBram Moolenaar set ft=virata 319071d4279SBram Moolenaar 320071d4279SBram Moolenaar " Strace 321c572da5fSBram Moolenaar elseif s:line1 =~# '[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main' 322071d4279SBram Moolenaar set ft=strace 323071d4279SBram Moolenaar 324071d4279SBram Moolenaar " VSE JCL 3253a429efbSBram Moolenaar elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>' 326071d4279SBram Moolenaar set ft=vsejcl 327071d4279SBram Moolenaar 328071d4279SBram Moolenaar " TAK and SINDA 3293a429efbSBram Moolenaar elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000' 330071d4279SBram Moolenaar set ft=takout 3313a429efbSBram Moolenaar elseif s:line3 =~# 'S Y S T E M S I M P R O V E D ' 332071d4279SBram Moolenaar set ft=sindaout 3333a429efbSBram Moolenaar elseif getline(6) =~# 'Run Date: ' 334071d4279SBram Moolenaar set ft=takcmp 3353a429efbSBram Moolenaar elseif getline(9) =~# 'Node File 1' 336071d4279SBram Moolenaar set ft=sindacmp 337071d4279SBram Moolenaar 338071d4279SBram Moolenaar " DNS zone files 33901164a65SBram Moolenaar elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA' 340bd404149SBram Moolenaar set ft=bindzone 341071d4279SBram Moolenaar 342071d4279SBram Moolenaar " BAAN 3433a429efbSBram Moolenaar elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC ' 3443a429efbSBram Moolenaar \ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC ' 345071d4279SBram Moolenaar set ft=baan 346071d4279SBram Moolenaar 347071d4279SBram Moolenaar " Valgrind 3483a429efbSBram Moolenaar elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind' 349071d4279SBram Moolenaar set ft=valgrind 350071d4279SBram Moolenaar 35134401ccaSBram Moolenaar " Go docs 3523a429efbSBram Moolenaar elseif s:line1 =~# '^PACKAGE DOCUMENTATION$' 35334401ccaSBram Moolenaar set ft=godoc 35434401ccaSBram Moolenaar 355071d4279SBram Moolenaar " Renderman Interface Bytestream 3563a429efbSBram Moolenaar elseif s:line1 =~# '^##RenderMan' 357071d4279SBram Moolenaar set ft=rib 358071d4279SBram Moolenaar 359071d4279SBram Moolenaar " Scheme scripts 3603a429efbSBram Moolenaar elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme' 361071d4279SBram Moolenaar set ft=scheme 362071d4279SBram Moolenaar 363aba8857aSBram Moolenaar " Git output 3643a429efbSBram Moolenaar elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$' 365aba8857aSBram Moolenaar set ft=git 366aba8857aSBram Moolenaar 367543b7ef7SBram Moolenaar " Gprof (gnu profiler) 368543b7ef7SBram Moolenaar elseif s:line1 == 'Flat profile:' 369543b7ef7SBram Moolenaar \ && s:line2 == '' 3703a429efbSBram Moolenaar \ && s:line3 =~# '^Each sample counts as .* seconds.$' 371543b7ef7SBram Moolenaar set ft=gprof 372543b7ef7SBram Moolenaar 373203d04d7SBram Moolenaar " Erlang terms 374203d04d7SBram Moolenaar " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes) 375203d04d7SBram Moolenaar elseif s:line1 =~? '-\*-.*erlang.*-\*-' 376203d04d7SBram Moolenaar set ft=erlang 377203d04d7SBram Moolenaar 378071d4279SBram Moolenaar " CVS diff 379071d4279SBram Moolenaar else 3805c73622aSBram Moolenaar let s:lnum = 1 3813a429efbSBram Moolenaar while getline(s:lnum) =~# "^? " && s:lnum < line("$") 3825c73622aSBram Moolenaar let s:lnum += 1 383071d4279SBram Moolenaar endwhile 3843a429efbSBram Moolenaar if getline(s:lnum) =~# '^Index:\s\+\f\+$' 385071d4279SBram Moolenaar set ft=diff 386071d4279SBram Moolenaar 387071d4279SBram Moolenaar " locale input files: Formal Definitions of Cultural Conventions 388071d4279SBram Moolenaar " filename must be like en_US, fr_FR@euro or en_US.UTF-8 3893a429efbSBram Moolenaar elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_' 3905c73622aSBram Moolenaar let s:lnum = 1 3915c73622aSBram Moolenaar while s:lnum < 100 && s:lnum < line("$") 3923a429efbSBram Moolenaar if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$' 393071d4279SBram Moolenaar setf fdcc 394071d4279SBram Moolenaar break 395071d4279SBram Moolenaar endif 3965c73622aSBram Moolenaar let s:lnum += 1 397071d4279SBram Moolenaar endwhile 398071d4279SBram Moolenaar endif 3995c73622aSBram Moolenaar unlet s:lnum 400071d4279SBram Moolenaar 401071d4279SBram Moolenaar endif 402071d4279SBram Moolenaar 403071d4279SBram Moolenaar unlet s:line2 s:line3 s:line4 s:line5 404071d4279SBram Moolenaar 405071d4279SBram Moolenaarendif 406071d4279SBram Moolenaar 407071d4279SBram Moolenaar" Restore 'cpoptions' 408071d4279SBram Moolenaarlet &cpo = s:cpo_save 409071d4279SBram Moolenaar 410071d4279SBram Moolenaarunlet s:cpo_save s:line1 411