diff --git a/runtime/autoload/dist/script.vim b/runtime/autoload/dist/script.vim
new file mode 100644
index 0000000..b926f31
--- /dev/null
+++ b/runtime/autoload/dist/script.vim
@@ -0,0 +1,426 @@
+vim9script
+
+# Vim function for detecting a filetype from the file contents.
+# Invoked from "scripts.vim" in 'runtimepath'
+#
+# Maintainer:	Bram Moolenaar <Bram@vim.org>
+# Last Change:	2022 Feb 13
+
+export def DetectFiletype()
+  var line1 = getline(1)
+  if line1[0] == '#' && line1[1] == '!'
+    # File that starts with "#!".
+    DetectFromHashBang(line1)
+  else
+    # File does not start with "#!".
+    DetectFromText(line1)
+  endif
+enddef
+
+# Called for a script that has "#!" in the first line.
+def DetectFromHashBang(firstline: string)
+  var line1 = firstline
+
+  # Check for a line like "#!/usr/bin/env {options} bash".  Turn it into
+  # "#!/usr/bin/bash" to make matching easier.
+  # Recognize only a few {options} that are commonly used.
+  if line1 =~ '^#!\s*\S*\<env\s'
+    line1 = substitute(line1, '\S\+=\S\+', '', 'g')
+    line1 = substitute(line1, '\(-[iS]\|--ignore-environment\|--split-string\)', '', '')
+    line1 = substitute(line1, '\<env\s\+', '', '')
+  endif
+
+  # Get the program name.
+  # Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
+  # If the word env is used, use the first word after the space:
+  # "#!/usr/bin/env perl [path/args]"
+  # If there is no path use the first word: "#!perl [path/args]".
+  # Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
+  var name: string
+  if line1 =~ '^#!\s*\a:[/\\]'
+    name = substitute(line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
+  elseif line1 =~ '^#!.*\<env\>'
+    name = substitute(line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
+  elseif line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
+    name = substitute(line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
+  else
+    name = substitute(line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
+  endif
+
+  # tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
+  # third line.  Suggested by Steven Atkinson.
+  if getline(3) =~ '^exec wish'
+    name = 'wish'
+  endif
+
+  # Bourne-like shell scripts: bash bash2 ksh ksh93 sh
+  if name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
+    call dist#ft#SetFileTypeSH(line1)
+
+    # csh scripts
+  elseif name =~ '^csh\>'
+    if exists("g:filetype_csh")
+      call dist#ft#SetFileTypeShell(g:filetype_csh)
+    else
+      call dist#ft#SetFileTypeShell("csh")
+    endif
+
+    # tcsh scripts
+  elseif name =~ '^tcsh\>'
+    call dist#ft#SetFileTypeShell("tcsh")
+
+    # Z shell scripts
+  elseif name =~ '^zsh\>'
+    set ft=zsh
+
+    # TCL scripts
+  elseif name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
+    set ft=tcl
+
+    # Expect scripts
+  elseif name =~ '^expect\>'
+    set ft=expect
+
+    # Gnuplot scripts
+  elseif name =~ '^gnuplot\>'
+    set ft=gnuplot
+
+    # Makefiles
+  elseif name =~ 'make\>'
+    set ft=make
+
+    # Pike
+  elseif name =~ '^pike\%(\>\|[0-9]\)'
+    set ft=pike
+
+    # Lua
+  elseif name =~ 'lua'
+    set ft=lua
+
+    # Perl
+  elseif name =~ 'perl'
+    set ft=perl
+
+    # PHP
+  elseif name =~ 'php'
+    set ft=php
+
+    # Python
+  elseif name =~ 'python'
+    set ft=python
+
+    # Groovy
+  elseif name =~ '^groovy\>'
+    set ft=groovy
+
+    # Raku
+  elseif name =~ 'raku'
+    set ft=raku
+
+    # Ruby
+  elseif name =~ 'ruby'
+    set ft=ruby
+
+    # JavaScript
+  elseif name =~ 'node\(js\)\=\>\|js\>' || name =~ 'rhino\>'
+    set ft=javascript
+
+    # BC calculator
+  elseif name =~ '^bc\>'
+    set ft=bc
+
+    # sed
+  elseif name =~ 'sed\>'
+    set ft=sed
+
+    # OCaml-scripts
+  elseif name =~ 'ocaml'
+    set ft=ocaml
+
+    # Awk scripts; also finds "gawk"
+  elseif name =~ 'awk\>'
+    set ft=awk
+
+    # Website MetaLanguage
+  elseif name =~ 'wml'
+    set ft=wml
+
+    # Scheme scripts
+  elseif name =~ 'scheme'
+    set ft=scheme
+
+    # CFEngine scripts
+  elseif name =~ 'cfengine'
+    set ft=cfengine
+
+    # Erlang scripts
+  elseif name =~ 'escript'
+    set ft=erlang
+
+    # Haskell
+  elseif name =~ 'haskell'
+    set ft=haskell
+
+    # Scala
+  elseif name =~ 'scala\>'
+    set ft=scala
+
+    # Clojure
+  elseif name =~ 'clojure'
+    set ft=clojure
+
+    # Free Pascal
+  elseif name =~ 'instantfpc\>'
+    set ft=pascal
+
+    # Fennel
+  elseif name =~ 'fennel\>'
+    set ft=fennel
+
+    # MikroTik RouterOS script
+  elseif name =~ 'rsc\>'
+    set ft=routeros
+
+    # Fish shell
+  elseif name =~ 'fish\>'
+    set ft=fish
+
+    # Gforth
+  elseif name =~ 'gforth\>'
+    set ft=forth
+
+  endif
+enddef
+
+
+# Called for a script that does not have "#!" in the first line.
+def DetectFromText(line1: string)
+  var line2 = getline(2)
+  var line3 = getline(3)
+  var line4 = getline(4)
+  var line5 = getline(5)
+
+  # Bourne-like shell scripts: sh ksh bash bash2
+  if line1 =~ '^:$'
+    call dist#ft#SetFileTypeSH(line1)
+
+  # Z shell scripts
+  elseif line1 =~ '^#compdef\>'
+      || line1 =~ '^#autoload\>'
+      || "\n" .. line1 .. "\n" .. line2 .. "\n" .. line3 ..
+	 "\n" .. line4 .. "\n" .. line5
+	 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
+    set ft=zsh
+
+  # ELM Mail files
+  elseif line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
+    set ft=mail
+
+  # Mason
+  elseif line1 =~ '^<[%&].*>'
+    set ft=mason
+
+  # Vim scripts (must have '" vim' as the first line to trigger this)
+  elseif line1 =~ '^" *[vV]im$'
+    set ft=vim
+
+  # libcxx and libstdc++ standard library headers like "iostream" do not have
+  # an extension, recognize the Emacs file mode.
+  elseif line1 =~? '-\*-.*C++.*-\*-'
+    set ft=cpp
+
+  # MOO
+  elseif line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
+    set ft=moo
+
+    # Diff file:
+    # - "diff" in first line (context diff)
+    # - "Only in " in first line
+    # - "--- " in first line and "+++ " in second line (unified diff).
+    # - "*** " in first line and "--- " in second line (context diff).
+    # - "# It was generated by makepatch " in the second line (makepatch diff).
+    # - "Index: <filename>" in the first line (CVS file)
+    # - "=== ", line of "=", "---", "+++ " (SVK diff)
+    # - "=== ", "--- ", "+++ " (bzr diff, common case)
+    # - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
+    # - "# HG changeset patch" in first line (Mercurial export format)
+  elseif 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\)'
+	 || (line1 =~ '^--- ' && line2 =~ '^+++ ')
+	 || (line1 =~ '^\* looking for ' && line2 =~ '^\* comparing to ')
+	 || (line1 =~ '^\*\*\* ' && line2 =~ '^--- ')
+	 || (line1 =~ '^=== ' && ((line2 =~ '^=\{66\}' && line3 =~ '^--- ' && line4 =~ '^+++') || (line2 =~ '^--- ' && line3 =~ '^+++ ')))
+	 || (line1 =~ '^=== \(removed\|added\|renamed\|modified\)')
+    set ft=diff
+
+    # PostScript Files (must have %!PS as the first line, like a2ps output)
+  elseif line1 =~ '^%![ \t]*PS'
+    set ft=postscr
+
+    # M4 scripts: Guess there is a line that starts with "dnl".
+  elseif line1 =~ '^\s*dnl\>'
+	 || line2 =~ '^\s*dnl\>'
+	 || line3 =~ '^\s*dnl\>'
+	 || line4 =~ '^\s*dnl\>'
+	 || line5 =~ '^\s*dnl\>'
+    set ft=m4
+
+    # AmigaDos scripts
+  elseif $TERM == "amiga" && (line1 =~ "^;" || line1 =~? '^\.bra')
+    set ft=amiga
+
+    # SiCAD scripts (must have procn or procd as the first line to trigger this)
+  elseif line1 =~? '^ *proc[nd] *$'
+    set ft=sicad
+
+    # Purify log files start with "****  Purify"
+  elseif line1 =~ '^\*\*\*\*  Purify'
+    set ft=purifylog
+
+    # XML
+  elseif line1 =~ '<?\s*xml.*?>'
+    set ft=xml
+
+    # XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
+  elseif line1 =~ '\<DTD\s\+XHTML\s'
+    set ft=xhtml
+
+    # HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
+    # Avoid "doctype html", used by slim.
+  elseif line1 =~? '<!DOCTYPE\s\+html\>'
+    set ft=html
+
+    # PDF
+  elseif line1 =~ '^%PDF-'
+    set ft=pdf
+
+    # XXD output
+  elseif line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
+    set ft=xxd
+
+    # RCS/CVS log output
+  elseif line1 =~ '^RCS file:' || line2 =~ '^RCS file:'
+    set ft=rcslog
+
+    # CVS commit
+  elseif line2 =~ '^CVS:' || getline("$") =~ '^CVS: '
+    set ft=cvs
+
+    # Prescribe
+  elseif line1 =~ '^!R!'
+    set ft=prescribe
+
+    # Send-pr
+  elseif line1 =~ '^SEND-PR:'
+    set ft=sendpr
+
+    # SNNS files
+  elseif line1 =~ '^SNNS network definition file'
+    set ft=snnsnet
+  elseif line1 =~ '^SNNS pattern definition file'
+    set ft=snnspat
+  elseif line1 =~ '^SNNS result file'
+    set ft=snnsres
+
+    # Virata
+  elseif line1 =~ '^%.\{-}[Vv]irata'
+	 || line2 =~ '^%.\{-}[Vv]irata'
+	 || line3 =~ '^%.\{-}[Vv]irata'
+	 || line4 =~ '^%.\{-}[Vv]irata'
+	 || line5 =~ '^%.\{-}[Vv]irata'
+    set ft=virata
+
+    # Strace
+  elseif line1 =~ '[0-9:.]* *execve(' || line1 =~ '^__libc_start_main'
+    set ft=strace
+
+    # VSE JCL
+  elseif line1 =~ '^\* $$ JOB\>' || line1 =~ '^// *JOB\>'
+    set ft=vsejcl
+
+    # TAK and SINDA
+  elseif line4 =~ 'K & K  Associates' || line2 =~ 'TAK 2000'
+    set ft=takout
+  elseif line3 =~ 'S Y S T E M S   I M P R O V E D '
+    set ft=sindaout
+  elseif getline(6) =~ 'Run Date: '
+    set ft=takcmp
+  elseif getline(9) =~ 'Node    File  1'
+    set ft=sindacmp
+
+    # DNS zone files
+  elseif line1 .. line2 .. line3 .. line4 =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
+    set ft=bindzone
+
+    # BAAN
+  elseif line1 =~ '|\*\{1,80}' && line2 =~ 'VRC '
+	 || line2 =~ '|\*\{1,80}' && line3 =~ 'VRC '
+    set ft=baan
+
+    # Valgrind
+  elseif line1 =~ '^==\d\+== valgrind' || line3 =~ '^==\d\+== Using valgrind'
+    set ft=valgrind
+
+    # Go docs
+  elseif line1 =~ '^PACKAGE DOCUMENTATION$'
+    set ft=godoc
+
+    # Renderman Interface Bytestream
+  elseif line1 =~ '^##RenderMan'
+    set ft=rib
+
+    # Scheme scripts
+  elseif line1 =~ 'exec\s\+\S*scheme' || line2 =~ 'exec\s\+\S*scheme'
+    set ft=scheme
+
+    # Git output
+  elseif line1 =~ '^\(commit\|tree\|object\) \x\{40,\}\>\|^tag \S\+$'
+    set ft=git
+
+    # Gprof (gnu profiler)
+  elseif line1 == 'Flat profile:'
+	&& line2 == ''
+	&& line3 =~ '^Each sample counts as .* seconds.$'
+    set ft=gprof
+
+    # Erlang terms
+    # (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
+  elseif line1 =~? '-\*-.*erlang.*-\*-'
+    set ft=erlang
+
+    # YAML
+  elseif line1 =~ '^%YAML'
+    set ft=yaml
+
+    # MikroTik RouterOS script
+  elseif line1 =~ '^#.*by RouterOS.*$'
+    set ft=routeros
+
+    # Sed scripts
+    # #ncomment is allowed but most likely a false positive so require a space
+    # before any trailing comment text
+  elseif line1 =~ '^#n\%($\|\s\)'
+    set ft=sed
+
+  else
+    var lnum = 1
+    while getline(lnum) =~ "^? " && lnum < line("$")
+      lnum += 1
+    endwhile
+    if getline(lnum) =~ '^Index:\s\+\f\+$'
+      # CVS diff
+      set ft=diff
+
+      # locale input files: Formal Definitions of Cultural Conventions
+      # filename must be like en_US, fr_FR@euro or en_US.UTF-8
+    elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
+      lnum = 1
+      while lnum < 100 && lnum < line("$")
+	if getline(lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
+	  setf fdcc
+	  break
+	endif
+	lnum += 1
+      endwhile
+    endif
+  endif
+enddef
diff --git a/runtime/scripts.vim b/runtime/scripts.vim
index dd47f65..9f9c065 100644
--- a/runtime/scripts.vim
+++ b/runtime/scripts.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types in scripts
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2021 Jan 22
+" Last change:	2022 Feb 13
 
 " This file is called by an autocommand for every file that has just been
 " loaded into a buffer.  It checks if the type of file can be recognized by
@@ -12,7 +12,7 @@
 " =~? instead.  Do not use =~ anywhere.
 
 
-" Only do the rest when the FileType autocommand has not been triggered yet.
+" Bail out when a FileType autocommand has already set the filetype.
 if did_filetype()
   finish
 endif
@@ -26,422 +26,5 @@
   endif
 endif
 
-" Line continuation is used here, remove 'C' from 'cpoptions'
-let s:cpo_save = &cpo
-set cpo&vim
-
-let s:line1 = getline(1)
-
-if s:line1 =~# "^#!"
-  " A script that starts with "#!".
-
-  " Check for a line like "#!/usr/bin/env {options} bash".  Turn it into
-  " "#!/usr/bin/bash" to make matching easier.
-  " Recognize only a few {options} that are commonly used.
-  if s:line1 =~# '^#!\s*\S*\<env\s'
-    let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
-    let s:line1 = substitute(s:line1, '\(-[iS]\|--ignore-environment\|--split-string\)', '', '')
-    let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
-  endif
-
-  " Get the program name.
-  " Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
-  " If the word env is used, use the first word after the space:
-  " "#!/usr/bin/env perl [path/args]"
-  " If there is no path use the first word: "#!perl [path/args]".
-  " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
-  if s:line1 =~# '^#!\s*\a:[/\\]'
-    let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
-  elseif s:line1 =~# '^#!.*\<env\>'
-    let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
-  elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
-    let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
-  else
-    let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
-  endif
-
-  " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
-  " third line.  Suggested by Steven Atkinson.
-  if getline(3) =~# '^exec wish'
-    let s:name = 'wish'
-  endif
-
-  " Bourne-like shell scripts: bash bash2 ksh ksh93 sh
-  if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>'
-    call dist#ft#SetFileTypeSH(s:line1)	" defined in filetype.vim
-
-    " csh scripts
-  elseif s:name =~# '^csh\>'
-    if exists("g:filetype_csh")
-      call dist#ft#SetFileTypeShell(g:filetype_csh)
-    else
-      call dist#ft#SetFileTypeShell("csh")
-    endif
-
-    " tcsh scripts
-  elseif s:name =~# '^tcsh\>'
-    call dist#ft#SetFileTypeShell("tcsh")
-
-    " Z shell scripts
-  elseif s:name =~# '^zsh\>'
-    set ft=zsh
-
-    " TCL scripts
-  elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
-    set ft=tcl
-
-    " Expect scripts
-  elseif s:name =~# '^expect\>'
-    set ft=expect
-
-    " Gnuplot scripts
-  elseif s:name =~# '^gnuplot\>'
-    set ft=gnuplot
-
-    " Makefiles
-  elseif s:name =~# 'make\>'
-    set ft=make
-
-    " Pike
-  elseif s:name =~# '^pike\%(\>\|[0-9]\)'
-    set ft=pike
-
-    " Lua
-  elseif s:name =~# 'lua'
-    set ft=lua
-
-    " Perl
-  elseif s:name =~# 'perl'
-    set ft=perl
-
-    " PHP
-  elseif s:name =~# 'php'
-    set ft=php
-
-    " Python
-  elseif s:name =~# 'python'
-    set ft=python
-
-    " Groovy
-  elseif s:name =~# '^groovy\>'
-    set ft=groovy
-
-    " Raku
-  elseif s:name =~# 'raku'
-    set ft=raku
-
-    " Ruby
-  elseif s:name =~# 'ruby'
-    set ft=ruby
-
-    " JavaScript
-  elseif s:name =~# 'node\(js\)\=\>\|js\>' || s:name =~# 'rhino\>'
-    set ft=javascript
-
-    " BC calculator
-  elseif s:name =~# '^bc\>'
-    set ft=bc
-
-    " sed
-  elseif s:name =~# 'sed\>'
-    set ft=sed
-
-    " OCaml-scripts
-  elseif s:name =~# 'ocaml'
-    set ft=ocaml
-
-    " Awk scripts; also finds "gawk"
-  elseif s:name =~# 'awk\>'
-    set ft=awk
-
-    " Website MetaLanguage
-  elseif s:name =~# 'wml'
-    set ft=wml
-
-    " Scheme scripts
-  elseif s:name =~# 'scheme'
-    set ft=scheme
-
-    " CFEngine scripts
-  elseif s:name =~# 'cfengine'
-    set ft=cfengine
-
-    " Erlang scripts
-  elseif s:name =~# 'escript'
-    set ft=erlang
-
-    " Haskell
-  elseif s:name =~# 'haskell'
-    set ft=haskell
-
-    " Scala
-  elseif s:name =~# 'scala\>'
-    set ft=scala
-
-    " Clojure
-  elseif s:name =~# 'clojure'
-    set ft=clojure
-
-    " Free Pascal
-  elseif s:name =~# 'instantfpc\>'
-    set ft=pascal
-
-    " Fennel
-  elseif s:name =~# 'fennel\>'
-    set ft=fennel
-
-    " MikroTik RouterOS script
-  elseif s:name =~# 'rsc\>'
-    set ft=routeros
-
-    " Fish shell
-  elseif s:name =~# 'fish\>'
-    set ft=fish
-
-    " Gforth
-  elseif s:name =~# 'gforth\>'
-    set ft=forth
-
-  endif
-  unlet s:name
-
-else
-  " File does not start with "#!".
-
-  let s:line2 = getline(2)
-  let s:line3 = getline(3)
-  let s:line4 = getline(4)
-  let s:line5 = getline(5)
-
-  " Bourne-like shell scripts: sh ksh bash bash2
-  if s:line1 =~# '^:$'
-    call dist#ft#SetFileTypeSH(s:line1)	" defined in filetype.vim
-
-  " Z shell scripts
-  elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
-        \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
-    set ft=zsh
-
-  " ELM Mail files
-  elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
-    set ft=mail
-
-  " Mason
-  elseif s:line1 =~# '^<[%&].*>'
-    set ft=mason
-
-  " Vim scripts (must have '" vim' as the first line to trigger this)
-  elseif s:line1 =~# '^" *[vV]im$'
-    set ft=vim
-
-  " libcxx and libstdc++ standard library headers like "iostream" do not have
-  " an extension, recognize the Emacs file mode.
-  elseif s:line1 =~? '-\*-.*C++.*-\*-'
-    set ft=cpp
-
-  " MOO
-  elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
-    set ft=moo
-
-    " Diff file:
-    " - "diff" in first line (context diff)
-    " - "Only in " in first line
-    " - "--- " in first line and "+++ " in second line (unified diff).
-    " - "*** " in first line and "--- " in second line (context diff).
-    " - "# It was generated by makepatch " in the second line (makepatch diff).
-    " - "Index: <filename>" in the first line (CVS file)
-    " - "=== ", line of "=", "---", "+++ " (SVK diff)
-    " - "=== ", "--- ", "+++ " (bzr diff, common case)
-    " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
-    " - "# HG changeset patch" in first line (Mercurial export format)
-  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\)'
-	\ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
-	\ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
-	\ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
-	\ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
-	\ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
-    set ft=diff
-
-    " PostScript Files (must have %!PS as the first line, like a2ps output)
-  elseif s:line1 =~# '^%![ \t]*PS'
-    set ft=postscr
-
-    " M4 scripts: Guess there is a line that starts with "dnl".
-  elseif s:line1 =~# '^\s*dnl\>'
-	\ || s:line2 =~# '^\s*dnl\>'
-	\ || s:line3 =~# '^\s*dnl\>'
-	\ || s:line4 =~# '^\s*dnl\>'
-	\ || s:line5 =~# '^\s*dnl\>'
-    set ft=m4
-
-    " AmigaDos scripts
-  elseif $TERM == "amiga"
-	\ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
-    set ft=amiga
-
-    " SiCAD scripts (must have procn or procd as the first line to trigger this)
-  elseif s:line1 =~? '^ *proc[nd] *$'
-    set ft=sicad
-
-    " Purify log files start with "****  Purify"
-  elseif s:line1 =~# '^\*\*\*\*  Purify'
-    set ft=purifylog
-
-    " XML
-  elseif s:line1 =~# '<?\s*xml.*?>'
-    set ft=xml
-
-    " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
-  elseif s:line1 =~# '\<DTD\s\+XHTML\s'
-    set ft=xhtml
-
-    " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
-    " Avoid "doctype html", used by slim.
-  elseif s:line1 =~? '<!DOCTYPE\s\+html\>'
-    set ft=html
-
-    " PDF
-  elseif s:line1 =~# '^%PDF-'
-    set ft=pdf
-
-    " XXD output
-  elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
-    set ft=xxd
-
-    " RCS/CVS log output
-  elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
-    set ft=rcslog
-
-    " CVS commit
-  elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
-    set ft=cvs
-
-    " Prescribe
-  elseif s:line1 =~# '^!R!'
-    set ft=prescribe
-
-    " Send-pr
-  elseif s:line1 =~# '^SEND-PR:'
-    set ft=sendpr
-
-    " SNNS files
-  elseif s:line1 =~# '^SNNS network definition file'
-    set ft=snnsnet
-  elseif s:line1 =~# '^SNNS pattern definition file'
-    set ft=snnspat
-  elseif s:line1 =~# '^SNNS result file'
-    set ft=snnsres
-
-    " Virata
-  elseif s:line1 =~# '^%.\{-}[Vv]irata'
-	\ || s:line2 =~# '^%.\{-}[Vv]irata'
-	\ || s:line3 =~# '^%.\{-}[Vv]irata'
-	\ || s:line4 =~# '^%.\{-}[Vv]irata'
-	\ || s:line5 =~# '^%.\{-}[Vv]irata'
-    set ft=virata
-
-    " Strace
-  elseif s:line1 =~# '[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main'
-    set ft=strace
-
-    " VSE JCL
-  elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
-    set ft=vsejcl
-
-    " TAK and SINDA
-  elseif s:line4 =~# 'K & K  Associates' || s:line2 =~# 'TAK 2000'
-    set ft=takout
-  elseif s:line3 =~# 'S Y S T E M S   I M P R O V E D '
-    set ft=sindaout
-  elseif getline(6) =~# 'Run Date: '
-    set ft=takcmp
-  elseif getline(9) =~# 'Node    File  1'
-    set ft=sindacmp
-
-    " DNS zone files
-  elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
-    set ft=bindzone
-
-    " BAAN
-  elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
-	\ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
-    set ft=baan
-
-  " Valgrind
-  elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
-    set ft=valgrind
-
-  " Go docs
-  elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
-    set ft=godoc
-
-  " Renderman Interface Bytestream
-  elseif s:line1 =~# '^##RenderMan'
-    set ft=rib
-
-  " Scheme scripts
-  elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
-    set ft=scheme
-
-  " Git output
-  elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40,\}\>\|^tag \S\+$'
-    set ft=git
-
-   " Gprof (gnu profiler)
-   elseif s:line1 == 'Flat profile:'
-     \ && s:line2 == ''
-     \ && s:line3 =~# '^Each sample counts as .* seconds.$'
-     set ft=gprof
-
-  " Erlang terms
-  " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
-  elseif s:line1 =~? '-\*-.*erlang.*-\*-'
-    set ft=erlang
-
-  " YAML
-  elseif s:line1 =~# '^%YAML'
-    set ft=yaml
-
-  " MikroTik RouterOS script
-  elseif s:line1 =~# '^#.*by RouterOS.*$'
-    set ft=routeros
-
-  " Sed scripts
-  " #ncomment is allowed but most likely a false positive so require a space
-  " before any trailing comment text
-  elseif s:line1 =~# '^#n\%($\|\s\)'
-    set ft=sed
-
-  " CVS diff
-  else
-    let s:lnum = 1
-    while getline(s:lnum) =~# "^? " && s:lnum < line("$")
-      let s:lnum += 1
-    endwhile
-    if getline(s:lnum) =~# '^Index:\s\+\f\+$'
-      set ft=diff
-
-      " locale input files: Formal Definitions of Cultural Conventions
-      " filename must be like en_US, fr_FR@euro or en_US.UTF-8
-    elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
-      let s:lnum = 1
-      while s:lnum < 100 && s:lnum < line("$")
-	if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
-	  setf fdcc
-	  break
-	endif
-	let s:lnum += 1
-      endwhile
-    endif
-    unlet s:lnum
-
-  endif
-
-  unlet s:line2 s:line3 s:line4 s:line5
-
-endif
-
-" Restore 'cpoptions'
-let &cpo = s:cpo_save
-
-unlet s:cpo_save s:line1
+" The main code is in a compiled function for speed.
+call dist#script#DetectFiletype()
