aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/dist/ft.vim1090
-rw-r--r--runtime/doc/filetype.txt38
-rw-r--r--runtime/doc/lua.txt5
-rw-r--r--runtime/doc/news.txt11
-rw-r--r--runtime/doc/options.txt3
-rw-r--r--runtime/doc/starting.txt2
-rw-r--r--runtime/filetype.lua3
-rw-r--r--runtime/filetype.vim2676
-rw-r--r--runtime/lua/vim/filetype.lua4
-rw-r--r--runtime/scripts.vim459
-rwxr-xr-xscripts/vim-patch.sh4
-rw-r--r--src/nvim/testdir/test_legacy_filetype.vim4
12 files changed, 28 insertions, 4271 deletions
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
deleted file mode 100644
index 17abc90637..0000000000
--- a/runtime/autoload/dist/ft.vim
+++ /dev/null
@@ -1,1090 +0,0 @@
-" Vim functions for file type detection
-"
-" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2022 Apr 13
-
-" These functions are moved here from runtime/filetype.vim to make startup
-" faster.
-
-" Line continuation is used here, remove 'C' from 'cpoptions'
-let s:cpo_save = &cpo
-set cpo&vim
-
-func dist#ft#Check_inp()
- if getline(1) =~ '^\*'
- setf abaqus
- else
- let n = 1
- if line("$") > 500
- let nmax = 500
- else
- let nmax = line("$")
- endif
- while n <= nmax
- if getline(n) =~? "^header surface data"
- setf trasys
- break
- endif
- let n = n + 1
- endwhile
- endif
-endfunc
-
-" This function checks for the kind of assembly that is wanted by the user, or
-" can be detected from the first five lines of the file.
-func dist#ft#FTasm()
- " make sure b:asmsyntax exists
- if !exists("b:asmsyntax")
- let b:asmsyntax = ""
- endif
-
- if b:asmsyntax == ""
- call dist#ft#FTasmsyntax()
- endif
-
- " if b:asmsyntax still isn't set, default to asmsyntax or GNU
- if b:asmsyntax == ""
- if exists("g:asmsyntax")
- let b:asmsyntax = g:asmsyntax
- else
- let b:asmsyntax = "asm"
- endif
- endif
-
- exe "setf " . fnameescape(b:asmsyntax)
-endfunc
-
-func dist#ft#FTasmsyntax()
- " see if file contains any asmsyntax=foo overrides. If so, change
- " b:asmsyntax appropriately
- let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
- \" ".getline(5)." "
- let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
- if match != ''
- let b:asmsyntax = match
- elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
- let b:asmsyntax = "vmasm"
- endif
-endfunc
-
-let s:ft_visual_basic_content = '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
-
-" See FTfrm() for Visual Basic form file detection
-func dist#ft#FTbas()
- if exists("g:filetype_bas")
- exe "setf " . g:filetype_bas
- return
- endif
-
- " most frequent FreeBASIC-specific keywords in distro files
- let fb_keywords = '\c^\s*\%(extern\|var\|enum\|private\|scope\|union\|byref\|operator\|constructor\|delete\|namespace\|public\|property\|with\|destructor\|using\)\>\%(\s*[:=(]\)\@!'
- let fb_preproc = '\c^\s*\%(' ..
- \ '#\s*\a\+\|' ..
- \ 'option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\|' ..
- \ '\%(''\|rem\)\s*\$lang\>\|' ..
- \ 'def\%(byte\|longint\|short\|ubyte\|uint\|ulongint\|ushort\)\>' ..
- \ '\)'
- let fb_comment = "^\\s*/'"
- " OPTION EXPLICIT, without the leading underscore, is common to many dialects
- let qb64_preproc = '\c^\s*\%($\a\+\|option\s\+\%(_explicit\|_\=explicitarray\)\>\)'
-
- for lnum in range(1, min([line("$"), 100]))
- let line = getline(lnum)
- if line =~ s:ft_visual_basic_content
- setf vb
- return
- elseif line =~ fb_preproc || line =~ fb_comment || line =~ fb_keywords
- setf freebasic
- return
- elseif line =~ qb64_preproc
- setf qb64
- return
- endif
- endfor
- setf basic
-endfunc
-
-func dist#ft#FTbtm()
- if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
- setf dosbatch
- else
- setf btm
- endif
-endfunc
-
-func dist#ft#BindzoneCheck(default)
- if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
- setf bindzone
- elseif a:default != ''
- exe 'setf ' . a:default
- endif
-endfunc
-
-" Returns true if file content looks like RAPID
-func IsRapid(sChkExt = "")
- if a:sChkExt == "cfg"
- return getline(1) =~? '\v^%(EIO|MMC|MOC|PROC|SIO|SYS):CFG'
- endif
- " called from FTmod, FTprg or FTsys
- return getline(nextnonblank(1)) =~? '\v^\s*%(\%{3}|module\s+\k+\s*%(\(|$))'
-endfunc
-
-func dist#ft#FTcfg()
- if exists("g:filetype_cfg")
- exe "setf " .. g:filetype_cfg
- elseif IsRapid("cfg")
- setf rapid
- else
- setf cfg
- endif
-endfunc
-
-func dist#ft#FTcls()
- if exists("g:filetype_cls")
- exe "setf " .. g:filetype_cls
- return
- endif
-
- if getline(1) =~ '^\v%(\%|\\)'
- setf tex
- elseif getline(1)[0] == '#' && getline(1) =~ 'rexx'
- setf rexx
- elseif getline(1) == 'VERSION 1.0 CLASS'
- setf vb
- else
- setf st
- endif
-endfunc
-
-func dist#ft#FTlpc()
- if exists("g:lpc_syntax_for_c")
- let lnum = 1
- while lnum <= 12
- if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)'
- setf lpc
- return
- endif
- let lnum = lnum + 1
- endwhile
- endif
- setf c
-endfunc
-
-func dist#ft#FTheader()
- if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
- if exists("g:c_syntax_for_h")
- setf objc
- else
- setf objcpp
- endif
- elseif exists("g:c_syntax_for_h")
- setf c
- elseif exists("g:ch_syntax_for_h")
- setf ch
- else
- setf cpp
- endif
-endfunc
-
-" This function checks if one of the first ten lines start with a '@'. In
-" that case it is probably a change file.
-" If the first line starts with # or ! it's probably a ch file.
-" If a line has "main", "include", "//" or "/*" it's probably ch.
-" Otherwise CHILL is assumed.
-func dist#ft#FTchange()
- let lnum = 1
- while lnum <= 10
- if getline(lnum)[0] == '@'
- setf change
- return
- endif
- if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!')
- setf ch
- return
- endif
- if getline(lnum) =~ "MODULE"
- setf chill
- return
- endif
- if getline(lnum) =~ 'main\s*(\|#\s*include\|//'
- setf ch
- return
- endif
- let lnum = lnum + 1
- endwhile
- setf chill
-endfunc
-
-func dist#ft#FTent()
- " This function checks for valid cl syntax in the first five lines.
- " Look for either an opening comment, '#', or a block start, '{'.
- " If not found, assume SGML.
- let lnum = 1
- while lnum < 6
- let line = getline(lnum)
- if line =~ '^\s*[#{]'
- setf cl
- return
- elseif line !~ '^\s*$'
- " Not a blank line, not a comment, and not a block start,
- " so doesn't look like valid cl code.
- break
- endif
- let lnum = lnum + 1
- endw
- setf dtd
-endfunc
-
-func dist#ft#ExCheck()
- let lines = getline(1, min([line("$"), 100]))
- if exists('g:filetype_euphoria')
- exe 'setf ' . g:filetype_euphoria
- elseif match(lines, '^--\|^ifdef\>\|^include\>') > -1
- setf euphoria3
- else
- setf elixir
- endif
-endfunc
-
-func dist#ft#EuphoriaCheck()
- if exists('g:filetype_euphoria')
- exe 'setf ' . g:filetype_euphoria
- else
- setf euphoria3
- endif
-endfunc
-
-func dist#ft#DtraceCheck()
- if did_filetype()
- " Filetype was already detected
- return
- endif
- let lines = getline(1, min([line("$"), 100]))
- if match(lines, '^module\>\|^import\>') > -1
- " D files often start with a module and/or import statement.
- setf d
- elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
- setf dtrace
- else
- setf d
- endif
-endfunc
-
-func dist#ft#FTe()
- if exists('g:filetype_euphoria')
- exe 'setf ' . g:filetype_euphoria
- else
- let n = 1
- while n < 100 && n <= line("$")
- if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
- setf specman
- return
- endif
- let n = n + 1
- endwhile
- setf eiffel
- endif
-endfunc
-
-func dist#ft#FTfrm()
- if exists("g:filetype_frm")
- exe "setf " . g:filetype_frm
- return
- endif
-
- let lines = getline(1, min([line("$"), 5]))
-
- if match(lines, s:ft_visual_basic_content) > -1
- setf vb
- else
- setf form
- endif
-endfunc
-
-" Distinguish between Forth and F#.
-" Provided by Doug Kearns.
-func dist#ft#FTfs()
- if exists("g:filetype_fs")
- exe "setf " . g:filetype_fs
- else
- let line = getline(nextnonblank(1))
- " comments and colon definitions
- if line =~ '^\s*\.\=( ' || line =~ '^\s*\\G\= ' || line =~ '^\\$'
- \ || line =~ '^\s*: \S'
- setf forth
- else
- setf fsharp
- endif
- endif
-endfunc
-
-" Distinguish between HTML, XHTML and Django
-func dist#ft#FThtml()
- let n = 1
- while n < 10 && n <= line("$")
- if getline(n) =~ '\<DTD\s\+XHTML\s'
- setf xhtml
- return
- endif
- if getline(n) =~ '{%\s*\(extends\|block\|load\)\>\|{#\s\+'
- setf htmldjango
- return
- endif
- let n = n + 1
- endwhile
- setf FALLBACK html
-endfunc
-
-" Distinguish between standard IDL and MS-IDL
-func dist#ft#FTidl()
- let n = 1
- while n < 50 && n <= line("$")
- if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
- setf msidl
- return
- endif
- let n = n + 1
- endwhile
- setf idl
-endfunc
-
-" Distinguish between "default", Prolog and Cproto prototype file. */
-func dist#ft#ProtoCheck(default)
- " Cproto files have a comment in the first line and a function prototype in
- " the second line, it always ends in ";". Indent files may also have
- " comments, thus we can't match comments to see the difference.
- " IDL files can have a single ';' in the second line, require at least one
- " chacter before the ';'.
- if getline(2) =~ '.;$'
- setf cpp
- else
- " recognize Prolog by specific text in the first non-empty line
- " require a blank after the '%' because Perl uses "%list" and "%translate"
- let l = getline(nextnonblank(1))
- if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
- setf prolog
- else
- exe 'setf ' .. a:default
- endif
- endif
-endfunc
-
-func dist#ft#FTm()
- if exists("g:filetype_m")
- exe "setf " . g:filetype_m
- return
- endif
-
- " excluding end(for|function|if|switch|while) common to Murphi
- let octave_block_terminators = '\<end\%(_try_catch\|classdef\|enumeration\|events\|methods\|parfor\|properties\)\>'
-
- let objc_preprocessor = '^\s*#\s*\%(import\|include\|define\|if\|ifn\=def\|undef\|line\|error\|pragma\)\>'
-
- let n = 1
- let saw_comment = 0 " Whether we've seen a multiline comment leader.
- while n < 100
- let line = getline(n)
- if line =~ '^\s*/\*'
- " /* ... */ is a comment in Objective C and Murphi, so we can't conclude
- " it's either of them yet, but track this as a hint in case we don't see
- " anything more definitive.
- let saw_comment = 1
- endif
- if line =~ '^\s*//' || line =~ '^\s*@import\>' || line =~ objc_preprocessor
- setf objc
- return
- endif
- if line =~ '^\s*\%(#\|%!\)' || line =~ '^\s*unwind_protect\>' ||
- \ line =~ '\%(^\|;\)\s*' .. octave_block_terminators
- setf octave
- return
- endif
- " TODO: could be Matlab or Octave
- if line =~ '^\s*%'
- setf matlab
- return
- endif
- if line =~ '^\s*(\*'
- setf mma
- return
- endif
- if line =~ '^\c\s*\(\(type\|var\)\>\|--\)'
- setf murphi
- return
- endif
- let n = n + 1
- endwhile
-
- if saw_comment
- " We didn't see anything definitive, but this looks like either Objective C
- " or Murphi based on the comment leader. Assume the former as it is more
- " common.
- setf objc
- else
- " Default is Matlab
- setf matlab
- endif
-endfunc
-
-func dist#ft#FTmms()
- let n = 1
- while n < 20
- let line = getline(n)
- if line =~ '^\s*\(%\|//\)' || line =~ '^\*'
- setf mmix
- return
- endif
- if line =~ '^\s*#'
- setf make
- return
- endif
- let n = n + 1
- endwhile
- setf mmix
-endfunc
-
-" This function checks if one of the first five lines start with a dot. In
-" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
-func dist#ft#FTnroff()
- if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
- setf nroff
- return 1
- endif
- return 0
-endfunc
-
-func dist#ft#FTmm()
- let n = 1
- while n < 20
- let line = getline(n)
- if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)'
- setf objcpp
- return
- endif
- let n = n + 1
- endwhile
- setf nroff
-endfunc
-
-" Returns true if file content looks like LambdaProlog module
-func IsLProlog()
- " skip apparent comments and blank lines, what looks like
- " LambdaProlog comment may be RAPID header
- let l = nextnonblank(1)
- while l > 0 && l < line('$') && getline(l) =~ '^\s*%' " LambdaProlog comment
- let l = nextnonblank(l + 1)
- endwhile
- " this pattern must not catch a go.mod file
- return getline(l) =~ '\<module\s\+\w\+\s*\.\s*\(%\|$\)'
-endfunc
-
-" Determine if *.mod is ABB RAPID, LambdaProlog, Modula-2, Modsim III or go.mod
-func dist#ft#FTmod()
- if exists("g:filetype_mod")
- exe "setf " .. g:filetype_mod
- elseif IsLProlog()
- setf lprolog
- elseif getline(nextnonblank(1)) =~ '\%(\<MODULE\s\+\w\+\s*;\|^\s*(\*\)'
- setf modula2
- elseif IsRapid()
- setf rapid
- elseif expand("<afile>") =~ '\<go.mod$'
- setf gomod
- else
- " Nothing recognized, assume modsim3
- setf modsim3
- endif
-endfunc
-
-func dist#ft#FTpl()
- if exists("g:filetype_pl")
- exe "setf " . g:filetype_pl
- else
- " recognize Prolog by specific text in the first non-empty line
- " require a blank after the '%' because Perl uses "%list" and "%translate"
- let l = getline(nextnonblank(1))
- if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
- setf prolog
- else
- setf perl
- endif
- endif
-endfunc
-
-func dist#ft#FTinc()
- if exists("g:filetype_inc")
- exe "setf " . g:filetype_inc
- else
- let lines = getline(1).getline(2).getline(3)
- if lines =~? "perlscript"
- setf aspperl
- elseif lines =~ "<%"
- setf aspvbs
- elseif lines =~ "<?"
- setf php
- " Pascal supports // comments but they're vary rarely used for file
- " headers so assume POV-Ray
- elseif lines =~ '^\s*\%({\|(\*\)' || lines =~? s:ft_pascal_keywords
- setf pascal
- elseif lines =~# '\<\%(require\|inherit\)\>' || lines =~# '[A-Z][A-Za-z0-9_:${}]*\s\+\%(??\|[?:+]\)\?= '
- setf bitbake
- else
- call dist#ft#FTasmsyntax()
- if exists("b:asmsyntax")
- exe "setf " . fnameescape(b:asmsyntax)
- else
- setf pov
- endif
- endif
- endif
-endfunc
-
-func dist#ft#FTprogress_cweb()
- if exists("g:filetype_w")
- exe "setf " . g:filetype_w
- return
- endif
- if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
- setf progress
- else
- setf cweb
- endif
-endfunc
-
-func dist#ft#FTprogress_asm()
- if exists("g:filetype_i")
- exe "setf " . g:filetype_i
- return
- endif
- " This function checks for an assembly comment the first ten lines.
- " If not found, assume Progress.
- let lnum = 1
- while lnum <= 10 && lnum < line('$')
- let line = getline(lnum)
- if line =~ '^\s*;' || line =~ '^\*'
- call dist#ft#FTasm()
- return
- elseif line !~ '^\s*$' || line =~ '^/\*'
- " Not an empty line: Doesn't look like valid assembly code.
- " Or it looks like a Progress /* comment
- break
- endif
- let lnum = lnum + 1
- endw
- setf progress
-endfunc
-
-let s:ft_pascal_comments = '^\s*\%({\|(\*\|//\)'
-let s:ft_pascal_keywords = '^\s*\%(program\|unit\|library\|uses\|begin\|procedure\|function\|const\|type\|var\)\>'
-
-func dist#ft#FTprogress_pascal()
- if exists("g:filetype_p")
- exe "setf " . g:filetype_p
- return
- endif
- " This function checks for valid Pascal syntax in the first ten lines.
- " Look for either an opening comment or a program start.
- " If not found, assume Progress.
- let lnum = 1
- while lnum <= 10 && lnum < line('$')
- let line = getline(lnum)
- if line =~ s:ft_pascal_comments || line =~? s:ft_pascal_keywords
- setf pascal
- return
- elseif line !~ '^\s*$' || line =~ '^/\*'
- " Not an empty line: Doesn't look like valid Pascal code.
- " Or it looks like a Progress /* comment
- break
- endif
- let lnum = lnum + 1
- endw
- setf progress
-endfunc
-
-func dist#ft#FTpp()
- if exists("g:filetype_pp")
- exe "setf " . g:filetype_pp
- else
- let line = getline(nextnonblank(1))
- if line =~ s:ft_pascal_comments || line =~? s:ft_pascal_keywords
- setf pascal
- else
- setf puppet
- endif
- endif
-endfunc
-
-" Determine if *.prg is ABB RAPID. Can also be Clipper, FoxPro or eviews
-func dist#ft#FTprg()
- if exists("g:filetype_prg")
- exe "setf " .. g:filetype_prg
- elseif IsRapid()
- setf rapid
- else
- " Nothing recognized, assume Clipper
- setf clipper
- endif
-endfunc
-
-func dist#ft#FTr()
- let max = line("$") > 50 ? 50 : line("$")
-
- for n in range(1, max)
- " Rebol is easy to recognize, check for that first
- if getline(n) =~? '\<REBOL\>'
- setf rebol
- return
- endif
- endfor
-
- for n in range(1, max)
- " R has # comments
- if getline(n) =~ '^\s*#'
- setf r
- return
- endif
- " Rexx has /* comments */
- if getline(n) =~ '^\s*/\*'
- setf rexx
- return
- endif
- endfor
-
- " Nothing recognized, use user default or assume Rexx
- if exists("g:filetype_r")
- exe "setf " . g:filetype_r
- else
- " Rexx used to be the default, but R appears to be much more popular.
- setf r
- endif
-endfunc
-
-func dist#ft#McSetf()
- " Rely on the file to start with a comment.
- " MS message text files use ';', Sendmail files use '#' or 'dnl'
- for lnum in range(1, min([line("$"), 20]))
- let line = getline(lnum)
- if line =~ '^\s*\(#\|dnl\)'
- setf m4 " Sendmail .mc file
- return
- elseif line =~ '^\s*;'
- setf msmessages " MS Message text file
- return
- endif
- endfor
- setf m4 " Default: Sendmail .mc file
-endfunc
-
-" Called from filetype.vim and scripts.vim.
-func dist#ft#SetFileTypeSH(name)
- if did_filetype()
- " Filetype was already detected
- return
- endif
- if expand("<amatch>") =~ g:ft_ignore_pat
- return
- endif
- if a:name =~ '\<csh\>'
- " Some .sh scripts contain #!/bin/csh.
- call dist#ft#SetFileTypeShell("csh")
- return
- elseif a:name =~ '\<tcsh\>'
- " Some .sh scripts contain #!/bin/tcsh.
- call dist#ft#SetFileTypeShell("tcsh")
- return
- elseif a:name =~ '\<zsh\>'
- " Some .sh scripts contain #!/bin/zsh.
- call dist#ft#SetFileTypeShell("zsh")
- return
- elseif a:name =~ '\<ksh\>'
- let b:is_kornshell = 1
- if exists("b:is_bash")
- unlet b:is_bash
- endif
- if exists("b:is_sh")
- unlet b:is_sh
- endif
- elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
- let b:is_bash = 1
- if exists("b:is_kornshell")
- unlet b:is_kornshell
- endif
- if exists("b:is_sh")
- unlet b:is_sh
- endif
- elseif a:name =~ '\<sh\>'
- let b:is_sh = 1
- if exists("b:is_kornshell")
- unlet b:is_kornshell
- endif
- if exists("b:is_bash")
- unlet b:is_bash
- endif
- endif
- call dist#ft#SetFileTypeShell("sh")
-endfunc
-
-" For shell-like file types, check for an "exec" command hidden in a comment,
-" as used for Tcl.
-" Also called from scripts.vim, thus can't be local to this script.
-func dist#ft#SetFileTypeShell(name)
- if did_filetype()
- " Filetype was already detected
- return
- endif
- if expand("<amatch>") =~ g:ft_ignore_pat
- return
- endif
- let l = 2
- while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)'
- " Skip empty and comment lines.
- let l = l + 1
- endwhile
- if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$'
- " Found an "exec" line after a comment with continuation
- let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '')
- if n =~ '\<tclsh\|\<wish'
- setf tcl
- return
- endif
- endif
- exe "setf " . a:name
-endfunc
-
-func dist#ft#CSH()
- if did_filetype()
- " Filetype was already detected
- return
- endif
- if exists("g:filetype_csh")
- call dist#ft#SetFileTypeShell(g:filetype_csh)
- elseif &shell =~ "tcsh"
- call dist#ft#SetFileTypeShell("tcsh")
- else
- call dist#ft#SetFileTypeShell("csh")
- endif
-endfunc
-
-let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
-func dist#ft#FTRules()
- let path = expand('<amatch>:p')
- if path =~ '/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|\%(usr/\)\=lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
- setf udevrules
- return
- endif
- if path =~ '^/etc/ufw/'
- setf conf " Better than hog
- return
- endif
- if path =~ '^/\(etc\|usr/share\)/polkit-1/rules\.d'
- setf javascript
- return
- endif
- try
- let config_lines = readfile('/etc/udev/udev.conf')
- catch /^Vim\%((\a\+)\)\=:E484/
- setf hog
- return
- endtry
- let dir = expand('<amatch>:p:h')
- for line in config_lines
- if line =~ s:ft_rules_udev_rules_pattern
- let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "")
- if dir == udev_rules
- setf udevrules
- endif
- break
- endif
- endfor
- setf hog
-endfunc
-
-func dist#ft#SQL()
- if exists("g:filetype_sql")
- exe "setf " . g:filetype_sql
- else
- setf sql
- endif
-endfunc
-
-" This function checks the first 25 lines of file extension "sc" to resolve
-" detection between scala and SuperCollider
-func dist#ft#FTsc()
- for lnum in range(1, min([line("$"), 25]))
- if getline(lnum) =~# '[A-Za-z0-9]*\s:\s[A-Za-z0-9]\|var\s<\|classvar\s<\|\^this.*\||\w*|\|+\s\w*\s{\|\*ar\s'
- setf supercollider
- return
- endif
- endfor
- setf scala
-endfunc
-
-" This function checks the first line of file extension "scd" to resolve
-" detection between scdoc and SuperCollider
-func dist#ft#FTscd()
- if getline(1) =~# '\%^\S\+(\d[0-9A-Za-z]*)\%(\s\+\"[^"]*\"\%(\s\+\"[^"]*\"\)\=\)\=$'
- setf scdoc
- else
- setf supercollider
- endif
-endfunc
-
-" If the file has an extension of 't' and is in a directory 't' or 'xt' then
-" it is almost certainly a Perl test file.
-" If the first line starts with '#' and contains 'perl' it's probably a Perl
-" file.
-" (Slow test) If a file contains a 'use' statement then it is almost certainly
-" a Perl file.
-func dist#ft#FTperl()
- let dirname = expand("%:p:h:t")
- if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt')
- setf perl
- return 1
- endif
- if getline(1)[0] == '#' && getline(1) =~ 'perl'
- setf perl
- return 1
- endif
- let save_cursor = getpos('.')
- call cursor(1,1)
- let has_use = search('^use\s\s*\k', 'c', 30) > 0
- call setpos('.', save_cursor)
- if has_use
- setf perl
- return 1
- endif
- return 0
-endfunc
-
-" LambdaProlog and Standard ML signature files
-func dist#ft#FTsig()
- if exists("g:filetype_sig")
- exe "setf " .. g:filetype_sig
- return
- endif
-
- let lprolog_comment = '^\s*\%(/\*\|%\)'
- let lprolog_keyword = '^\s*sig\s\+\a'
- let sml_comment = '^\s*(\*'
- let sml_keyword = '^\s*\%(signature\|structure\)\s\+\a'
-
- let line = getline(nextnonblank(1))
-
- if line =~ lprolog_comment || line =~# lprolog_keyword
- setf lprolog
- elseif line =~ sml_comment || line =~# sml_keyword
- setf sml
- endif
-endfunc
-
-" This function checks the first 100 lines of files matching "*.sil" to
-" resolve detection between Swift Intermediate Language and SILE.
-func dist#ft#FTsil()
- for lnum in range(1, [line('$'), 100]->min())
- let line = getline(lnum)
- if line =~ '^\s*[\\%]'
- setf sile
- return
- elseif line =~ '^\s*\S'
- setf sil
- return
- endif
- endfor
- " no clue, default to "sil"
- setf sil
-endfunc
-
-func dist#ft#FTsys()
- if exists("g:filetype_sys")
- exe "setf " .. g:filetype_sys
- elseif IsRapid()
- setf rapid
- else
- setf bat
- endif
-endfunc
-
-" Choose context, plaintex, or tex (LaTeX) based on these rules:
-" 1. Check the first line of the file for "%&<format>".
-" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
-" 3. Default to "plain" or to g:tex_flavor, can be set in user's vimrc.
-func dist#ft#FTtex()
- let firstline = getline(1)
- if firstline =~ '^%&\s*\a\+'
- let format = tolower(matchstr(firstline, '\a\+'))
- let format = substitute(format, 'pdf', '', '')
- if format == 'tex'
- let format = 'latex'
- elseif format == 'plaintex'
- let format = 'plain'
- endif
- elseif expand('%') =~ 'tex/context/.*/.*.tex'
- let format = 'context'
- else
- " Default value, may be changed later:
- let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain'
- " Save position, go to the top of the file, find first non-comment line.
- let save_cursor = getpos('.')
- call cursor(1,1)
- let firstNC = search('^\s*[^[:space:]%]', 'c', 1000)
- if firstNC > 0
- " Check the next thousand lines for a LaTeX or ConTeXt keyword.
- let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>'
- let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>'
- let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)',
- \ 'cnp', firstNC + 1000)
- if kwline == 1 " lpat matched
- let format = 'latex'
- elseif kwline == 2 " cpat matched
- let format = 'context'
- endif " If neither matched, keep default set above.
- " let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000)
- " let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000)
- " if cline > 0
- " let format = 'context'
- " endif
- " if lline > 0 && (cline == 0 || cline > lline)
- " let format = 'tex'
- " endif
- endif " firstNC
- call setpos('.', save_cursor)
- endif " firstline =~ '^%&\s*\a\+'
-
- " Translation from formats to file types. TODO: add AMSTeX, RevTex, others?
- if format == 'plain'
- setf plaintex
- elseif format == 'context'
- setf context
- else " probably LaTeX
- setf tex
- endif
- return
-endfunc
-
-func dist#ft#FTxml()
- let n = 1
- while n < 100 && n <= line("$")
- let line = getline(n)
- " DocBook 4 or DocBook 5.
- let is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
- let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
- if is_docbook4 || is_docbook5
- let b:docbk_type = "xml"
- if is_docbook5
- let b:docbk_ver = 5
- else
- let b:docbk_ver = 4
- endif
- setf docbk
- return
- endif
- if line =~ 'xmlns:xbl="http://www.mozilla.org/xbl"'
- setf xbl
- return
- endif
- let n += 1
- endwhile
- setf xml
-endfunc
-
-func dist#ft#FTy()
- let n = 1
- while n < 100 && n <= line("$")
- let line = getline(n)
- if line =~ '^\s*%'
- setf yacc
- return
- endif
- if getline(n) =~ '^\s*\(#\|class\>\)' && getline(n) !~ '^\s*#\s*include'
- setf racc
- return
- endif
- let n = n + 1
- endwhile
- setf yacc
-endfunc
-
-func dist#ft#Redif()
- let lnum = 1
- while lnum <= 5 && lnum < line('$')
- if getline(lnum) =~ "^\ctemplate-type:"
- setf redif
- return
- endif
- let lnum = lnum + 1
- endwhile
-endfunc
-
-" This function is called for all files under */debian/patches/*, make sure not
-" to non-dep3patch files, such as README and other text files.
-func dist#ft#Dep3patch()
- if expand('%:t') ==# 'series'
- return
- endif
-
- for ln in getline(1, 100)
- if ln =~# '^\%(Description\|Subject\|Origin\|Bug\|Forwarded\|Author\|From\|Reviewed-by\|Acked-by\|Last-Updated\|Applied-Upstream\):'
- setf dep3patch
- return
- elseif ln =~# '^---'
- " end of headers found. stop processing
- return
- endif
- endfor
-endfunc
-
-" This function checks the first 15 lines for appearance of 'FoamFile'
-" and then 'object' in a following line.
-" In that case, it's probably an OpenFOAM file
-func dist#ft#FTfoam()
- let ffile = 0
- let lnum = 1
- while lnum <= 15
- if getline(lnum) =~# '^FoamFile'
- let ffile = 1
- elseif ffile == 1 && getline(lnum) =~# '^\s*object'
- setf foam
- return
- endif
- let lnum = lnum + 1
- endwhile
-endfunc
-
-" Determine if a *.tf file is TF mud client or terraform
-func dist#ft#FTtf()
- let numberOfLines = line('$')
- for i in range(1, numberOfLines)
- let currentLine = trim(getline(i))
- let firstCharacter = currentLine[0]
- if firstCharacter !=? ";" && firstCharacter !=? "/" && firstCharacter !=? ""
- setf terraform
- return
- endif
- endfor
- setf tf
-endfunc
-
-let s:ft_krl_header = '\&\w+'
-" Determine if a *.src file is Kuka Robot Language
-func dist#ft#FTsrc()
- let ft_krl_def_or_deffct = '%(global\s+)?def%(fct)?>'
- if exists("g:filetype_src")
- exe "setf " .. g:filetype_src
- elseif getline(nextnonblank(1)) =~? '\v^\s*%(' .. s:ft_krl_header .. '|' .. ft_krl_def_or_deffct .. ')'
- setf krl
- endif
-endfunc
-
-" Determine if a *.dat file is Kuka Robot Language
-func dist#ft#FTdat()
- let ft_krl_defdat = 'defdat>'
- if exists("g:filetype_dat")
- exe "setf " .. g:filetype_dat
- elseif getline(nextnonblank(1)) =~? '\v^\s*%(' .. s:ft_krl_header .. '|' .. ft_krl_defdat .. ')'
- setf krl
- endif
-endfunc
-
-" Restore 'cpoptions'
-let &cpo = s:cpo_save
-unlet s:cpo_save
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index ac54a6b6ca..9952ef6415 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -175,15 +175,13 @@ This means that the contents of compressed files are not inspected.
*new-filetype*
If a file type that you want to use is not detected yet, there are a few ways
-to add it. In any way, it's better not to modify the $VIMRUNTIME/filetype.lua
-or $VIMRUNTIME/filetype.vim files. They will be overwritten when installing a
-new version of Nvim. The following explains the legacy Vim mechanism (enabled
-if |g:do_legacy_filetype| is set). For Nvim's default mechanism, see
-|vim.filetype.add()|.
+to add it. The recommended way is to use |vim.filetype.add()| to add it to
+Nvim's builtin filetype detection mechanism. If you want to handle the
+detection manually, proceed as follows:
A. If you want to overrule all default file type checks.
This works by writing one file for each filetype. The disadvantage is that
- there can be many files. The advantage is that you can simply drop this
+ there can be many files. The advantage is that you can simply drop this
file in the right directory to make it work.
*ftdetect*
1. Create your user runtime directory. You would normally use the first
@@ -273,28 +271,14 @@ D. If your filetype can only be detected by inspecting the contents of the
means that your rules override the default rules in
$VIMRUNTIME/scripts.vim.
- *remove-filetype*
-If a file type is detected that is wrong for you, install a filetype.lua,
-filetype.vim or scripts.vim to catch it (see above). You can set 'filetype' to
-a non-existing name to avoid that it will be set later anyway: >
- :set filetype=ignored
-
-If you are setting up a system with many users, and you don't want each user
-to add/remove the same filetypes, consider writing the filetype.vim and
-scripts.vim files in a runtime directory that is used for everybody. Check
-the 'runtimepath' for a directory to use. If there isn't one, set
-'runtimepath' in the |system-vimrc|. Be careful to keep the default
-directories!
-
- *g:do_legacy_filetype*
-To disable Nvim's default filetype detection and revert to Vim's legacy
-filetype detection, add the following to your |init.vim|: >
- let g:do_legacy_filetype = 1
-< *g:did_load_filetypes*
+ *remove-filetype*
+If a file type is detected that is wrong for you, you can set 'filetype' to
+a non-existing name such as `ignored` to avoid that it will be set later anyway.
+
+ *g:did_load_filetypes*
The builtin filetype detection provided by Nvim can be disabled by setting
-the `did_load_filetypes` global variable. If this variable exists, neither
-the default `$VIMRUNTIME/filetype.lua` nor the legacy `$VIMRUNTIME/filetype.vim`
-will run.
+the `did_load_filetypes` global variable. If this variable exists, the default
+`$VIMRUNTIME/filetype.lua` will not run.
*plugin-details*
The "plugin" directory can be in any of the directories in the 'runtimepath'
diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt
index 7330453778..ce16c208cd 100644
--- a/runtime/doc/lua.txt
+++ b/runtime/doc/lua.txt
@@ -2045,9 +2045,6 @@ add({filetypes}) *vim.filetype.add()*
See $VIMRUNTIME/lua/vim/filetype.lua for more examples.
- Note that Lua filetype detection is disabled when |g:do_legacy_filetype|
- is set.
-
Example: >
vim.filetype.add({
@@ -2084,7 +2081,7 @@ add({filetypes}) *vim.filetype.add()*
})
<
- To add a fallback match on contents (see |new-filetype-scripts|), use >
+ To add a fallback match on contents, use >
vim.filetype.add {
pattern = {
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index 41d47f7a90..1dc9adcab1 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -13,7 +13,7 @@ BREAKING CHANGES *news-breaking*
The following changes may require adaptations in user config or plugins.
-Cscope is now removed (see |cscope| and |nvim-features-removed|):
+• Cscope is now removed (see |cscope| and |nvim-features-removed|):
- Commands removed:
- `:cscope`
- `:lcscope`
@@ -30,9 +30,9 @@ Cscope is now removed (see |cscope| and |nvim-features-removed|):
- Eval functions removed:
- `cscope_connection()`
-Note: support for |ctags| remains with no plans to remove.
+ Note: support for |ctags| remains with no plans to remove.
-See https://github.com/neovim/neovim/pull/20545 for more information.
+ See https://github.com/neovim/neovim/pull/20545 for more information.
==============================================================================
NEW FEATURES *news-features*
@@ -49,6 +49,11 @@ REMOVED FEATURES *news-removed*
The following deprecated functions or APIs were removed.
+• `filetype.vim` is removed in favor of |lua-filetype|
+ (Note that filetype logic and tests still align with Vim, so additions or
+ changes need to be contributed there first.)
+ See https://github.com/neovim/neovim/pull/20674.
+
==============================================================================
DEPRECATIONS *news-deprecations*
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 184a9aeea4..5a828ba249 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -4912,8 +4912,7 @@ A jump table for the options with a short description can be found at |Q_op|.
$XDG_CONFIG_HOME/nvim/after")
global
List of directories to be searched for these runtime files:
- filetype.vim filetypes by file name |new-filetype|
- scripts.vim filetypes by file contents |new-filetype-scripts|
+ filetype.lua filetypes |new-filetype|
autoload/ automatically loaded scripts |autoload-functions|
colors/ color scheme files |:colorscheme|
compiler/ compiler files |:compiler|
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index baa60f431f..e45df9eb73 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -458,7 +458,7 @@ accordingly, proceeding as follows:
7. Enable filetype detection.
This does the same as the command: >
- :runtime! filetype.lua filetype.vim
+ :runtime! filetype.lua
< Skipped if ":filetype off" was called or if the "-u NONE" command line
argument was given.
diff --git a/runtime/filetype.lua b/runtime/filetype.lua
index ee9d5a0a75..f772785d21 100644
--- a/runtime/filetype.lua
+++ b/runtime/filetype.lua
@@ -1,5 +1,4 @@
--- Skip if legacy filetype is enabled or filetype detection is disabled
-if vim.g.do_legacy_filetype or vim.g.did_load_filetypes then
+if vim.g.did_load_filetypes then
return
end
vim.g.did_load_filetypes = 1
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
deleted file mode 100644
index c2f5ab0ee0..0000000000
--- a/runtime/filetype.vim
+++ /dev/null
@@ -1,2676 +0,0 @@
-" Vim support file to detect file types
-"
-" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2022 Oct 12
-
-" Only run this if enabled
-if !exists("do_legacy_filetype")
- finish
-endif
-
-" Listen very carefully, I will say this only once
-if exists("did_load_filetypes")
- finish
-endif
-let did_load_filetypes = 1
-
-" Line continuation is used here, remove 'C' from 'cpoptions'
-let s:cpo_save = &cpo
-set cpo&vim
-
-augroup filetypedetect
-
-" Ignored extensions
-if exists("*fnameescape")
-au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.dpkg-new,?\+.dpkg-bak,?\+.rpmsave,?\+.rpmnew,?\+.pacsave,?\+.pacnew
- \ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
-au BufNewFile,BufRead *~
- \ let s:name = expand("<afile>") |
- \ let s:short = substitute(s:name, '\~$', '', '') |
- \ if s:name != s:short && s:short != "" |
- \ exe "doau filetypedetect BufRead " . fnameescape(s:short) |
- \ endif |
- \ unlet! s:name s:short
-au BufNewFile,BufRead ?\+.in
- \ if expand("<afile>:t") != "configure.in" |
- \ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
- \ endif
-elseif &verbose > 0
- echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
-endif
-
-" Pattern used to match file names which should not be inspected.
-" Currently finds compressed files.
-if !exists("g:ft_ignore_pat")
- let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
-endif
-
-" Function used for patterns that end in a star: don't set the filetype if the
-" file name matches ft_ignore_pat.
-" When using this, the entry should probably be further down below with the
-" other StarSetf() calls.
-func s:StarSetf(ft)
- if expand("<amatch>") !~ g:ft_ignore_pat
- exe 'setf ' . a:ft
- endif
-endfunc
-
-" Vim help file
-au BufNewFile,BufRead $VIMRUNTIME/doc/*.txt setf help
-
-" Abaqus or Trasys
-au BufNewFile,BufRead *.inp call dist#ft#Check_inp()
-
-" 8th (Firth-derivative)
-au BufNewFile,BufRead *.8th setf 8th
-
-" A-A-P recipe
-au BufNewFile,BufRead *.aap setf aap
-
-" A2ps printing utility
-au BufNewFile,BufRead */etc/a2ps.cfg,*/etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
-
-" ABAB/4
-au BufNewFile,BufRead *.abap setf abap
-
-" ABC music notation
-au BufNewFile,BufRead *.abc setf abc
-
-" ABEL
-au BufNewFile,BufRead *.abl setf abel
-
-" AceDB
-au BufNewFile,BufRead *.wrm setf acedb
-
-" Ada (83, 9X, 95)
-au BufNewFile,BufRead *.adb,*.ads,*.ada setf ada
-au BufNewFile,BufRead *.gpr setf ada
-
-" AHDL
-au BufNewFile,BufRead *.tdf setf ahdl
-
-" AIDL
-au BufNewFile,BufRead *.aidl setf aidl
-
-" AMPL
-au BufNewFile,BufRead *.run setf ampl
-
-" Ant
-au BufNewFile,BufRead build.xml setf ant
-
-" Arduino
-au BufNewFile,BufRead *.ino,*.pde setf arduino
-
-" Apache config file
-au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf setf apache
-au BufNewFile,BufRead */etc/apache2/sites-*/*.com setf apache
-
-" XA65 MOS6510 cross assembler
-au BufNewFile,BufRead *.a65 setf a65
-
-" Applescript
-au BufNewFile,BufRead *.scpt setf applescript
-
-" Applix ELF
-au BufNewFile,BufRead *.am
- \ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
-
-" ALSA configuration
-au BufNewFile,BufRead .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf setf alsaconf
-
-" Arc Macro Language
-au BufNewFile,BufRead *.aml setf aml
-
-" APT config file
-au BufNewFile,BufRead apt.conf setf aptconf
-au BufNewFile,BufRead */.aptitude/config setf aptconf
-" more generic pattern far down
-
-" Arch Inventory file
-au BufNewFile,BufRead .arch-inventory,=tagging-method setf arch
-
-" ART*Enterprise (formerly ART-IM)
-au BufNewFile,BufRead *.art setf art
-
-" AsciiDoc
-au BufNewFile,BufRead *.asciidoc,*.adoc setf asciidoc
-
-" ASN.1
-au BufNewFile,BufRead *.asn,*.asn1 setf asn
-
-" Active Server Pages (with Visual Basic Script)
-au BufNewFile,BufRead *.asa
- \ if exists("g:filetype_asa") |
- \ exe "setf " . g:filetype_asa |
- \ else |
- \ setf aspvbs |
- \ endif
-
-" Active Server Pages (with Perl or Visual Basic Script)
-au BufNewFile,BufRead *.asp
- \ if exists("g:filetype_asp") |
- \ exe "setf " . g:filetype_asp |
- \ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" |
- \ setf aspperl |
- \ else |
- \ setf aspvbs |
- \ endif
-
-" Grub (must be before pattern *.lst)
-au BufNewFile,BufRead */boot/grub/menu.lst,*/boot/grub/grub.conf,*/etc/grub.conf setf grub
-
-" Maxima, see:
-" https://maxima.sourceforge.io/docs/manual/maxima_71.html#file_005ftype_005fmaxima
-" Must be before the pattern *.mac.
-" *.dem omitted - also used by gnuplot demos
-" *.mc omitted - used by dist#ft#McSetf()
-au BufNewFile,BufRead *.demo,*.dm{1,2,3,t},*.wxm,maxima-init.mac setf maxima
-
-" Assembly (all kinds)
-" *.lst is not pure assembly, it has two extra columns (address, byte codes)
-au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call dist#ft#FTasm()
-
-" Assembly - Macro (VAX)
-au BufNewFile,BufRead *.mar setf vmasm
-
-" Astro
-au BufNewFile,BufRead *.astro setf astro
-
-" Atlas
-au BufNewFile,BufRead *.atl,*.as setf atlas
-
-" Atom is based on XML
-au BufNewFile,BufRead *.atom setf xml
-
-" Autoit v3
-au BufNewFile,BufRead *.au3 setf autoit
-
-" Autohotkey
-au BufNewFile,BufRead *.ahk setf autohotkey
-
-" Automake
-au BufNewFile,BufRead [mM]akefile.am,GNUmakefile.am setf automake
-
-" Autotest .at files are actually m4
-au BufNewFile,BufRead *.at setf m4
-
-" Avenue
-au BufNewFile,BufRead *.ave setf ave
-
-" Awk
-au BufNewFile,BufRead *.awk,*.gawk setf awk
-
-" B
-au BufNewFile,BufRead *.mch,*.ref,*.imp setf b
-
-" BASIC or Visual Basic
-au BufNewFile,BufRead *.bas call dist#ft#FTbas()
-au BufNewFile,BufRead *.bi,*.bm call dist#ft#FTbas()
-
-" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
-au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl setf vb
-
-" IBasic file (similar to QBasic)
-au BufNewFile,BufRead *.iba,*.ibi setf ibasic
-
-" FreeBasic file (similar to QBasic)
-au BufNewFile,BufRead *.fb setf freebasic
-
-" Batch file for MSDOS. See dist#ft#FTsys for *.sys
-au BufNewFile,BufRead *.bat setf dosbatch
-" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd.
-au BufNewFile,BufRead *.cmd
- \ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif
-" ABB RAPID or Batch file for MSDOS.
-au BufNewFile,BufRead *.sys\c call dist#ft#FTsys()
-
-" Batch file for 4DOS
-au BufNewFile,BufRead *.btm call dist#ft#FTbtm()
-
-" BC calculator
-au BufNewFile,BufRead *.bc setf bc
-
-" BDF font
-au BufNewFile,BufRead *.bdf setf bdf
-
-" Beancount
-au BufNewFile,BufRead *.beancount setf beancount
-
-" BibTeX bibliography database file
-au BufNewFile,BufRead *.bib setf bib
-
-" BibTeX Bibliography Style
-au BufNewFile,BufRead *.bst setf bst
-
-" Bicep
-au BufNewFile,BufRead *.bicep setf bicep
-
-" BIND configuration
-" sudoedit uses namedXXXX.conf
-au BufNewFile,BufRead named*.conf,rndc*.conf,rndc*.key setf named
-
-" BIND zone
-au BufNewFile,BufRead named.root setf bindzone
-au BufNewFile,BufRead *.db call dist#ft#BindzoneCheck('')
-
-" Blank
-au BufNewFile,BufRead *.bl setf blank
-
-" Bitbake
-au BufNewFile,BufRead *.bb,*.bbappend,*.bbclass,*/build/conf/*.conf,*/meta{-*,}/conf/*.conf setf bitbake
-
-" Blkid cache file
-au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old setf xml
-
-" BSDL
-au BufNewFile,BufRead *.bsd,*.bsdl setf bsdl
-
-" Bazel (http://bazel.io)
-autocmd BufRead,BufNewFile *.bzl,*.bazel,WORKSPACE setf bzl
-if has("fname_case")
- " There is another check for BUILD further below.
- autocmd BufRead,BufNewFile *.BUILD,BUILD setf bzl
-endif
-
-" C or lpc
-au BufNewFile,BufRead *.c call dist#ft#FTlpc()
-au BufNewFile,BufRead *.lpc,*.ulpc setf lpc
-
-" Calendar
-au BufNewFile,BufRead calendar setf calendar
-
-" C#
-au BufNewFile,BufRead *.cs,*.csx setf cs
-
-" CSDL
-au BufNewFile,BufRead *.csdl setf csdl
-
-" Cabal
-au BufNewFile,BufRead *.cabal setf cabal
-
-" Cdrdao TOC
-au BufNewFile,BufRead *.toc setf cdrtoc
-
-" Cdrdao config
-au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao setf cdrdaoconf
-
-" Cfengine
-au BufNewFile,BufRead cfengine.conf setf cfengine
-
-" ChaiScript
-au BufRead,BufNewFile *.chai setf chaiscript
-
-" Chatito
-au BufNewFile,BufRead *.chatito setf chatito
-
-" Comshare Dimension Definition Language
-au BufNewFile,BufRead *.cdl setf cdl
-
-" Conary Recipe
-au BufNewFile,BufRead *.recipe setf conaryrecipe
-
-" Controllable Regex Mutilator
-au BufNewFile,BufRead *.crm setf crm
-
-" Cyn++
-au BufNewFile,BufRead *.cyn setf cynpp
-
-" Cynlib
-" .cc and .cpp files can be C++ or Cynlib.
-au BufNewFile,BufRead *.cc
- \ if exists("cynlib_syntax_for_cc")|setf cynlib|else|setf cpp|endif
-au BufNewFile,BufRead *.cpp
- \ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif
-
-" C++
-au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp
-if has("fname_case")
- au BufNewFile,BufRead *.C,*.H setf cpp
-endif
-
-" .h files can be C, Ch C++, ObjC or ObjC++.
-" Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is
-" detected automatically.
-au BufNewFile,BufRead *.h call dist#ft#FTheader()
-
-" Ch (CHscript)
-au BufNewFile,BufRead *.chf setf ch
-
-" TLH files are C++ headers generated by Visual C++'s #import from typelibs
-au BufNewFile,BufRead *.tlh setf cpp
-
-" Cascading Style Sheets
-au BufNewFile,BufRead *.css setf css
-
-" Century Term Command Scripts (*.cmd too)
-au BufNewFile,BufRead *.con setf cterm
-
-" Changelog
-au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch,*/debian/changelog
- \ setf debchangelog
-
-au BufNewFile,BufRead [cC]hange[lL]og
- \ if getline(1) =~ '; urgency='
- \| setf debchangelog
- \| else
- \| setf changelog
- \| endif
-
-au BufNewFile,BufRead NEWS
- \ if getline(1) =~ '; urgency='
- \| setf debchangelog
- \| endif
-
-" CHILL
-au BufNewFile,BufRead *..ch setf chill
-
-" Changes for WEB and CWEB or CHILL
-au BufNewFile,BufRead *.ch call dist#ft#FTchange()
-
-" ChordPro
-au BufNewFile,BufRead *.chopro,*.crd,*.cho,*.crdpro,*.chordpro setf chordpro
-
-" Clang-tidy
-au BufNewFile,BufRead .clang-tidy setf yaml
-
-" Clean
-au BufNewFile,BufRead *.dcl,*.icl setf clean
-
-" Clever
-au BufNewFile,BufRead *.eni setf cl
-
-" Clever or dtd
-au BufNewFile,BufRead *.ent call dist#ft#FTent()
-
-" Clipper, FoxPro, ABB RAPID or eviews
-au BufNewFile,BufRead *.prg\c call dist#ft#FTprg()
-
-" Clojure
-au BufNewFile,BufRead *.clj,*.cljs,*.cljx,*.cljc setf clojure
-
-" Cmake
-au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in setf cmake
-
-" Cmusrc
-au BufNewFile,BufRead */.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
-au BufNewFile,BufRead */cmus/{rc,*.theme} setf cmusrc
-
-" Cobol
-au BufNewFile,BufRead *.cbl,*.cob,*.lib setf cobol
-" cobol or zope form controller python script? (heuristic)
-au BufNewFile,BufRead *.cpy
- \ if getline(1) =~ '^##' |
- \ setf python |
- \ else |
- \ setf cobol |
- \ endif
-
-" Coco/R
-au BufNewFile,BufRead *.atg setf coco
-
-" Cold Fusion
-au BufNewFile,BufRead *.cfm,*.cfi,*.cfc setf cf
-
-" Configure scripts
-au BufNewFile,BufRead configure.in,configure.ac setf config
-
-" Cooklang
-au BufNewFile,BufRead *.cook setf cook
-
-" CSV Files
-au BufNewFile,BufRead *.csv setf csv
-
-" CUDA Compute Unified Device Architecture
-au BufNewFile,BufRead *.cu,*.cuh setf cuda
-
-" Dockerfile; Podman uses the same syntax with name Containerfile
-" Also see Dockerfile.* below.
-au BufNewFile,BufRead Containerfile,Dockerfile,dockerfile,*.[dD]ockerfile setf dockerfile
-
-" WildPackets EtherPeek Decoder
-au BufNewFile,BufRead *.dcd setf dcd
-
-" Enlightenment configuration files
-au BufNewFile,BufRead *enlightenment/*.cfg setf c
-
-" Eterm
-au BufNewFile,BufRead *Eterm/*.cfg setf eterm
-
-" Elixir or Euphoria
-au BufNewFile,BufRead *.ex call dist#ft#ExCheck()
-
-" Elixir
-au BufRead,BufNewFile mix.lock,*.exs setf elixir
-au BufRead,BufNewFile *.eex,*.leex setf eelixir
-
-" Elvish
-au BufRead,BufNewFile *.elv setf elvish
-
-" Euphoria 3 or 4
-au BufNewFile,BufRead *.eu,*.ew,*.exu,*.exw call dist#ft#EuphoriaCheck()
-if has("fname_case")
- au BufNewFile,BufRead *.EU,*.EW,*.EX,*.EXU,*.EXW call dist#ft#EuphoriaCheck()
-endif
-
-" Lynx config files
-au BufNewFile,BufRead lynx.cfg setf lynx
-
-" LyRiCs
-au BufNewFile,BufRead *.lrc setf lyrics
-
-" Modula-3 configuration language (must be before *.cfg and *makefile)
-au BufNewFile,BufRead *.quake,cm3.cfg setf m3quake
-au BufNewFile,BufRead m3makefile,m3overrides setf m3build
-
-" Quake
-au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg setf quake
-au BufNewFile,BufRead *quake[1-3]/*.cfg setf quake
-
-" Quake C
-au BufNewFile,BufRead *.qc setf c
-
-" Configure files
-au BufNewFile,BufRead *.cfg\c call dist#ft#FTcfg()
-
-" Cucumber
-au BufNewFile,BufRead *.feature setf cucumber
-
-" Communicating Sequential Processes
-au BufNewFile,BufRead *.csp,*.fdr setf csp
-
-" CUPL logic description and simulation
-au BufNewFile,BufRead *.pld setf cupl
-au BufNewFile,BufRead *.si setf cuplsim
-
-" Dart
-au BufRead,BufNewfile *.dart,*.drt setf dart
-
-" Debian Control
-au BufNewFile,BufRead */debian/control setf debcontrol
-au BufNewFile,BufRead control
- \ if getline(1) =~ '^Source:'
- \| setf debcontrol
- \| endif
-
-" Debian Copyright
-au BufNewFile,BufRead */debian/copyright setf debcopyright
-au BufNewFile,BufRead copyright
- \ if getline(1) =~ '^Format:'
- \| setf debcopyright
- \| endif
-
-" Debian Sources.list
-au BufNewFile,BufRead */etc/apt/sources.list setf debsources
-au BufNewFile,BufRead */etc/apt/sources.list.d/*.list setf debsources
-
-" Deny hosts
-au BufNewFile,BufRead denyhosts.conf setf denyhosts
-
-" dnsmasq(8) configuration files
-au BufNewFile,BufRead */etc/dnsmasq.conf setf dnsmasq
-
-" ROCKLinux package description
-au BufNewFile,BufRead *.desc setf desc
-
-" the D language or dtrace
-au BufNewFile,BufRead */dtrace/*.d setf dtrace
-au BufNewFile,BufRead *.d call dist#ft#DtraceCheck()
-
-" Desktop files
-au BufNewFile,BufRead *.desktop,*.directory setf desktop
-
-" Dict config
-au BufNewFile,BufRead dict.conf,.dictrc setf dictconf
-
-" Dictd config
-au BufNewFile,BufRead dictd*.conf setf dictdconf
-
-" DEP3 formatted patch files
-au BufNewFile,BufRead */debian/patches/* call dist#ft#Dep3patch()
-
-" Diff files
-au BufNewFile,BufRead *.diff,*.rej setf diff
-au BufNewFile,BufRead *.patch
- \ if getline(1) =~# '^From [0-9a-f]\{40,\} Mon Sep 17 00:00:00 2001$' |
- \ setf gitsendemail |
- \ else |
- \ setf diff |
- \ endif
-
-" Dircolors
-au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS setf dircolors
-
-" Diva (with Skill) or InstallShield
-au BufNewFile,BufRead *.rul
- \ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield' |
- \ setf ishd |
- \ else |
- \ setf diva |
- \ endif
-
-" DCL (Digital Command Language - vms) or DNS zone file
-au BufNewFile,BufRead *.com call dist#ft#BindzoneCheck('dcl')
-
-" DOT
-au BufNewFile,BufRead *.dot,*.gv setf dot
-
-" Dune
-au BufNewFile,BufRead jbuild,dune,dune-project,dune-workspace setf dune
-
-" Dylan - lid files
-au BufNewFile,BufRead *.lid setf dylanlid
-
-" Dylan - intr files (melange)
-au BufNewFile,BufRead *.intr setf dylanintr
-
-" Dylan
-au BufNewFile,BufRead *.dylan setf dylan
-
-" Microsoft Module Definition
-au BufNewFile,BufRead *.def setf def
-
-" Dracula
-au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe setf dracula
-
-" Datascript
-au BufNewFile,BufRead *.ds setf datascript
-
-" dsl: DSSSL or Structurizr
-au BufNewFile,BufRead *.dsl
- \ if getline(1) =~ '^\s*<\!' |
- \ setf dsl |
- \ else |
- \ setf structurizr |
- \ endif
-
-" DTD (Document Type Definition for XML)
-au BufNewFile,BufRead *.dtd setf dtd
-
-" DTS/DSTI (device tree files)
-au BufNewFile,BufRead *.dts,*.dtsi setf dts
-
-" EDIF (*.edf,*.edif,*.edn,*.edo) or edn
-au BufNewFile,BufRead *.ed\(f\|if\|o\) setf edif
-au BufNewFile,BufRead *.edn
- \ if getline(1) =~ '^\s*(\s*edif\>' |
- \ setf edif |
- \ else |
- \ setf clojure |
- \ endif
-
-" EditorConfig (close enough to dosini)
-au BufNewFile,BufRead .editorconfig setf dosini
-
-" Embedix Component Description
-au BufNewFile,BufRead *.ecd setf ecd
-
-" Eiffel or Specman or Euphoria
-au BufNewFile,BufRead *.e,*.E call dist#ft#FTe()
-
-" Elinks configuration
-au BufNewFile,BufRead elinks.conf setf elinks
-
-" ERicsson LANGuage; Yaws is erlang too
-au BufNewFile,BufRead *.erl,*.hrl,*.yaws setf erlang
-
-" Elm
-au BufNewFile,BufRead *.elm setf elm
-
-" Elm Filter Rules file
-au BufNewFile,BufRead filter-rules setf elmfilt
-
-" ESMTP rc file
-au BufNewFile,BufRead *esmtprc setf esmtprc
-
-" ESQL-C
-au BufNewFile,BufRead *.ec,*.EC setf esqlc
-
-" Esterel
-au BufNewFile,BufRead *.strl setf esterel
-
-" Essbase script
-au BufNewFile,BufRead *.csc setf csc
-
-" Exim
-au BufNewFile,BufRead exim.conf setf exim
-
-" Expect
-au BufNewFile,BufRead *.exp setf expect
-
-" Exports
-au BufNewFile,BufRead exports setf exports
-
-" Falcon
-au BufNewFile,BufRead *.fal setf falcon
-
-" Fantom
-au BufNewFile,BufRead *.fan,*.fwt setf fan
-
-" Factor
-au BufNewFile,BufRead *.factor setf factor
-
-" Fennel
-autocmd BufRead,BufNewFile *.fnl setf fennel
-
-" Fetchmail RC file
-au BufNewFile,BufRead .fetchmailrc setf fetchmail
-
-" Fish shell
-au BufNewFile,BufRead *.fish setf fish
-
-" FlexWiki - disabled, because it has side effects when a .wiki file
-" is not actually FlexWiki
-"au BufNewFile,BufRead *.wiki setf flexwiki
-
-" Focus Executable
-au BufNewFile,BufRead *.fex,*.focexec setf focexec
-
-" Focus Master file (but not for auto.master)
-au BufNewFile,BufRead auto.master setf conf
-au BufNewFile,BufRead *.mas,*.master setf master
-
-" Forth
-au BufNewFile,BufRead *.ft,*.fth setf forth
-
-" Reva Forth
-au BufNewFile,BufRead *.frt setf reva
-
-" Fortran
-if has("fname_case")
- au BufNewFile,BufRead *.F,*.FOR,*.FPP,*.FTN,*.F77,*.F90,*.F95,*.F03,*.F08 setf fortran
-endif
-au BufNewFile,BufRead *.f,*.for,*.fortran,*.fpp,*.ftn,*.f77,*.f90,*.f95,*.f03,*.f08 setf fortran
-
-" Framescript
-au BufNewFile,BufRead *.fsl setf framescript
-
-" FStab
-au BufNewFile,BufRead fstab,mtab setf fstab
-
-" Fusion
-au BufRead,BufNewFile *.fusion setf fusion
-
-" F# or Forth
-au BufNewFile,BufRead *.fs call dist#ft#FTfs()
-
-" F#
-au BufNewFile,BufRead *.fsi,*.fsx setf fsharp
-
-" GDB command files
-au BufNewFile,BufRead .gdbinit,gdbinit,.gdbearlyinit,gdbearlyinit,*.gdb setf gdb
-
-" GDMO
-au BufNewFile,BufRead *.mo,*.gdmo setf gdmo
-
-" GDscript
-au BufNewFile,BufRead *.gd setf gdscript
-
-" Godot resource
-au BufRead,BufNewFile *.tscn,*.tres setf gdresource
-
-" Godot shader
-au BufRead,BufNewFile *.gdshader,*.shader setf gdshader
-
-" Gedcom
-au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
-
-" Gemtext
-au BufNewFile,BufRead *.gmi,*.gemini setf gemtext
-
-" Gift (Moodle)
-autocmd BufRead,BufNewFile *.gift setf gift
-
-" Git
-au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
-au BufNewFile,BufRead NOTES_EDITMSG,EDIT_DESCRIPTION setf gitcommit
-au BufNewFile,BufRead *.git/config,.gitconfig,*/etc/gitconfig setf gitconfig
-au BufNewFile,BufRead */.config/git/config setf gitconfig
-au BufNewFile,BufRead *.git/config.worktree setf gitconfig
-au BufNewFile,BufRead *.git/worktrees/*/config.worktree setf gitconfig
-au BufNewFile,BufRead .gitmodules,*.git/modules/*/config setf gitconfig
-if !empty($XDG_CONFIG_HOME)
- au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config setf gitconfig
- au BufNewFile,BufRead $XDG_CONFIG_HOME/git/attributes setf gitattributes
- au BufNewFile,BufRead $XDG_CONFIG_HOME/git/ignore setf gitignore
-endif
-au BufNewFile,BufRead .gitattributes,*.git/info/attributes setf gitattributes
-au BufNewFile,BufRead */.config/git/attributes setf gitattributes
-au BufNewFile,BufRead */etc/gitattributes setf gitattributes
-au BufNewFile,BufRead .gitignore,*.git/info/exclude setf gitignore
-au BufNewFile,BufRead */.config/git/ignore setf gitignore
-au BufNewFile,BufRead git-rebase-todo setf gitrebase
-au BufRead,BufNewFile .gitsendemail.msg.?????? setf gitsendemail
-au BufNewFile,BufRead *.git/*
- \ if getline(1) =~# '^\x\{40,\}\>\|^ref: ' |
- \ setf git |
- \ endif
-
-" Gkrellmrc
-au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc
-
-" Gleam
-au BufNewFile,BufRead *.gleam setf gleam
-
-" GLSL
-au BufNewFile,BufRead *.glsl setf glsl
-
-" GP scripts (2.0 and onward)
-au BufNewFile,BufRead *.gp,.gprc setf gp
-
-" GPG
-au BufNewFile,BufRead */.gnupg/options setf gpg
-au BufNewFile,BufRead */.gnupg/gpg.conf setf gpg
-au BufNewFile,BufRead */usr/*/gnupg/options.skel setf gpg
-if !empty($GNUPGHOME)
- au BufNewFile,BufRead $GNUPGHOME/options setf gpg
- au BufNewFile,BufRead $GNUPGHOME/gpg.conf setf gpg
-endif
-
-" gnash(1) configuration files
-au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash
-
-" Gitolite
-au BufNewFile,BufRead gitolite.conf setf gitolite
-au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc setf perl
-
-" Glimmer-flavored TypeScript and JavaScript
-au BufNewFile,BufRead *.gts setf typescript.glimmer
-au BufNewFile,BufRead *.gjs setf javascript.glimmer
-
-" Gnuplot scripts
-au BufNewFile,BufRead *.gpi,.gnuplot setf gnuplot
-
-" Go (Google)
-au BufNewFile,BufRead *.go setf go
-au BufNewFile,BufRead Gopkg.lock setf toml
-au BufRead,BufNewFile go.work setf gowork
-
-" GrADS scripts
-au BufNewFile,BufRead *.gs setf grads
-
-" GraphQL
-au BufNewFile,BufRead *.graphql,*.graphqls,*.gql setf graphql
-
-" Gretl
-au BufNewFile,BufRead *.gretl setf gretl
-
-" Groovy
-au BufNewFile,BufRead *.gradle,*.groovy setf groovy
-
-" GNU Server Pages
-au BufNewFile,BufRead *.gsp setf gsp
-
-" Group file
-au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/etc/gshadow-,*/etc/gshadow.edit,*/var/backups/group.bak,*/var/backups/gshadow.bak setf group
-
-" GTK RC
-au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc
-
-" GYP
-au BufNewFile,BufRead *.gyp,*.gypi setf gyp
-
-" Hack
-au BufRead,BufNewFile *.hack,*.hackpartial setf hack
-
-" Haml
-au BufNewFile,BufRead *.haml setf haml
-
-" Hamster Classic | Playground files
-au BufNewFile,BufRead *.hsm setf hamster
-
-" Handlebars
-au BufNewFile,BufRead *.hbs setf handlebars
-
-" Hare
-au BufNewFile,BufRead *.ha setf hare
-
-" Haskell
-au BufNewFile,BufRead *.hs,*.hsc,*.hs-boot,*.hsig setf haskell
-au BufNewFile,BufRead *.lhs setf lhaskell
-au BufNewFile,BufRead *.chs setf chaskell
-au BufNewFile,BufRead cabal.project setf cabalproject
-au BufNewFile,BufRead $HOME/.cabal/config setf cabalconfig
-au BufNewFile,BufRead cabal.config setf cabalconfig
-
-" Haste
-au BufNewFile,BufRead *.ht setf haste
-au BufNewFile,BufRead *.htpp setf hastepreproc
-
-" HCL
-au BufRead,BufNewFile *.hcl setf hcl
-
-" Hercules
-au BufNewFile,BufRead *.vc,*.ev,*.sum,*.errsum setf hercules
-
-" HEEx
-au BufRead,BufNewFile *.heex setf heex
-
-" HEX (Intel)
-au BufNewFile,BufRead *.hex,*.h32 setf hex
-
-" Hjson
-au BufNewFile,BufRead *.hjson setf hjson
-
-" HLS Playlist (or another form of playlist)
-au BufNewFile,BufRead *.m3u,*.m3u8 setf hlsplaylist
-
-" Hollywood
-au BufRead,BufNewFile *.hws setf hollywood
-
-" Hoon
-au BufRead,BufNewFile *.hoon setf hoon
-
-" Tilde (must be before HTML)
-au BufNewFile,BufRead *.t.html setf tilde
-
-" HTML (.shtml and .stm for server side)
-au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm call dist#ft#FThtml()
-au BufNewFile,BufRead *.cshtml setf html
-
-" HTML with Ruby - eRuby
-au BufNewFile,BufRead *.erb,*.rhtml setf eruby
-
-" HTML with M4
-au BufNewFile,BufRead *.html.m4 setf htmlm4
-
-" Some template. Used to be HTML Cheetah.
-au BufNewFile,BufRead *.tmpl setf template
-
-" Host config
-au BufNewFile,BufRead */etc/host.conf setf hostconf
-
-" Hosts access
-au BufNewFile,BufRead */etc/hosts.allow,*/etc/hosts.deny setf hostsaccess
-
-" Hyper Builder
-au BufNewFile,BufRead *.hb setf hb
-
-" Httest
-au BufNewFile,BufRead *.htt,*.htb setf httest
-
-" i3
-au BufNewFile,BufRead */i3/config setf i3config
-au BufNewFile,BufRead */.i3/config setf i3config
-
-" sway
-au BufNewFile,BufRead */sway/config setf swayconfig
-au BufNewFile,BufRead */.sway/config setf swayconfig
-
-" Icon
-au BufNewFile,BufRead *.icn setf icon
-
-" IDL (Interface Description Language)
-au BufNewFile,BufRead *.idl call dist#ft#FTidl()
-
-" Microsoft IDL (Interface Description Language) Also *.idl
-" MOF = WMI (Windows Management Instrumentation) Managed Object Format
-au BufNewFile,BufRead *.odl,*.mof setf msidl
-
-" Icewm menu
-au BufNewFile,BufRead */.icewm/menu setf icemenu
-
-" Indent profile (must come before IDL *.pro!)
-au BufNewFile,BufRead .indent.pro setf indent
-au BufNewFile,BufRead indent.pro call dist#ft#ProtoCheck('indent')
-
-" IDL (Interactive Data Language)
-au BufNewFile,BufRead *.pro call dist#ft#ProtoCheck('idlang')
-
-" Indent RC
-au BufNewFile,BufRead indentrc setf indent
-
-" Inform
-au BufNewFile,BufRead *.inf,*.INF setf inform
-
-" Initng
-au BufNewFile,BufRead */etc/initng/*/*.i,*.ii setf initng
-
-" Innovation Data Processing
-au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c setf upstreamdat
-au BufRead,BufNewFile fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c setf upstreamlog
-au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog
-au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c setf usserverlog
-au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c setf usw2kagtlog
-
-" Ipfilter
-au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules setf ipfilter
-
-" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.)
-au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl setf fgl
-
-" .INI file for MSDOS
-au BufNewFile,BufRead *.ini setf dosini
-
-" SysV Inittab
-au BufNewFile,BufRead inittab setf inittab
-
-" Inno Setup
-au BufNewFile,BufRead *.iss setf iss
-
-" J
-au BufNewFile,BufRead *.ijs setf j
-
-" JAL
-au BufNewFile,BufRead *.jal,*.JAL setf jal
-
-" Jam
-au BufNewFile,BufRead *.jpl,*.jpr setf jam
-
-" Java
-au BufNewFile,BufRead *.java,*.jav setf java
-
-" JavaCC
-au BufNewFile,BufRead *.jj,*.jjt setf javacc
-
-" JavaScript, ECMAScript, ES module script, CommonJS script
-au BufNewFile,BufRead *.js,*.jsm,*.javascript,*.es,*.mjs,*.cjs setf javascript
-
-" JavaScript with React
-au BufNewFile,BufRead *.jsx setf javascriptreact
-
-" Java Server Pages
-au BufNewFile,BufRead *.jsp setf jsp
-
-" Java Properties resource file (note: doesn't catch font.properties.pl)
-au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_?? setf jproperties
-
-" Jess
-au BufNewFile,BufRead *.clp setf jess
-
-" Jgraph
-au BufNewFile,BufRead *.jgr setf jgraph
-
-" Jovial
-au BufNewFile,BufRead *.jov,*.j73,*.jovial setf jovial
-
-" JSON
-au BufNewFile,BufRead *.json,*.jsonp,*.webmanifest setf json
-
-" JSON5
-au BufNewFile,BufRead *.json5 setf json5
-
-" JSON Patch (RFC 6902)
-au BufNewFile,BufRead *.json-patch setf json
-
-" Jupyter Notebook is also json
-au BufNewFile,BufRead *.ipynb setf json
-
-" Other files that look like json
-au BufNewFile,BufRead .babelrc,.eslintrc,.prettierrc,.firebaserc setf json
-
-" JSONC
-au BufNewFile,BufRead *.jsonc setf jsonc
-
-" Jsonnet
-au BufNewFile,BufRead *.jsonnet,*.libjsonnet setf jsonnet
-
-" Julia
-au BufNewFile,BufRead *.jl setf julia
-
-" Kixtart
-au BufNewFile,BufRead *.kix setf kix
-
-" Kuka Robot Language
-au BufNewFile,BufRead *.src\c call dist#ft#FTsrc()
-au BufNewFile,BufRead *.dat\c call dist#ft#FTdat()
-au BufNewFile,BufRead *.sub\c setf krl
-
-" Kimwitu[++]
-au BufNewFile,BufRead *.k setf kwt
-
-" Kivy
-au BufNewFile,BufRead *.kv setf kivy
-
-" Kotlin
-au BufNewFile,BufRead *.kt,*.ktm,*.kts setf kotlin
-
-" KDE script
-au BufNewFile,BufRead *.ks setf kscript
-
-" Kconfig
-au BufNewFile,BufRead Kconfig,Kconfig.debug setf kconfig
-
-" Lace (ISE)
-au BufNewFile,BufRead *.ace,*.ACE setf lace
-
-" Latexmkrc
-au BufNewFile,BufRead .latexmkrc,latexmkrc setf perl
-
-" Latte
-au BufNewFile,BufRead *.latte,*.lte setf latte
-
-" Limits
-au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf setf limits
-
-" LambdaProlog or SML (see dist#ft#FTmod for *.mod)
-au BufNewFile,BufRead *.sig call dist#ft#FTsig()
-
-" LDAP LDIF
-au BufNewFile,BufRead *.ldif setf ldif
-
-" Ld loader
-au BufNewFile,BufRead *.ld setf ld
-
-" Ledger
-au BufRead,BufNewFile *.ldg,*.ledger,*.journal setf ledger
-
-" Less
-au BufNewFile,BufRead *.less setf less
-
-" Lex
-au BufNewFile,BufRead *.lex,*.l,*.lxx,*.l++ setf lex
-
-" Libao
-au BufNewFile,BufRead */etc/libao.conf,*/.libao setf libao
-
-" Libsensors
-au BufNewFile,BufRead */etc/sensors.conf,*/etc/sensors3.conf setf sensors
-
-" LFTP
-au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc setf lftp
-
-" Lifelines (or Lex for C++!)
-au BufNewFile,BufRead *.ll setf lifelines
-
-" Lilo: Linux loader
-au BufNewFile,BufRead lilo.conf setf lilo
-
-" Lilypond
-au BufNewFile,BufRead *.ly,*.ily setf lilypond
-
-" Lisp (*.el = ELisp, *.cl = Common Lisp)
-" *.jl was removed, it's also used for Julia, better skip than guess wrong.
-if has("fname_case")
- au BufNewFile,BufRead *.lsp,*.lisp,*.asd,*.el,*.cl,*.L,.emacs,.sawfishrc setf lisp
-else
- au BufNewFile,BufRead *.lsp,*.lisp,*.asd,*.el,*.cl,.emacs,.sawfishrc setf lisp
-endif
-
-" SBCL implementation of Common Lisp
-au BufNewFile,BufRead sbclrc,.sbclrc setf lisp
-
-" Liquid
-au BufNewFile,BufRead *.liquid setf liquid
-
-" Lite
-au BufNewFile,BufRead *.lite,*.lt setf lite
-
-" LiteStep RC files
-au BufNewFile,BufRead */LiteStep/*/*.rc setf litestep
-
-" Login access
-au BufNewFile,BufRead */etc/login.access setf loginaccess
-
-" Login defs
-au BufNewFile,BufRead */etc/login.defs setf logindefs
-
-" Logtalk
-au BufNewFile,BufRead *.lgt setf logtalk
-
-" LOTOS
-au BufNewFile,BufRead *.lot,*.lotos setf lotos
-
-" Lout (also: *.lt)
-au BufNewFile,BufRead *.lou,*.lout setf lout
-
-" Lua
-au BufNewFile,BufRead *.lua setf lua
-
-" Luacheck
-au BufNewFile,BufRead .luacheckrc setf lua
-
-" Luarocks
-au BufNewFile,BufRead *.rockspec setf lua
-
-" Linden Scripting Language (Second Life)
-au BufNewFile,BufRead *.lsl setf lsl
-
-" Lynx style file (or LotusScript!)
-au BufNewFile,BufRead *.lss setf lss
-
-" M4
-au BufNewFile,BufRead *.m4
- \ if expand("<afile>") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif
-
-" MaGic Point
-au BufNewFile,BufRead *.mgp setf mgp
-
-" Mail (for Elm, trn, mutt, muttng, rn, slrn, neomutt)
-au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\\\{6\},neomutt-*-\w\+,neomutt[[:alnum:]_-]\\\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
-
-" Mail aliases
-au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases setf mailaliases
-
-" Mailcap configuration file
-au BufNewFile,BufRead .mailcap,mailcap setf mailcap
-
-" Makefile
-au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make
-
-" MakeIndex
-au BufNewFile,BufRead *.ist,*.mst setf ist
-
-" Mallard
-au BufNewFile,BufRead *.page setf mallard
-
-" Manpage
-au BufNewFile,BufRead *.man setf nroff
-
-" Man config
-au BufNewFile,BufRead */etc/man.conf,man.config setf manconf
-
-" Maple V
-au BufNewFile,BufRead *.mv,*.mpl,*.mws setf maple
-
-" Map (UMN mapserver config file)
-au BufNewFile,BufRead *.map setf map
-
-" Markdown
-au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md setf markdown
-
-" Mason
-au BufNewFile,BufRead *.mason,*.mhtml,*.comp setf mason
-
-" Mathematica, Matlab, Murphi, Objective C or Octave
-au BufNewFile,BufRead *.m call dist#ft#FTm()
-
-" Mathematica notebook
-au BufNewFile,BufRead *.nb setf mma
-
-" Maya Extension Language
-au BufNewFile,BufRead *.mel setf mel
-
-" Mercurial (hg) commit file
-au BufNewFile,BufRead hg-editor-*.txt setf hgcommit
-
-" Mercurial config (looks like generic config file)
-au BufNewFile,BufRead *.hgrc,*hgrc setf cfg
-
-" Meson Build system config
-au BufNewFile,BufRead meson.build,meson_options.txt setf meson
-au BufNewFile,BufRead *.wrap setf dosini
-
-" Messages (logs mostly)
-au BufNewFile,BufRead */log/{auth,cron,daemon,debug,kern,lpr,mail,messages,news/news,syslog,user}{,.log,.err,.info,.warn,.crit,.notice}{,.[0-9]*,-[0-9]*} setf messages
-
-" Metafont
-au BufNewFile,BufRead *.mf setf mf
-
-" MetaPost
-au BufNewFile,BufRead *.mp setf mp
-au BufNewFile,BufRead *.mpxl,*.mpiv,*.mpvi let b:mp_metafun = 1 | setf mp
-
-" MGL
-au BufNewFile,BufRead *.mgl setf mgl
-
-" MIX - Knuth assembly
-au BufNewFile,BufRead *.mix,*.mixal setf mix
-
-" MMIX or VMS makefile
-au BufNewFile,BufRead *.mms call dist#ft#FTmms()
-
-" Symbian meta-makefile definition (MMP)
-au BufNewFile,BufRead *.mmp setf mmp
-
-" ABB Rapid, Modula-2, Modsim III or LambdaProlog
-au BufNewFile,BufRead *.mod\c call dist#ft#FTmod()
-
-" Modula-2 (.md removed in favor of Markdown, see dist#ft#FTmod for *.MOD)
-au BufNewFile,BufRead *.m2,*.DEF,*.mi setf modula2
-
-" Modula-3 (.m3, .i3, .mg, .ig)
-au BufNewFile,BufRead *.[mi][3g] setf modula3
-
-" Monk
-au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc setf monk
-
-" MOO
-au BufNewFile,BufRead *.moo setf moo
-
-" Moonscript
-au BufNewFile,BufRead *.moon setf moonscript
-
-" Modconf
-au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
-
-" MPD is based on XML
-au BufNewFile,BufRead *.mpd setf xml
-
-" Mplayer config
-au BufNewFile,BufRead mplayer.conf,*/.mplayer/config setf mplayerconf
-
-" Motorola S record
-au BufNewFile,BufRead *.s19,*.s28,*.s37,*.mot,*.srec setf srec
-
-" Mrxvtrc
-au BufNewFile,BufRead mrxvtrc,.mrxvtrc setf mrxvtrc
-
-" Msql
-au BufNewFile,BufRead *.msql setf msql
-
-" Mysql
-au BufNewFile,BufRead *.mysql setf mysql
-
-" Tcl Shell RC file
-au BufNewFile,BufRead tclsh.rc setf tcl
-
-" M$ Resource files
-" /etc/Muttrc.d/file.rc is muttrc
-au BufNewFile,BufRead *.rc,*.rch
- \ if expand("<afile>") !~ "/etc/Muttrc.d/" |
- \ setf rc |
- \ endif
-
-" MuPAD source
-au BufRead,BufNewFile *.mu setf mupad
-
-" Mush
-au BufNewFile,BufRead *.mush setf mush
-
-" Mutt setup file (also for Muttng)
-au BufNewFile,BufRead Mutt{ng,}rc setf muttrc
-
-" N1QL
-au BufRead,BufNewfile *.n1ql,*.nql setf n1ql
-
-" Nano
-au BufNewFile,BufRead */etc/nanorc,*.nanorc setf nanorc
-
-" Nastran input/DMAP
-"au BufNewFile,BufRead *.dat setf nastran
-
-" Natural
-au BufNewFile,BufRead *.NS[ACGLMNPS] setf natural
-
-" Noemutt setup file
-au BufNewFile,BufRead Neomuttrc setf neomuttrc
-
-" Netrc
-au BufNewFile,BufRead .netrc setf netrc
-
-" Nginx
-au BufNewFile,BufRead *.nginx,nginx*.conf,*nginx.conf,*/etc/nginx/*,*/usr/local/nginx/conf/*,*/nginx/*.conf setf nginx
-
-" Nim file
-au BufNewFile,BufRead *.nim,*.nims,*.nimble setf nim
-
-" Ninja file
-au BufNewFile,BufRead *.ninja setf ninja
-
-" Nix
-au BufRead,BufNewFile *.nix setf nix
-
-" NPM RC file
-au BufNewFile,BufRead npmrc,.npmrc setf dosini
-
-" Novell netware batch files
-au BufNewFile,BufRead *.ncf setf ncf
-
-" Nroff/Troff (*.ms and *.t are checked below)
-au BufNewFile,BufRead *.me
- \ if expand("<afile>") != "read.me" && expand("<afile>") != "click.me" |
- \ setf nroff |
- \ endif
-au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff
-au BufNewFile,BufRead *.[1-9] call dist#ft#FTnroff()
-
-" Nroff or Objective C++
-au BufNewFile,BufRead *.mm call dist#ft#FTmm()
-
-" Not Quite C
-au BufNewFile,BufRead *.nqc setf nqc
-
-" NSE - Nmap Script Engine - uses Lua syntax
-au BufNewFile,BufRead *.nse setf lua
-
-" NSIS
-au BufNewFile,BufRead *.nsi,*.nsh setf nsis
-
-" OCaml
-au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit,*.mlt,*.mlp,*.mlip,*.mli.cppo,*.ml.cppo setf ocaml
-
-" Occam
-au BufNewFile,BufRead *.occ setf occam
-
-" Octave
-au BufNewFile,BufRead octave.conf,.octaverc,octaverc setf octave
-
-" Omnimark
-au BufNewFile,BufRead *.xom,*.xin setf omnimark
-
-" OPAM
-au BufNewFile,BufRead opam,*.opam,*.opam.template setf opam
-
-" OpenFOAM
-au BufNewFile,BufRead [a-zA-Z0-9]*Dict\(.*\)\=,[a-zA-Z]*Properties\(.*\)\=,*Transport\(.*\),fvSchemes,fvSolution,fvConstrains,fvModels,*/constant/g,*/0\(\.orig\)\=/* call dist#ft#FTfoam()
-
-" OpenROAD
-au BufNewFile,BufRead *.or setf openroad
-
-" OPL
-au BufNewFile,BufRead *.[Oo][Pp][Ll] setf opl
-
-" OpenSCAD
-au BufNewFile,BufRead *.scad setf openscad
-
-" Oracle config file
-au BufNewFile,BufRead *.ora setf ora
-
-" Org
-au BufNewFile,BufRead *.org,*.org_archive setf org
-
-" Packet filter conf
-au BufNewFile,BufRead pf.conf setf pf
-
-" ini style config files, using # comments
-au BufNewFile,BufRead */etc/pacman.conf,mpv.conf setf confini
-
-" Pacman hooks
-au BufNewFile,BufRead *.hook
- \ if getline(1) == '[Trigger]' |
- \ setf conf |
- \ endif
-
-" Pam conf
-au BufNewFile,BufRead */etc/pam.conf setf pamconf
-
-" Pam environment
-au BufNewFile,BufRead pam_env.conf,.pam_environment setf pamenv
-
-" PApp
-au BufNewFile,BufRead *.papp,*.pxml,*.pxsl setf papp
-
-" Password file
-au BufNewFile,BufRead */etc/passwd,*/etc/passwd-,*/etc/passwd.edit,*/etc/shadow,*/etc/shadow-,*/etc/shadow.edit,*/var/backups/passwd.bak,*/var/backups/shadow.bak setf passwd
-
-" Pascal (also *.p, *.pp, *.inc)
-au BufNewFile,BufRead *.pas setf pascal
-
-" Pascal or Puppet manifest
-au BufNewFile,BufRead *.pp call dist#ft#FTpp()
-
-" Delphi or Lazarus program file
-au BufNewFile,BufRead *.dpr,*.lpr setf pascal
-
-" Free Pascal makefile definition file
-au BufNewFile,BufRead *.fpc setf fpcmake
-
-" Path of Exile item filter
-au BufNewFile,BufRead *.filter setf poefilter
-
-" PDF
-au BufNewFile,BufRead *.pdf setf pdf
-
-" PCMK - HAE - crm configure edit
-au BufNewFile,BufRead *.pcmk setf pcmk
-
-" Perl
-if has("fname_case")
- au BufNewFile,BufRead *.pl,*.PL call dist#ft#FTpl()
-else
- au BufNewFile,BufRead *.pl call dist#ft#FTpl()
-endif
-au BufNewFile,BufRead *.plx,*.al,*.psgi setf perl
-
-" Perl, XPM or XPM2
-au BufNewFile,BufRead *.pm
- \ if getline(1) =~ "XPM2" |
- \ setf xpm2 |
- \ elseif getline(1) =~ "XPM" |
- \ setf xpm |
- \ else |
- \ setf perl |
- \ endif
-
-" Perl POD
-au BufNewFile,BufRead *.pod setf pod
-
-" Php, php3, php4, etc.
-" Also Phtml (was used for PHP 2 in the past).
-" Also .ctp for Cake template file.
-" Also .phpt for php tests.
-" Also .theme for Drupal theme files.
-au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp,*.phpt,*.theme setf php
-
-" PHP config
-au BufNewFile,BufRead php.ini-* setf dosini
-
-" Pike and Cmod
-au BufNewFile,BufRead *.pike,*.pmod setf pike
-au BufNewFile,BufRead *.cmod setf cmod
-
-" Pinfo config
-au BufNewFile,BufRead */etc/pinforc,*/.pinforc setf pinfo
-
-" Palm Resource compiler
-au BufNewFile,BufRead *.rcp setf pilrc
-
-" Pine config
-au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex setf pine
-
-" Pipenv Pipfiles
-au BufNewFile,BufRead Pipfile setf toml
-au BufNewFile,BufRead Pipfile.lock setf json
-
-" PL/1, PL/I
-au BufNewFile,BufRead *.pli,*.pl1 setf pli
-
-" PL/M (also: *.inp)
-au BufNewFile,BufRead *.plm,*.p36,*.pac setf plm
-
-" PL/SQL
-au BufNewFile,BufRead *.pls,*.plsql setf plsql
-
-" PLP
-au BufNewFile,BufRead *.plp setf plp
-
-" PO and PO template (GNU gettext)
-au BufNewFile,BufRead *.po,*.pot setf po
-
-" Postfix main config
-au BufNewFile,BufRead main.cf setf pfmain
-
-" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator)
-au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai setf postscr
-
-" PostScript Printer Description
-au BufNewFile,BufRead *.ppd setf ppd
-
-" Povray
-au BufNewFile,BufRead *.pov setf pov
-
-" Povray configuration
-au BufNewFile,BufRead .povrayrc setf povini
-
-" Povray, Pascal, PHP or assembly
-au BufNewFile,BufRead *.inc call dist#ft#FTinc()
-
-" PowerShell
-au BufNewFile,BufRead *.ps1,*.psd1,*.psm1,*.pssc setf ps1
-au BufNewFile,BufRead *.ps1xml setf ps1xml
-au BufNewFile,BufRead *.cdxml,*.psc1 setf xml
-
-" Printcap and Termcap
-au BufNewFile,BufRead *printcap
- \ let b:ptcap_type = "print" | setf ptcap
-au BufNewFile,BufRead *termcap
- \ let b:ptcap_type = "term" | setf ptcap
-
-" Prisma
-au BufRead,BufNewFile *.prisma setf prisma
-
-" PCCTS / ANTLR
-"au BufNewFile,BufRead *.g setf antlr
-au BufNewFile,BufRead *.g setf pccts
-
-" PPWizard
-au BufNewFile,BufRead *.it,*.ih setf ppwiz
-
-" Pug
-au BufRead,BufNewFile *.pug setf pug
-
-" Puppet
-au BufNewFile,BufRead Puppetfile setf ruby
-
-" Embedded Puppet
-au BufNewFile,BufRead *.epp setf epuppet
-
-" Obj 3D file format
-" TODO: is there a way to avoid MS-Windows Object files?
-au BufNewFile,BufRead *.obj setf obj
-
-" Oracle Pro*C/C++
-au BufNewFile,BufRead *.pc setf proc
-
-" Privoxy actions file
-au BufNewFile,BufRead *.action setf privoxy
-
-" Procmail
-au BufNewFile,BufRead .procmail,.procmailrc setf procmail
-
-" Progress or CWEB
-au BufNewFile,BufRead *.w call dist#ft#FTprogress_cweb()
-
-" Progress or assembly
-au BufNewFile,BufRead *.i call dist#ft#FTprogress_asm()
-
-" Progress or Pascal
-au BufNewFile,BufRead *.p call dist#ft#FTprogress_pascal()
-
-" Software Distributor Product Specification File (POSIX 1387.2-1995)
-au BufNewFile,BufRead *.psf setf psf
-au BufNewFile,BufRead INDEX,INFO
- \ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' |
- \ setf psf |
- \ endif
-
-" Prolog
-au BufNewFile,BufRead *.pdb setf prolog
-
-" Promela
-au BufNewFile,BufRead *.pml setf promela
-
-" Property Specification Language (PSL)
-au BufNewFile,BufRead *.psl setf psl
-
-" Google protocol buffers
-au BufNewFile,BufRead *.proto setf proto
-au BufNewFile,BufRead *.pbtxt setf pbtxt
-
-" Poke
-au BufNewFile,BufRead *.pk setf poke
-
-" Protocols
-au BufNewFile,BufRead */etc/protocols setf protocols
-
-" Pyret
-au BufNewFile,BufRead *.arr setf pyret
-
-" Pyrex
-au BufNewFile,BufRead *.pyx,*.pxd setf pyrex
-
-" Python, Python Shell Startup and Python Stub Files
-" Quixote (Python-based web framework)
-au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc setf python
-au BufNewFile,BufRead *.ptl,*.pyi,SConstruct setf python
-
-" QL
-au BufRead,BufNewFile *.ql,*.qll setf ql
-
-" Quarto
-au BufRead,BufNewFile *.qmd setf quarto
-
-" Radiance
-au BufNewFile,BufRead *.rad,*.mat setf radiance
-
-" Raku (formerly Perl6)
-au BufNewFile,BufRead *.pm6,*.p6,*.t6,*.pod6,*.raku,*.rakumod,*.rakudoc,*.rakutest setf raku
-
-" Ratpoison config/command files
-au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison
-
-" RCS file
-au BufNewFile,BufRead *\,v setf rcs
-
-" Readline
-au BufNewFile,BufRead .inputrc,inputrc setf readline
-
-" Registry for MS-Windows
-au BufNewFile,BufRead *.reg
- \ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif
-
-" Renderman Interface Bytestream
-au BufNewFile,BufRead *.rib setf rib
-
-" Rego Policy Language
-au BufNewFile,BufRead *.rego setf rego
-
-" Rexx
-au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit setf rexx
-
-" R Help file
-if has("fname_case")
- au BufNewFile,BufRead *.rd,*.Rd setf rhelp
-else
- au BufNewFile,BufRead *.rd setf rhelp
-endif
-
-" R noweb file
-if has("fname_case")
- au BufNewFile,BufRead *.Rnw,*.rnw,*.Snw,*.snw setf rnoweb
-else
- au BufNewFile,BufRead *.rnw,*.snw setf rnoweb
-endif
-
-" R Markdown file
-if has("fname_case")
- au BufNewFile,BufRead *.Rmd,*.rmd,*.Smd,*.smd setf rmd
-else
- au BufNewFile,BufRead *.rmd,*.smd setf rmd
-endif
-
-" R profile file
-au BufNewFile,BufRead .Rprofile,Rprofile,Rprofile.site setf r
-
-" RSS looks like XML
-au BufNewFile,BufRead *.rss setf xml
-
-" R reStructuredText file
-if has("fname_case")
- au BufNewFile,BufRead *.Rrst,*.rrst,*.Srst,*.srst setf rrst
-else
- au BufNewFile,BufRead *.rrst,*.srst setf rrst
-endif
-
-" Rexx, Rebol or R
-au BufNewFile,BufRead *.r,*.R call dist#ft#FTr()
-
-" Remind
-au BufNewFile,BufRead .reminders,*.remind,*.rem setf remind
-
-" ReScript
-au BufNewFile,BufRead *.res,*.resi setf rescript
-
-" Resolv.conf
-au BufNewFile,BufRead resolv.conf setf resolv
-
-" Relax NG Compact
-au BufNewFile,BufRead *.rnc setf rnc
-
-" Relax NG XML
-au BufNewFile,BufRead *.rng setf rng
-
-" RPL/2
-au BufNewFile,BufRead *.rpl setf rpl
-
-" Robot Framework
-au BufNewFile,BufRead *.robot,*.resource setf robot
-
-" Robots.txt
-au BufNewFile,BufRead robots.txt setf robots
-
-" Rpcgen
-au BufNewFile,BufRead *.x setf rpcgen
-
-" MikroTik RouterOS script
-au BufRead,BufNewFile *.rsc setf routeros
-
-" reStructuredText Documentation Format
-au BufNewFile,BufRead *.rst setf rst
-
-" RTF
-au BufNewFile,BufRead *.rtf setf rtf
-
-" Interactive Ruby shell
-au BufNewFile,BufRead .irbrc,irbrc setf ruby
-
-" Ruby
-au BufNewFile,BufRead *.rb,*.rbw setf ruby
-
-" RubyGems
-au BufNewFile,BufRead *.gemspec setf ruby
-
-" RBS (Ruby Signature)
-au BufNewFile,BufRead *.rbs setf rbs
-
-" Rackup
-au BufNewFile,BufRead *.ru setf ruby
-
-" Bundler
-au BufNewFile,BufRead Gemfile setf ruby
-
-" Ruby on Rails
-au BufNewFile,BufRead *.builder,*.rxml,*.rjs setf ruby
-
-" Rantfile and Rakefile is like Ruby
-au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake setf ruby
-
-" Rust
-au BufNewFile,BufRead *.rs setf rust
-au BufNewFile,BufRead Cargo.lock,*/.cargo/config,*/.cargo/credentials setf toml
-
-" S-lang (or shader language, or SmallLisp)
-au BufNewFile,BufRead *.sl setf slang
-
-" Samba config
-au BufNewFile,BufRead smb.conf setf samba
-
-" SAS script
-au BufNewFile,BufRead *.sas setf sas
-
-" Sass
-au BufNewFile,BufRead *.sass setf sass
-
-" Sather
-au BufNewFile,BufRead *.sa setf sather
-
-" Scala
-au BufNewFile,BufRead *.scala setf scala
-
-" SBT - Scala Build Tool
-au BufNewFile,BufRead *.sbt setf sbt
-
-" SuperCollider
-au BufNewFile,BufRead *.sc call dist#ft#FTsc()
-
-au BufNewFile,BufRead *.quark setf supercollider
-
-" scdoc
-au BufNewFile,BufRead *.scd call dist#ft#FTscd()
-
-" Scilab
-au BufNewFile,BufRead *.sci,*.sce setf scilab
-
-
-" SCSS
-au BufNewFile,BufRead *.scss setf scss
-
-" SD: Streaming Descriptors
-au BufNewFile,BufRead *.sd setf sd
-
-" SDL
-au BufNewFile,BufRead *.sdl,*.pr setf sdl
-
-" sed
-au BufNewFile,BufRead *.sed setf sed
-
-" SubRip
-au BufNewFile,BufRead *.srt setf srt
-
-" SubStation Alpha
-au BufNewFile,BufRead *.ass,*.ssa setf ssa
-
-" svelte
-au BufNewFile,BufRead *.svelte setf svelte
-
-" Sieve (RFC 3028, 5228)
-au BufNewFile,BufRead *.siv,*.sieve setf sieve
-
-" Sendmail
-au BufNewFile,BufRead sendmail.cf setf sm
-
-" Sendmail .mc files are actually m4. Could also be MS Message text file or
-" Maxima.
-au BufNewFile,BufRead *.mc call dist#ft#McSetf()
-
-" Services
-au BufNewFile,BufRead */etc/services setf services
-
-" Service Location config
-au BufNewFile,BufRead */etc/slp.conf setf slpconf
-
-" Service Location registration
-au BufNewFile,BufRead */etc/slp.reg setf slpreg
-
-" Service Location SPI
-au BufNewFile,BufRead */etc/slp.spi setf slpspi
-
-" Setserial config
-au BufNewFile,BufRead */etc/serial.conf setf setserial
-
-" SGML
-au BufNewFile,BufRead *.sgm,*.sgml
- \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' |
- \ setf sgmllnx |
- \ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
- \ let b:docbk_type = "sgml" |
- \ let b:docbk_ver = 4 |
- \ setf docbk |
- \ else |
- \ setf sgml |
- \ endif
-
-" SGMLDECL
-au BufNewFile,BufRead *.decl,*.dcl,*.dec
- \ if getline(1).getline(2).getline(3) =~? '^<!SGML' |
- \ setf sgmldecl |
- \ endif
-
-" SGML catalog file
-au BufNewFile,BufRead catalog setf catalog
-
-" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
-" Gentoo ebuilds, Arch Linux PKGBUILDs and Alpine Linux APKBUILDs are actually
-" bash scripts.
-" NOTE: Patterns ending in a star are further down, these have lower priority.
-au BufNewFile,BufRead .bashrc,bashrc,bash.bashrc,.bash[_-]profile,.bash[_-]logout,.bash[_-]aliases,bash-fc[-.],*.ebuild,*.bash,*.eclass,PKGBUILD,APKBUILD call dist#ft#SetFileTypeSH("bash")
-au BufNewFile,BufRead .kshrc,*.ksh call dist#ft#SetFileTypeSH("ksh")
-au BufNewFile,BufRead */etc/profile,.profile,*.sh,*.env call dist#ft#SetFileTypeSH(getline(1))
-
-" Shell script (Arch Linux) or PHP file (Drupal)
-au BufNewFile,BufRead *.install
- \ if getline(1) =~ '<?php' |
- \ setf php |
- \ else |
- \ call dist#ft#SetFileTypeSH("bash") |
- \ endif
-
-" tcsh scripts (patterns ending in a star further below)
-au BufNewFile,BufRead .tcshrc,*.tcsh,tcsh.tcshrc,tcsh.login call dist#ft#SetFileTypeShell("tcsh")
-
-" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh)
-" (patterns ending in a start further below)
-au BufNewFile,BufRead .login,.cshrc,csh.cshrc,csh.login,csh.logout,*.csh,.alias call dist#ft#CSH()
-
-" Zig
-au BufNewFile,BufRead *.zig setf zig
-
-" Z-Shell script (patterns ending in a star further below)
-au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks setf zsh
-au BufNewFile,BufRead .zshrc,.zshenv,.zlogin,.zlogout,.zcompdump setf zsh
-au BufNewFile,BufRead *.zsh setf zsh
-
-" Scheme
-au BufNewFile,BufRead *.scm,*.ss,*.sld,*.rkt,*.rktd,*.rktl setf scheme
-
-" Screen RC
-au BufNewFile,BufRead .screenrc,screenrc setf screen
-
-" Sexplib
-au BufNewFile,BufRead *.sexp setf sexplib
-
-" Simula
-au BufNewFile,BufRead *.sim setf simula
-
-" SINDA
-au BufNewFile,BufRead *.sin,*.s85 setf sinda
-
-" SiSU
-au BufNewFile,BufRead *.sst,*.ssm,*.ssi,*.-sst,*._sst setf sisu
-au BufNewFile,BufRead *.sst.meta,*.-sst.meta,*._sst.meta setf sisu
-
-" SKILL
-au BufNewFile,BufRead *.il,*.ils,*.cdf setf skill
-
-" SLRN
-au BufNewFile,BufRead .slrnrc setf slrnrc
-au BufNewFile,BufRead *.score setf slrnsc
-
-" Smalltalk
-au BufNewFile,BufRead *.st setf st
-
-" Smalltalk (and Rexx, TeX, and Visual Basic)
-au BufNewFile,BufRead *.cls call dist#ft#FTcls()
-
-" Smarty templates
-au BufNewFile,BufRead *.tpl setf smarty
-
-" SMIL or XML
-au BufNewFile,BufRead *.smil
- \ if getline(1) =~ '<?\s*xml.*?>' |
- \ setf xml |
- \ else |
- \ setf smil |
- \ endif
-
-" SMIL or SNMP MIB file
-au BufNewFile,BufRead *.smi
- \ if getline(1) =~ '\<smil\>' |
- \ setf smil |
- \ else |
- \ setf mib |
- \ endif
-
-" SMITH
-au BufNewFile,BufRead *.smt,*.smith setf smith
-
-" Snobol4 and spitbol
-au BufNewFile,BufRead *.sno,*.spt setf snobol4
-
-" SNMP MIB files
-au BufNewFile,BufRead *.mib,*.my setf mib
-
-" Snort Configuration
-au BufNewFile,BufRead *.hog,snort.conf,vision.conf setf hog
-au BufNewFile,BufRead *.rules call dist#ft#FTRules()
-
-" Solidity
-au BufRead,BufNewFile *.sol setf solidity
-
-" SPARQL queries
-au BufNewFile,BufRead *.rq,*.sparql setf sparql
-
-" Spec (Linux RPM)
-au BufNewFile,BufRead *.spec setf spec
-
-" Speedup (AspenTech plant simulator)
-au BufNewFile,BufRead *.speedup,*.spdata,*.spd setf spup
-
-" Slice
-au BufNewFile,BufRead *.ice setf slice
-
-" Microsoft Visual Studio Solution
-au BufNewFile,BufRead *.sln setf solution
-au BufNewFile,BufRead *.slnf setf json
-
-" Spice
-au BufNewFile,BufRead *.sp,*.spice setf spice
-
-" Spyce
-au BufNewFile,BufRead *.spy,*.spi setf spyce
-
-" Squid
-au BufNewFile,BufRead squid.conf setf squid
-
-" SQL for Oracle Designer
-au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks setf sql
-
-" SQL
-au BufNewFile,BufRead *.sql call dist#ft#SQL()
-
-" SQLJ
-au BufNewFile,BufRead *.sqlj setf sqlj
-
-" SQR
-au BufNewFile,BufRead *.sqr,*.sqi setf sqr
-
-" Squirrel
-au BufNewFile,BufRead *.nut setf squirrel
-
-" OpenSSH configuration
-au BufNewFile,BufRead ssh_config,*/.ssh/config,*/.ssh/*.conf setf sshconfig
-au BufNewFile,BufRead */etc/ssh/ssh_config.d/*.conf setf sshconfig
-
-" OpenSSH server configuration
-au BufNewFile,BufRead sshd_config setf sshdconfig
-au BufNewFile,BufRead */etc/ssh/sshd_config.d/*.conf setf sshdconfig
-
-" Stata
-au BufNewFile,BufRead *.ado,*.do,*.imata,*.mata setf stata
-" Also *.class, but not when it's a Java bytecode file
-au BufNewFile,BufRead *.class
- \ if getline(1) !~ "^\xca\xfe\xba\xbe" | setf stata | endif
-
-" SMCL
-au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl setf smcl
-
-" Stored Procedures
-au BufNewFile,BufRead *.stp setf stp
-
-" Standard ML
-au BufNewFile,BufRead *.sml setf sml
-
-" Sratus VOS command macro
-au BufNewFile,BufRead *.cm setf voscm
-
-" Swift
-au BufNewFile,BufRead *.swift setf swift
-au BufNewFile,BufRead *.swift.gyb setf swiftgyb
-
-" Swift Intermediate Language or SILE
-au BufNewFile,BufRead *.sil call dist#ft#FTsil()
-
-" Sysctl
-au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf setf sysctl
-
-" Systemd unit files
-au BufNewFile,BufRead */systemd/*.{automount,dnssd,link,mount,netdev,network,nspawn,path,service,slice,socket,swap,target,timer} setf systemd
-" Systemd overrides
-au BufNewFile,BufRead */etc/systemd/*.conf.d/*.conf setf systemd
-au BufNewFile,BufRead */etc/systemd/system/*.d/*.conf setf systemd
-au BufNewFile,BufRead */.config/systemd/user/*.d/*.conf setf systemd
-" Systemd temp files
-au BufNewFile,BufRead */etc/systemd/system/*.d/.#* setf systemd
-au BufNewFile,BufRead */etc/systemd/system/.#* setf systemd
-au BufNewFile,BufRead */.config/systemd/user/*.d/.#* setf systemd
-au BufNewFile,BufRead */.config/systemd/user/.#* setf systemd
-
-" Synopsys Design Constraints
-au BufNewFile,BufRead *.sdc setf sdc
-
-" Sudoers
-au BufNewFile,BufRead */etc/sudoers,sudoers.tmp setf sudoers
-
-" SVG (Scalable Vector Graphics)
-au BufNewFile,BufRead *.svg setf svg
-
-" Surface
-au BufRead,BufNewFile *.sface setf surface
-
-" Tads (or Nroff or Perl test file)
-au BufNewFile,BufRead *.t
- \ if !dist#ft#FTnroff() && !dist#ft#FTperl() | setf tads | endif
-
-" Tags
-au BufNewFile,BufRead tags setf tags
-
-" TAK
-au BufNewFile,BufRead *.tak setf tak
-
-" Task
-au BufRead,BufNewFile {pending,completed,undo}.data setf taskdata
-au BufRead,BufNewFile *.task setf taskedit
-
-" Tcl (JACL too)
-au BufNewFile,BufRead *.tcl,*.tm,*.tk,*.itcl,*.itk,*.jacl,.tclshrc,.wishrc setf tcl
-
-" Teal
-au BufRead,BufNewFile *.tl setf teal
-
-" TealInfo
-au BufNewFile,BufRead *.tli setf tli
-
-" Telix Salt
-au BufNewFile,BufRead *.slt setf tsalt
-
-" Tera Term Language or Turtle
-au BufRead,BufNewFile *.ttl
- \ if getline(1) =~ '^@\?\(prefix\|base\)' |
- \ setf turtle |
- \ else |
- \ setf teraterm |
- \ endif
-
-" Terminfo
-au BufNewFile,BufRead *.ti setf terminfo
-
-" Terraform variables
-au BufRead,BufNewFile *.tfvars setf terraform-vars
-
-" TeX
-au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
-au BufNewFile,BufRead *.tex call dist#ft#FTtex()
-
-" ConTeXt
-au BufNewFile,BufRead *.mkii,*.mkiv,*.mkvi,*.mkxl,*.mklx setf context
-
-" Texinfo
-au BufNewFile,BufRead *.texinfo,*.texi,*.txi setf texinfo
-
-" TeX configuration
-au BufNewFile,BufRead texmf.cnf setf texmf
-
-" Tidy config
-au BufNewFile,BufRead .tidyrc,tidyrc,tidy.conf setf tidy
-
-" TF mud client
-au BufNewFile,BufRead .tfrc,tfrc setf tf
-
-" TF mud client or terraform
-au BufNewFile,BufRead *.tf call dist#ft#FTtf()
-
-" TLA+
-au BufNewFile,BufRead *.tla setf tla
-
-" tmux configuration
-au BufNewFile,BufRead {.,}tmux*.conf setf tmux
-
-" TOML
-au BufNewFile,BufRead *.toml setf toml
-
-" TPP - Text Presentation Program
-au BufNewFile,BufRead *.tpp setf tpp
-
-" Treetop
-au BufRead,BufNewFile *.treetop setf treetop
-
-" Trustees
-au BufNewFile,BufRead trustees.conf setf trustees
-
-" TSS - Geometry
-au BufNewFile,BufReadPost *.tssgm setf tssgm
-
-" TSS - Optics
-au BufNewFile,BufReadPost *.tssop setf tssop
-
-" TSS - Command Line (temporary)
-au BufNewFile,BufReadPost *.tsscl setf tsscl
-
-" TSV Files
-au BufNewFile,BufRead *.tsv setf tsv
-
-" Tutor mode
-au BufNewFile,BufReadPost *.tutor setf tutor
-
-" TWIG files
-au BufNewFile,BufReadPost *.twig setf twig
-
-" TypeScript or Qt translation file (which is XML)
-au BufNewFile,BufReadPost *.ts
- \ if getline(1) =~ '<?xml' |
- \ setf xml |
- \ else |
- \ setf typescript |
- \ endif
-
-" TypeScript module and common
-au BufNewFile,BufRead *.mts,*.cts setf typescript
-
-" TypeScript with React
-au BufNewFile,BufRead *.tsx setf typescriptreact
-
-" Motif UIT/UIL files
-au BufNewFile,BufRead *.uit,*.uil setf uil
-
-" Udev conf
-au BufNewFile,BufRead */etc/udev/udev.conf setf udevconf
-
-" Udev permissions
-au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm
-"
-" Udev symlinks config
-au BufNewFile,BufRead */etc/udev/cdsymlinks.conf setf sh
-
-" UnrealScript
-au BufNewFile,BufRead *.uc setf uc
-
-" Updatedb
-au BufNewFile,BufRead */etc/updatedb.conf setf updatedb
-
-" Upstart (init(8)) config files
-au BufNewFile,BufRead */usr/share/upstart/*.conf setf upstart
-au BufNewFile,BufRead */usr/share/upstart/*.override setf upstart
-au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override setf upstart
-au BufNewFile,BufRead */.init/*.conf,*/.init/*.override setf upstart
-au BufNewFile,BufRead */.config/upstart/*.conf setf upstart
-au BufNewFile,BufRead */.config/upstart/*.override setf upstart
-
-" Vala
-au BufNewFile,BufRead *.vala setf vala
-
-" VDF
-au BufNewFile,BufRead *.vdf setf vdf
-
-" VDM
-au BufRead,BufNewFile *.vdmpp,*.vpp setf vdmpp
-au BufRead,BufNewFile *.vdmrt setf vdmrt
-au BufRead,BufNewFile *.vdmsl,*.vdm setf vdmsl
-
-" Vera
-au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera
-
-" Vagrant (uses Ruby syntax)
-au BufNewFile,BufRead Vagrantfile setf ruby
-
-" Verilog HDL
-au BufNewFile,BufRead *.v setf verilog
-
-" Verilog-AMS HDL
-au BufNewFile,BufRead *.va,*.vams setf verilogams
-
-" SystemVerilog
-au BufNewFile,BufRead *.sv,*.svh setf systemverilog
-
-" VHDL
-au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst,*.vho setf vhdl
-
-" Vim script
-au BufNewFile,BufRead *.vim,*.vba,.exrc,_exrc setf vim
-
-" Viminfo file
-au BufNewFile,BufRead .viminfo,_viminfo setf viminfo
-
-" Virata Config Script File or Drupal module
-au BufRead,BufNewFile *.hw,*.module,*.pkg
- \ if getline(1) =~ '<?php' |
- \ setf php |
- \ else |
- \ setf virata |
- \ endif
-
-" Visual Basic (also uses *.bas) or FORM
-au BufNewFile,BufRead *.frm call dist#ft#FTfrm()
-
-" SaxBasic is close to Visual Basic
-au BufNewFile,BufRead *.sba setf vb
-
-" Vgrindefs file
-au BufNewFile,BufRead vgrindefs setf vgrindefs
-
-" VRML V1.0c
-au BufNewFile,BufRead *.wrl setf vrml
-
-" Vroom (vim testing and executable documentation)
-au BufNewFile,BufRead *.vroom setf vroom
-
-" Vue.js Single File Component
-au BufNewFile,BufRead *.vue setf vue
-
-" WebAssembly
-au BufNewFile,BufRead *.wast,*.wat setf wast
-
-" Webmacro
-au BufNewFile,BufRead *.wm setf webmacro
-
-" Wget config
-au BufNewFile,BufRead .wgetrc,wgetrc setf wget
-
-" Wget2 config
-au BufNewFile,BufRead .wget2rc,wget2rc setf wget2
-
-" Website MetaLanguage
-au BufNewFile,BufRead *.wml setf wml
-
-" Winbatch
-au BufNewFile,BufRead *.wbt setf winbatch
-
-" WSML
-au BufNewFile,BufRead *.wsml setf wsml
-
-" WPL
-au BufNewFile,BufRead *.wpl setf xml
-
-" WvDial
-au BufNewFile,BufRead wvdial.conf,.wvdialrc setf wvdial
-
-" CVS RC file
-au BufNewFile,BufRead .cvsrc setf cvsrc
-
-" CVS commit file
-au BufNewFile,BufRead cvs\d\+ setf cvs
-
-" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment
-" lines in a WEB file).
-au BufNewFile,BufRead *.web
- \ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" |
- \ setf web |
- \ else |
- \ setf winbatch |
- \ endif
-
-" Windows Scripting Host and Windows Script Component
-au BufNewFile,BufRead *.ws[fc] setf wsh
-
-" XHTML
-au BufNewFile,BufRead *.xhtml,*.xht setf xhtml
-
-" X Pixmap (dynamically sets colors, this used to trigger on BufEnter to make
-" it work better, but that breaks setting 'filetype' manually)
-au BufNewFile,BufRead *.xpm
- \ if getline(1) =~ "XPM2" |
- \ setf xpm2 |
- \ else |
- \ setf xpm |
- \ endif
-au BufNewFile,BufRead *.xpm2 setf xpm2
-
-" XFree86 config
-au BufNewFile,BufRead XF86Config
- \ if getline(1) =~ '\<XConfigurator\>' |
- \ let b:xf86conf_xfree86_version = 3 |
- \ endif |
- \ setf xf86conf
-au BufNewFile,BufRead */xorg.conf.d/*.conf
- \ let b:xf86conf_xfree86_version = 4 |
- \ setf xf86conf
-
-" Xorg config
-au BufNewFile,BufRead xorg.conf,xorg.conf-4 let b:xf86conf_xfree86_version = 4 | setf xf86conf
-
-" Xinetd conf
-au BufNewFile,BufRead */etc/xinetd.conf setf xinetd
-
-" XS Perl extension interface language
-au BufNewFile,BufRead *.xs setf xs
-
-" X resources file
-au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults
-
-" Xmath
-au BufNewFile,BufRead *.msc,*.msf setf xmath
-au BufNewFile,BufRead *.ms
- \ if !dist#ft#FTnroff() | setf xmath | endif
-
-" XML specific variants: docbk and xbl
-au BufNewFile,BufRead *.xml call dist#ft#FTxml()
-
-" XMI (holding UML models) is also XML
-au BufNewFile,BufRead *.xmi setf xml
-
-" CSPROJ files are Visual Studio.NET's XML-based C# project config files
-au BufNewFile,BufRead *.csproj,*.csproj.user setf xml
-
-" FSPROJ files are Visual Studio.NET's XML-based F# project config files
-au BufNewFile,BufRead *.fsproj,*.fsproj.user setf xml
-
-" VBPROJ files are Visual Studio.NET's XML-based Visual Basic project config files
-au BufNewFile,BufRead *.vbproj,*.vbproj.user setf xml
-
-" Qt Linguist translation source and Qt User Interface Files are XML
-" However, for .ts TypeScript is more common.
-au BufNewFile,BufRead *.ui setf xml
-
-" TPM's are RDF-based descriptions of TeX packages (Nikolai Weibull)
-au BufNewFile,BufRead *.tpm setf xml
-
-" Xdg menus
-au BufNewFile,BufRead */etc/xdg/menus/*.menu setf xml
-
-" ATI graphics driver configuration
-au BufNewFile,BufRead fglrxrc setf xml
-
-" Web Services Description Language (WSDL)
-au BufNewFile,BufRead *.wsdl setf xml
-
-" XLIFF (XML Localisation Interchange File Format) is also XML
-au BufNewFile,BufRead *.xlf setf xml
-au BufNewFile,BufRead *.xliff setf xml
-
-" XML User Interface Language
-au BufNewFile,BufRead *.xul setf xml
-
-" X11 xmodmap (also see below)
-au BufNewFile,BufRead *Xmodmap setf xmodmap
-
-" Xquery
-au BufNewFile,BufRead *.xq,*.xql,*.xqm,*.xquery,*.xqy setf xquery
-
-" XSD
-au BufNewFile,BufRead *.xsd setf xsd
-
-" Xslt
-au BufNewFile,BufRead *.xsl,*.xslt setf xslt
-
-" Yacc
-au BufNewFile,BufRead *.yy,*.yxx,*.y++ setf yacc
-
-" Yacc or racc
-au BufNewFile,BufRead *.y call dist#ft#FTy()
-
-" Yaml
-au BufNewFile,BufRead *.yaml,*.yml setf yaml
-
-" Raml
-au BufNewFile,BufRead *.raml setf raml
-
-" yum conf (close enough to dosini)
-au BufNewFile,BufRead */etc/yum.conf setf dosini
-
-" YANG
-au BufRead,BufNewFile *.yang setf yang
-
-" Zimbu
-au BufNewFile,BufRead *.zu setf zimbu
-" Zimbu Templates
-au BufNewFile,BufRead *.zut setf zimbutempl
-
-" Zope
-" dtml (zope dynamic template markup language), pt (zope page template),
-" cpt (zope form controller page template)
-au BufNewFile,BufRead *.dtml,*.pt,*.cpt call dist#ft#FThtml()
-" zsql (zope sql method)
-au BufNewFile,BufRead *.zsql call dist#ft#SQL()
-
-" Z80 assembler asz80
-au BufNewFile,BufRead *.z8a setf z8a
-
-augroup END
-
-
-" Source the user-specified filetype file, for backwards compatibility with
-" Vim 5.x.
-if exists("myfiletypefile") && filereadable(expand(myfiletypefile))
- execute "source " . myfiletypefile
-endif
-
-
-" Check for "*" after loading myfiletypefile, so that scripts.vim is only used
-" when there are no matching file name extensions.
-" Don't do this for compressed files.
-augroup filetypedetect
-au BufNewFile,BufRead *
- \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
- \ | runtime! scripts.vim | endif
-au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
-
-
-" Plain text files, needs to be far down to not override others. This avoids
-" the "conf" type being used if there is a line starting with '#'.
-" But before patterns matching everything in a directory.
-au BufNewFile,BufRead *.text,README,LICENSE,COPYING,AUTHORS setf text
-
-
-" Extra checks for when no filetype has been detected now. Mostly used for
-" patterns that end in "*". E.g., "zsh*" matches "zsh.vim", but that's a Vim
-" script file.
-" Most of these should call s:StarSetf() to avoid names ending in .gz and the
-" like are used.
-
-" More Apache style config files
-au BufNewFile,BufRead */etc/proftpd/*.conf*,*/etc/proftpd/conf.*/* call s:StarSetf('apachestyle')
-au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle')
-
-" More Apache config files
-au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf* call s:StarSetf('apache')
-au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.*/*,*/etc/httpd/mods-*/*,*/etc/httpd/sites-*/*,*/etc/httpd/conf.d/*.conf* call s:StarSetf('apache')
-
-" APT config file
-au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} call s:StarSetf('aptconf')
-
-" Asterisk config file
-au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk')
-au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm')
-
-" Bazaar version control
-au BufNewFile,BufRead bzr_log.* setf bzr
-
-" Bazel build file
-if !has("fname_case")
- au BufNewFile,BufRead *.BUILD,BUILD setf bzl
-endif
-
-" BIND zone
-au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone')
-
-au BufNewFile,BufRead cabal.project.* call s:StarSetf('cabalproject')
-
-" Calendar
-au BufNewFile,BufRead */.calendar/*,
- \*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
- \ call s:StarSetf('calendar')
-
-" Changelog
-au BufNewFile,BufRead [cC]hange[lL]og*
- \ if getline(1) =~ '; urgency='
- \| call s:StarSetf('debchangelog')
- \|else
- \| call s:StarSetf('changelog')
- \|endif
-
-" Crontab
-au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/* call s:StarSetf('crontab')
-
-" dnsmasq(8) configuration
-au BufNewFile,BufRead */etc/dnsmasq.d/* call s:StarSetf('dnsmasq')
-
-" Dockerfile
-au BufNewFile,BufRead Dockerfile.*,Containerfile.* call s:StarSetf('dockerfile')
-
-" Dracula
-au BufNewFile,BufRead drac.* call s:StarSetf('dracula')
-
-" Fvwm
-au BufNewFile,BufRead */.fvwm/* call s:StarSetf('fvwm')
-au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
- \ let b:fvwm_version = 1 | call s:StarSetf('fvwm')
-au BufNewFile,BufRead *fvwm2rc*
- \ if expand("<afile>:e") == "m4"
- \| call s:StarSetf('fvwm2m4')
- \|else
- \| let b:fvwm_version = 2 | call s:StarSetf('fvwm')
- \|endif
-
-" Gedcom
-au BufNewFile,BufRead */tmp/lltmp* call s:StarSetf('gedcom')
-
-" Git
-au BufNewFile,BufRead */.gitconfig.d/*,*/etc/gitconfig.d/* call s:StarSetf('gitconfig')
-
-" Gitolite
-au BufNewFile,BufRead */gitolite-admin/conf/* call s:StarSetf('gitolite')
-
-" GTK RC
-au BufNewFile,BufRead .gtkrc*,gtkrc* call s:StarSetf('gtkrc')
-
-" Jam
-au BufNewFile,BufRead Prl*.*,JAM*.* call s:StarSetf('jam')
-
-" Jargon
-au! BufNewFile,BufRead *jarg*
- \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE'
- \| call s:StarSetf('jargon')
- \|endif
-
-" Java Properties resource file (note: doesn't catch font.properties.pl)
-au BufNewFile,BufRead *.properties_??_??_* call s:StarSetf('jproperties')
-
-" Kconfig
-au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig')
-
-" Lilo: Linux loader
-au BufNewFile,BufRead lilo.conf* call s:StarSetf('lilo')
-
-" Libsensors
-au BufNewFile,BufRead */etc/sensors.d/[^.]* call s:StarSetf('sensors')
-
-" Logcheck
-au BufNewFile,BufRead */etc/logcheck/*.d*/* call s:StarSetf('logcheck')
-
-" Makefile
-au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make')
-
-" Ruby Makefile
-au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby')
-
-" Mail (also matches muttrc.vim, so this is below the other checks)
-au BufNewFile,BufRead {neo,}mutt[[:alnum:]._-]\\\{6\} setf mail
-
-au BufNewFile,BufRead reportbug-* call s:StarSetf('mail')
-
-" Modconf
-au BufNewFile,BufRead */etc/modutils/*
- \ if executable(expand("<afile>")) != 1
- \| call s:StarSetf('modconf')
- \|endif
-au BufNewFile,BufRead */etc/modprobe.* call s:StarSetf('modconf')
-
-" Mutt setup files (must be before catch *.rc)
-au BufNewFile,BufRead */etc/Muttrc.d/* call s:StarSetf('muttrc')
-
-" Mutt setup file
-au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc* call s:StarSetf('muttrc')
-au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc* call s:StarSetf('muttrc')
-
-" Neomutt setup file
-au BufNewFile,BufRead .neomuttrc*,*/.neomutt/neomuttrc* call s:StarSetf('neomuttrc')
-au BufNewFile,BufRead neomuttrc*,Neomuttrc* call s:StarSetf('neomuttrc')
-
-" Nroff macros
-au BufNewFile,BufRead tmac.* call s:StarSetf('nroff')
-
-" OpenBSD hostname.if
-au BufNewFile,BufRead */etc/hostname.* call s:StarSetf('config')
-
-" Pam conf
-au BufNewFile,BufRead */etc/pam.d/* call s:StarSetf('pamconf')
-
-" Printcap and Termcap
-au BufNewFile,BufRead *printcap*
- \ if !did_filetype()
- \| let b:ptcap_type = "print" | call s:StarSetf('ptcap')
- \|endif
-au BufNewFile,BufRead *termcap*
- \ if !did_filetype()
- \| let b:ptcap_type = "term" | call s:StarSetf('ptcap')
- \|endif
-
-" ReDIF
-" Only used when the .rdf file was not detected to be XML.
-au BufRead,BufNewFile *.rdf call dist#ft#Redif()
-
-" Remind
-au BufNewFile,BufRead .reminders* call s:StarSetf('remind')
-
-" SGML catalog file
-au BufNewFile,BufRead sgml.catalog* call s:StarSetf('catalog')
-
-" avoid doc files being recognized a shell files
-au BufNewFile,BufRead */doc/{,.}bash[_-]completion{,.d,.sh}{,/*} setf text
-
-" Shell scripts ending in a star
-au BufNewFile,BufRead .bashrc*,.bash[_-]profile*,.bash[_-]logout*,.bash[_-]aliases*,bash-fc[-.]*,PKGBUILD*,APKBUILD*,*/{,.}bash[_-]completion{,.d,.sh}{,/*} call dist#ft#SetFileTypeSH("bash")
-au BufNewFile,BufRead .kshrc* call dist#ft#SetFileTypeSH("ksh")
-au BufNewFile,BufRead .profile* call dist#ft#SetFileTypeSH(getline(1))
-
-" Sudoers
-au BufNewFile,BufRead */etc/sudoers.d/* call s:StarSetf('sudoers')
-
-" tcsh scripts ending in a star
-au BufNewFile,BufRead .tcshrc* call dist#ft#SetFileTypeShell("tcsh")
-
-" csh scripts ending in a star
-au BufNewFile,BufRead .login*,.cshrc* call dist#ft#CSH()
-
-" tmux configuration with arbitrary extension
-au BufNewFile,BufRead {.,}tmux*.conf* setf tmux
-
-" VHDL
-au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl')
-
-" Vim script
-au BufNewFile,BufRead *vimrc* call s:StarSetf('vim')
-
-" Subversion commit file
-au BufNewFile,BufRead svn-commit*.tmp setf svn
-
-" X resources file
-au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults')
-
-" XFree86 config
-au BufNewFile,BufRead XF86Config-4*
- \ let b:xf86conf_xfree86_version = 4 | call s:StarSetf('xf86conf')
-au BufNewFile,BufRead XF86Config*
- \ if getline(1) =~ '\<XConfigurator\>'
- \| let b:xf86conf_xfree86_version = 3
- \|endif
- \|call s:StarSetf('xf86conf')
-
-" X11 xmodmap
-au BufNewFile,BufRead *xmodmap* call s:StarSetf('xmodmap')
-
-" Xinetd conf
-au BufNewFile,BufRead */etc/xinetd.d/* call s:StarSetf('xinetd')
-
-" yum conf (close enough to dosini)
-au BufNewFile,BufRead */etc/yum.repos.d/* call s:StarSetf('dosini')
-
-" Z-Shell script ending in a star
-au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump* call s:StarSetf('zsh')
-au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh')
-
-
-" Help files match *.txt but should have a last line that is a modeline.
-au BufNewFile,BufRead *.txt
- \ if getline('$') !~ 'vim:.*ft=help'
- \| setf text
- \| endif
-
-" Blueprint markup files
-au BufNewFile,BufRead *.blp setf blueprint
-
-if !exists('g:did_load_ftdetect')
- " Use the filetype detect plugins. They may overrule any of the previously
- " detected filetypes.
- runtime! ftdetect/*.vim
- runtime! ftdetect/*.lua
-endif
-
-" NOTE: The above command could have ended the filetypedetect autocmd group
-" and started another one. Let's make sure it has ended to get to a consistent
-" state.
-augroup END
-
-" Generic configuration file. Use FALLBACK, it's just guessing!
-au filetypedetect BufNewFile,BufRead,StdinReadPost *
- \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
- \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
- \ || getline(4) =~ '^#' || getline(5) =~ '^#') |
- \ setf FALLBACK conf |
- \ endif
-
-
-" If the GUI is already running, may still need to install the Syntax menu.
-" Don't do it when the 'M' flag is included in 'guioptions'.
-if has("menu") && has("gui_running")
- \ && !exists("did_install_syntax_menu") && &guioptions !~# "M"
- source <sfile>:p:h/menu.vim
-endif
-
-" Function called for testing all functions defined here. These are
-" script-local, thus need to be executed here.
-" Returns a string with error messages (hopefully empty).
-func TestFiletypeFuncs(testlist)
- let output = ''
- for f in a:testlist
- try
- exe f
- catch
- let output = output . "\n" . f . ": " . v:exception
- endtry
- endfor
- return output
-endfunc
-
-" Restore 'cpoptions'
-let &cpo = s:cpo_save
-unlet s:cpo_save
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua
index d2840b3a7e..fa792422ba 100644
--- a/runtime/lua/vim/filetype.lua
+++ b/runtime/lua/vim/filetype.lua
@@ -2285,8 +2285,6 @@ end
---
--- See $VIMRUNTIME/lua/vim/filetype.lua for more examples.
---
---- Note that Lua filetype detection is disabled when |g:do_legacy_filetype| is set.
----
--- Example:
--- <pre>
--- vim.filetype.add({
@@ -2323,7 +2321,7 @@ end
--- })
--- </pre>
---
---- To add a fallback match on contents (see |new-filetype-scripts|), use
+--- To add a fallback match on contents, use
--- <pre>
--- vim.filetype.add {
--- pattern = {
diff --git a/runtime/scripts.vim b/runtime/scripts.vim
deleted file mode 100644
index 2d8bfdcb05..0000000000
--- a/runtime/scripts.vim
+++ /dev/null
@@ -1,459 +0,0 @@
-" Vim support file to detect file types in scripts
-"
-" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last change: 2021 Jan 22
-
-" 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
-" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim.
-"
-" Note that the pattern matches are done with =~# to avoid the value of the
-" 'ignorecase' option making a difference. Where case is to be ignored use
-" =~? instead. Do not use =~ anywhere.
-
-" Only run when using legacy filetype
-if !exists('g:do_legacy_filetype')
- finish
-endif
-
-" Only do the rest when the FileType autocommand has not been triggered yet.
-if did_filetype()
- finish
-endif
-
-" Load the user defined scripts file first
-" Only do this when the FileType autocommand has not been triggered yet
-if exists("myscriptsfile") && filereadable(expand(myscriptsfile))
- execute "source " . myscriptsfile
- if did_filetype()
- finish
- 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
-
- " Icon
- elseif s:name =~# 'icon\>'
- set ft=icon
-
- " Guile
- elseif s:name =~# 'guile'
- set ft=scheme
-
- 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
diff --git a/scripts/vim-patch.sh b/scripts/vim-patch.sh
index f824feb856..fbade1b4f7 100755
--- a/scripts/vim-patch.sh
+++ b/scripts/vim-patch.sh
@@ -195,6 +195,10 @@ preprocess_patch() {
local na_src='auto\|configure.*\|GvimExt\|libvterm\|proto\|tee\|VisVim\|xpm\|xxd\|Make.*\|INSTALL.*\|beval.*\|gui.*\|if_cscop\|if_lua\|if_mzsch\|if_olepp\|if_ole\|if_perl\|if_py\|if_ruby\|if_tcl\|if_xcmdsrv'
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/src/\S*\<\%(testdir/\)\@<!\%('"${na_src}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
+ # Remove runtime files ported to Lua.
+ local na_rt='filetype\.vim\|scripts\.vim\|autoload\/ft\/dist\.vim'
+ 2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/runtime/\<\%('"${na_rt}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
+
# Remove unwanted Vim doc files.
local na_doc='channel\.txt\|if_cscop\.txt\|netbeans\.txt\|os_\w\+\.txt\|term\.txt\|todo\.txt\|version\d\.txt\|vim9\.txt\|sponsor\.txt\|intro\.txt\|tags'
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/runtime/doc/\<\%('"${na_doc}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
diff --git a/src/nvim/testdir/test_legacy_filetype.vim b/src/nvim/testdir/test_legacy_filetype.vim
deleted file mode 100644
index 772faaadb0..0000000000
--- a/src/nvim/testdir/test_legacy_filetype.vim
+++ /dev/null
@@ -1,4 +0,0 @@
-let g:do_legacy_filetype = 1
-filetype on
-
-source test_filetype.vim