]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(filetype): Improve filetype loading time
authorbennyyip <yebenmy@gmail.com>
Thu, 9 Oct 2025 20:24:35 +0000 (20:24 +0000)
committerChristian Brabandt <cb@256bit.org>
Thu, 9 Oct 2025 20:24:35 +0000 (20:24 +0000)
closes: #18508

Signed-off-by: bennyyip <yebenmy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/dist/ft.vim
runtime/filetype.vim

index b0609727e0898a18f1ff8236cbdc5648feaa238e..6131cf5732f0a4d161018c62266a4212257d1772 100644 (file)
@@ -3,7 +3,7 @@ vim9script
 # Vim functions for file type detection
 #
 # Maintainer:          The Vim Project <https://github.com/vim/vim>
-# Last Change:         2025 Sep 08
+# Last Change:         2025 Oct 09
 # Former Maintainer:   Bram Moolenaar <Bram@vim.org>
 
 # These functions are moved here from runtime/filetype.vim to make startup
@@ -1598,5 +1598,1710 @@ export def Detect_UCI_statements(): bool
   \         )
 enddef
 
+export def DetectFromName()
+  const amatch = expand("<amatch>")
+  const name = fnamemodify(amatch, ':t')
+  const ft = get(ft_from_name, name, '')
+  if ft != ''
+    execute "setf " .. ft
+  endif
+enddef
+
+export def DetectFromExt()
+  const amatch = expand("<amatch>")
+  var ext = fnamemodify(amatch, ':e')
+  const name = fnamemodify(amatch, ':t')
+  if ext == '' && name[0] == '.'
+    ext = name[1 : ]
+  endif
+  const ft =  get(ft_from_ext, ext, '')
+  if ft != ''
+    execute "setf " .. ft
+  endif
+enddef
+
+# Key: extension of the file name. without `.`
+# Value: filetype
+const ft_from_ext = {
+  # 8th (Firth-derivative)
+  "8th": "8th",
+  # A-A-P recipe
+  "aap": "aap",
+  # ABAB/4
+  "abap": "abap",
+  # ABC music notation
+  "abc": "abc",
+  # ABEL
+  "abl": "abel",
+  # ABNF
+  "abnf": "abnf",
+  # AceDB
+  "wrm": "acedb",
+  # Ada (83, 9X, 95)
+  "adb": "ada",
+  "ads": "ada",
+  "ada": "ada",
+  # AHDL
+  "tdf": "ahdl",
+  # AIDL
+  "aidl": "aidl",
+  # AMPL
+  "run": "ampl",
+  # ANTLR / PCCTS
+  "g": "pccts",
+  # ANTLR 4
+  "g4": "antlr4",
+  # Arduino
+  "ino": "arduino",
+  "pde": "arduino",
+  # Asymptote
+  "asy": "asy",
+  # XA65 MOS6510 cross assembler
+  "a65": "a65",
+  # Applescript
+  "scpt": "applescript",
+  # Applix ELF
+  "am": "elf",
+  # Arc Macro Language
+  "aml": "aml",
+  # ART*Enterprise (formerly ART-IM)
+  "art": "art",
+  # AsciiDoc
+  "asciidoc": "asciidoc",
+  "adoc": "asciidoc",
+  # ASN.1
+  "asn": "asn",
+  "asn1": "asn",
+  # Assembly - Netwide
+  "nasm": "nasm",
+  # Assembly - Microsoft
+  "masm": "masm",
+  # Assembly - Macro (VAX)
+  "mar": "vmasm",
+  # Astro
+  "astro": "astro",
+  # Atlas
+  "atl": "atlas",
+  "as": "atlas",
+  # Atom is based on XML
+  "atom": "xml",
+  # Authzed
+  "zed": "authzed",
+  # Autoit v3
+  "au3": "autoit",
+  # Autohotkey
+  "ahk": "autohotkey",
+  # Autotest .at files are actually Autoconf M4
+  "at": "config",
+  # Avenue
+  "ave": "ave",
+  # Awk
+  "awk": "awk",
+  "gawk": "awk",
+  # B
+  "mch": "b",
+  "ref": "b",
+  "imp": "b",
+  # Bass
+  "bass": "bass",
+  # IBasic file (similar to QBasic)
+  "iba": "ibasic",
+  "ibi": "ibasic",
+  # FreeBasic file (similar to QBasic)
+  "fb": "freebasic",
+  # Batch file for MSDOS. See dist#ft#FTsys for *.sys
+  "bat": "dosbatch",
+  # BC calculator
+  "bc": "bc",
+  # BDF font
+  "bdf": "bdf",
+  # Beancount
+  "beancount": "beancount",
+  # BibTeX bibliography database file
+  "bib": "bib",
+  # BibTeX Bibliography Style
+  "bst": "bst",
+  # Bicep
+  "bicep": "bicep",
+  "bicepparam": "bicep",
+  # BIND zone
+  "zone": "bindzone",
+  # Blank
+  "bl": "blank",
+  # Brighterscript
+  "bs": "brighterscript",
+  # Brightscript
+  "brs": "brightscript",
+  # BSDL
+  "bsd": "bsdl",
+  "bsdl": "bsdl",
+  # C3
+  "c3": "c3",
+  "c3i": "c3",
+  "c3t": "c3",
+  # Cairo
+  "cairo": "cairo",
+  # Cap'n Proto
+  "capnp": "capnp",
+  # C#
+  "cs": "cs",
+  "csx": "cs",
+  "cake": "cs",
+  # CSDL
+  "csdl": "csdl",
+  # Ctags
+  "ctags": "conf",
+  # Cabal
+  "cabal": "cabal",
+  # Cedar
+  "cedar": "cedar",
+  # ChaiScript
+  "chai": "chaiscript",
+  # Chatito
+  "chatito": "chatito",
+  # Chuck
+  "ck": "chuck",
+  # Comshare Dimension Definition Language
+  "cdl": "cdl",
+  # Conary Recipe
+  "recipe": "conaryrecipe",
+  # Corn config file
+  "corn": "corn",
+  # ChainPack Object Notation (CPON)
+  "cpon": "cpon",
+  # Controllable Regex Mutilator
+  "crm": "crm",
+  # Cyn++
+  "cyn": "cynpp",
+  # Cypher query language
+  "cypher": "cypher",
+  # C++
+  "cxx": "cpp",
+  "c++": "cpp",
+  "hh": "cpp",
+  "hxx": "cpp",
+  "hpp": "cpp",
+  "ipp": "cpp",
+  "moc": "cpp",
+  "tcc": "cpp",
+  "inl": "cpp",
+  # MS files (ixx: C++ module interface file, Microsoft Project file)
+  "ixx": "cpp",
+  "mpp": "cpp",
+  # C++ 20 modules (clang)
+  # https://clang.llvm.org/docs/StandardCPlusPlusModules.html#file-name-requirement
+  "cppm": "cpp",
+  "ccm": "cpp",
+  "cxxm": "cpp",
+  "c++m": "cpp",
+  # Ch (CHscript)
+  "chf": "ch",
+  # TLH files are C++ headers generated by Visual C++'s #import from typelibs
+  "tlh": "cpp",
+  # Cascading Style Sheets
+  "css": "css",
+  # Century Term Command Scripts (*.cmd too)
+  "con": "cterm",
+  # ChordPro
+  "chopro": "chordpro",
+  "crd": "chordpro",
+  "cho": "chordpro",
+  "crdpro": "chordpro",
+  "chordpro": "chordpro",
+  # Clean
+  "dcl": "clean",
+  "icl": "clean",
+  # Clever
+  "eni": "cl",
+  # Clojure
+  "clj": "clojure",
+  "cljs": "clojure",
+  "cljx": "clojure",
+  "cljc": "clojure",
+  # Cobol
+  "cbl": "cobol",
+  "cob": "cobol",
+  # Coco/R
+  "atg": "coco",
+  # Cold Fusion
+  "cfm": "cf",
+  "cfi": "cf",
+  "cfc": "cf",
+  # Cooklang
+  "cook": "cook",
+  # Clinical Quality Language (CQL)
+  # .cql is also mentioned as the 'XDCC Catcher queue list' file extension.
+  # If support for XDCC Catcher is needed in the future, the contents of the file
+  # needs to be inspected.
+  "cql": "cqlang",
+  # Crystal
+  "cr": "crystal",
+  # CSV Files
+  "csv": "csv",
+  # CUDA Compute Unified Device Architecture
+  "cu": "cuda",
+  "cuh": "cuda",
+  # Cue
+  "cue": "cue",
+  # DAX
+  "dax": "dax",
+  # WildPackets EtherPeek Decoder
+  "dcd": "dcd",
+  # Elvish
+  "elv": "elvish",
+  # Faust
+  "lib": "faust",
+  # Libreoffice config files
+  "xcu": "xml",
+  "xlb": "xml",
+  "xlc": "xml",
+  "xba": "xml",
+  # Libtool files
+  "lo": "sh",
+  "la": "sh",
+  "lai": "sh",
+  # LyRiCs
+  "lrc": "lyrics",
+  # MLIR
+  "mlir": "mlir",
+  # Quake C
+  "qc": "c",
+  # Cucumber
+  "feature": "cucumber",
+  # Communicating Sequential Processes
+  "csp": "csp",
+  "fdr": "csp",
+  # CUPL logic description and simulation
+  "pld": "cupl",
+  "si": "cuplsim",
+  # Dafny
+  "dfy": "dafny",
+  # Dart
+  "dart": "dart",
+  "drt": "dart",
+  # Dhall
+  "dhall": "dhall",
+  # ROCKLinux package description
+  "desc": "desc",
+  # Desktop files
+  "desktop": "desktop",
+  "directory": "desktop",
+  # Diff files
+  "diff": "diff",
+  "rej": "diff",
+  # DOT
+  "dot": "dot",
+  "gv": "dot",
+  # Dylan - lid files
+  "lid": "dylanlid",
+  # Dylan - intr files (melange)
+  "intr": "dylanintr",
+  # Dylan
+  "dylan": "dylan",
+  # Dracula
+  "drac": "dracula",
+  "drc": "dracula",
+  "lvs": "dracula",
+  "lpe": "dracula",
+  # Datascript
+  "ds": "datascript",
+  # DTD (Document Type Definition for XML)
+  "dtd": "dtd",
+  # Devicetree (.its for U-Boot Flattened Image Trees, .keymap for ZMK keymap, and
+  # .overlay for Zephyr overlay)
+  "dts": "dts",
+  "dtsi": "dts",
+  "dtso": "dts",
+  "its": "dts",
+  "keymap": "dts",
+  "overlay": "dts",
+  # Embedix Component Description
+  "ecd": "ecd",
+  # ERicsson LANGuage; Yaws is erlang too
+  "erl": "erlang",
+  "hrl": "erlang",
+  "yaws": "erlang",
+  # Elm
+  "elm": "elm",
+  # Elsa - https://github.com/ucsd-progsys/elsa
+  "lc": "elsa",
+  # EdgeDB Schema Definition Language
+  "esdl": "esdl",
+  # ESQL-C
+  "ec": "esqlc",
+  "EC": "esqlc",
+  # Esterel
+  "strl": "esterel",
+  # Essbase script
+  "csc": "csc",
+  # Expect
+  "exp": "expect",
+  # Falcon
+  "fal": "falcon",
+  # Fantom
+  "fan": "fan",
+  "fwt": "fan",
+  # Factor
+  "factor": "factor",
+  # FGA
+  "fga": "fga",
+  # FIRRTL - Flexible Internal Representation for RTL
+  "fir": "firrtl",
+  # Fish shell
+  "fish": "fish",
+  # Flix
+  "flix": "flix",
+  # Focus Executable
+  "fex": "focexec",
+  "focexec": "focexec",
+  # Focus Master file (but not for auto.master)
+  "mas": "master",
+  "master": "master",
+  # Forth
+  "ft": "forth",
+  "fth": "forth",
+  "4th": "forth",
+  # Reva Forth
+  "frt": "reva",
+  # Framescript
+  "fsl": "framescript",
+  # Func
+  "fc": "func",
+  # Fusion
+  "fusion": "fusion",
+  # FHIR Shorthand (FSH)
+  "fsh": "fsh",
+  # F#
+  "fsi": "fsharp",
+  "fsx": "fsharp",
+  # GDMO
+  "mo": "gdmo",
+  "gdmo": "gdmo",
+  # GDscript
+  "gd": "gdscript",
+  # Godot resource
+  "tscn": "gdresource",
+  "tres": "gdresource",
+  # Godot shader
+  "gdshader": "gdshader",
+  "shader": "gdshader",
+  # Gemtext
+  "gmi": "gemtext",
+  "gemini": "gemtext",
+  # Gift (Moodle)
+  "gift": "gift",
+  # Gleam
+  "gleam": "gleam",
+  # GLSL
+  # Extensions supported by Khronos reference compiler (with one exception, ".glsl")
+  # https://github.com/KhronosGroup/glslang
+  "vert": "glsl",
+  "tesc": "glsl",
+  "tese": "glsl",
+  "glsl": "glsl",
+  "geom": "glsl",
+  "frag": "glsl",
+  "comp": "glsl",
+  "rgen": "glsl",
+  "rmiss": "glsl",
+  "rchit": "glsl",
+  "rahit": "glsl",
+  "rint": "glsl",
+  "rcall": "glsl",
+  # GN (generate ninja) files
+  "gn": "gn",
+  "gni": "gn",
+  # Glimmer-flavored TypeScript and JavaScript
+  "gts": "typescript.glimmer",
+  "gjs": "javascript.glimmer",
+  # Go (Google)
+  "go": "go",
+  # GrADS scripts
+  "gs": "grads",
+  # GraphQL
+  "graphql": "graphql",
+  "graphqls": "graphql",
+  "gql": "graphql",
+  # Gretl
+  "gretl": "gretl",
+  # GNU Server Pages
+  "gsp": "gsp",
+  # GYP
+  "gyp": "gyp",
+  "gypi": "gyp",
+  # Hack
+  "hack": "hack",
+  "hackpartial": "hack",
+  # Haml
+  "haml": "haml",
+  # Hamster Classic | Playground files
+  "hsm": "hamster",
+  # Handlebars
+  "hbs": "handlebars",
+  # Hare
+  "ha": "hare",
+  # Haskell
+  "hs": "haskell",
+  "hsc": "haskell",
+  "hs-boot": "haskell",
+  "hsig": "haskell",
+  "lhs": "lhaskell",
+  "chs": "chaskell",
+  # Haste
+  "ht": "haste",
+  "htpp": "hastepreproc",
+  # Haxe
+  "hx": "haxe",
+  # HCL
+  "hcl": "hcl",
+  # Hercules
+  "vc": "hercules",
+  "ev": "hercules",
+  "sum": "hercules",
+  "errsum": "hercules",
+  # HEEx
+  "heex": "heex",
+  # HEX (Intel)
+  "hex": "hex",
+  "ihex": "hex",
+  "int": "hex",
+  "ihe": "hex",
+  "ihx": "hex",
+  "mcs": "hex",
+  "h32": "hex",
+  "h80": "hex",
+  "h86": "hex",
+  "a43": "hex",
+  "a90": "hex",
+  # Hjson
+  "hjson": "hjson",
+  # HLS Playlist (or another form of playlist)
+  "m3u": "hlsplaylist",
+  "m3u8": "hlsplaylist",
+  # Hollywood
+  "hws": "hollywood",
+  # Hoon
+  "hoon": "hoon",
+  # TI Code Composer Studio General Extension Language
+  "gel": "gel",
+  # HTTP request files
+  "http": "http",
+  # HTML with Ruby - eRuby
+  "erb": "eruby",
+  "rhtml": "eruby",
+  # Some template.  Used to be HTML Cheetah.
+  "tmpl": "template",
+  # Hurl
+  "hurl": "hurl",
+  # Hyper Builder
+  "hb": "hb",
+  # Httest
+  "htt": "httest",
+  "htb": "httest",
+  # Icon
+  "icn": "icon",
+  # Microsoft IDL (Interface Description Language)  Also *.idl
+  # MOF = WMI (Windows Management Instrumentation) Managed Object Format
+  "odl": "msidl",
+  "mof": "msidl",
+  # Idris2
+  "idr": "idris2",
+  "lidr": "lidris2",
+  # Inform
+  "inf": "inform",
+  "INF": "inform",
+  # Ipkg for Idris 2 language
+  "ipkg": "ipkg",
+  # Informix 4GL (source - canonical, include file, I4GL+M4 preproc.)
+  "4gl": "fgl",
+  "4gh": "fgl",
+  "m4gl": "fgl",
+  # .INI file for MSDOS
+  "ini": "dosini",
+  "INI": "dosini",
+  # Inko
+  "inko": "inko",
+  # Inno Setup
+  "iss": "iss",
+  # J
+  "ijs": "j",
+  # JAL
+  "jal": "jal",
+  "JAL": "jal",
+  # Jam
+  "jpl": "jam",
+  "jpr": "jam",
+  # Janet
+  "janet": "janet",
+  # Java
+  "java": "java",
+  "jav": "java",
+  "jsh": "java",
+  # JavaCC
+  "jj": "javacc",
+  "jjt": "javacc",
+  # JavaScript, ECMAScript, ES module script, CommonJS script
+  "js": "javascript",
+  "jsm": "javascript",
+  "javascript": "javascript",
+  "es": "javascript",
+  "mjs": "javascript",
+  "cjs": "javascript",
+  # JavaScript with React
+  "jsx": "javascriptreact",
+  # Java Server Pages
+  "jsp": "jsp",
+  # Jess
+  "clp": "jess",
+  # Jgraph
+  "jgr": "jgraph",
+  # Jinja
+  "jinja": "jinja",
+  # Jujutsu
+  "jjdescription": "jjdescription",
+  # Jovial
+  "jov": "jovial",
+  "j73": "jovial",
+  "jovial": "jovial",
+  # Jq
+  "jq": "jq",
+  # JSON5
+  "json5": "json5",
+  # JSON Patch (RFC 6902)
+  "json-patch": "json",
+  # Geojson is also json
+  "geojson": "json",
+  # Jupyter Notebook and jupyterlab config is also json
+  "ipynb": "json",
+  "jupyterlab-settings": "json",
+  # Sublime config
+  "sublime-project": "json",
+  "sublime-settings": "json",
+  "sublime-workspace": "json",
+  # JSON
+  "json": "json",
+  "jsonp": "json",
+  "webmanifest": "json",
+  # JSON Lines
+  "jsonl": "jsonl",
+  # Jsonnet
+  "jsonnet": "jsonnet",
+  "libsonnet": "jsonnet",
+  # Julia
+  "jl": "julia",
+  # KAREL
+  "kl": "karel",
+  "KL": "karel",
+  # KDL
+  "kdl": "kdl",
+  # KerML
+  "kerml": "kerml",
+  # Kixtart
+  "kix": "kix",
+  # Kimwitu[++]
+  "k": "kwt",
+  # Kivy
+  "kv": "kivy",
+  # Kotlin
+  "kt": "kotlin",
+  "ktm": "kotlin",
+  "kts": "kotlin",
+  # KDE script
+  "ks": "kscript",
+  # Kyaml
+  "kyaml": "yaml",
+  "kyml": "yaml",
+  # Lace (ISE)
+  "ace": "lace",
+  "ACE": "lace",
+  # Latte
+  "latte": "latte",
+  "lte": "latte",
+  # LDAP LDIF
+  "ldif": "ldif",
+  # Lean
+  "lean": "lean",
+  # Ledger
+  "ldg": "ledger",
+  "ledger": "ledger",
+  "journal": "ledger",
+  # Leo
+  "leo": "leo",
+  # Less
+  "less": "less",
+  # Lex
+  "lex": "lex",
+  "l": "lex",
+  "lxx": "lex",
+  "l++": "lex",
+  # Lilypond
+  "ly": "lilypond",
+  "ily": "lilypond",
+  # Liquidsoap
+  "liq": "liquidsoap",
+  # Liquid
+  "liquid": "liquid",
+  # Lite
+  "lite": "lite",
+  "lt": "lite",
+  # Livebook
+  "livemd": "livebook",
+  # Logtalk
+  "lgt": "logtalk",
+  # LOTOS
+  "lotos": "lotos",
+  # Lout (also: *.lt)
+  "lou": "lout",
+  "lout": "lout",
+  # Luau
+  "luau": "luau",
+  # Lynx style file (or LotusScript!)
+  "lss": "lss",
+  # MaGic Point
+  "mgp": "mgp",
+  # MakeIndex
+  "ist": "ist",
+  "mst": "ist",
+  # Mallard
+  "page": "mallard",
+  # Manpage
+  "man": "man",
+  # Maple V
+  "mv": "maple",
+  "mpl": "maple",
+  "mws": "maple",
+  # Mason (it used to include *.comp, are those Mason files?)
+  "mason": "mason",
+  "mhtml": "mason",
+  # Mathematica notebook and package files
+  "nb": "mma",
+  "wl": "mma",
+  # Maya Extension Language
+  "mel": "mel",
+  # mcmeta
+  "mcmeta": "json",
+  # MediaWiki
+  "mw": "mediawiki",
+  "wiki": "mediawiki",
+  # Mermaid
+  "mmd": "mermaid",
+  "mmdc": "mermaid",
+  "mermaid": "mermaid",
+  # Meson Build system config
+  "wrap": "dosini",
+  # Metafont
+  "mf": "mf",
+  # MetaPost
+  "mp": "mp",
+  # MGL
+  "mgl": "mgl",
+  # MIX - Knuth assembly
+  "mix": "mix",
+  "mixal": "mix",
+  # Symbian meta-makefile definition (MMP)
+  "mmp": "mmp",
+  # Larch/Modula-3
+  "lm3": "modula3",
+  # Monk
+  "isc": "monk",
+  "monk": "monk",
+  "ssc": "monk",
+  "tsc": "monk",
+  # MOO
+  "moo": "moo",
+  # Moonscript
+  "moon": "moonscript",
+  # Move language
+  "move": "move",
+  # MPD is based on XML
+  "mpd": "xml",
+  # Motorola S record
+  "s19": "srec",
+  "s28": "srec",
+  "s37": "srec",
+  "mot": "srec",
+  "srec": "srec",
+  # Msql
+  "msql": "msql",
+  # MuPAD source
+  "mu": "mupad",
+  # Mush
+  "mush": "mush",
+  # Mustache
+  "mustache": "mustache",
+  # N1QL
+  "n1ql": "n1ql",
+  "nql": "n1ql",
+  # Nim file
+  "nim": "nim",
+  "nims": "nim",
+  "nimble": "nim",
+  # Ninja file
+  "ninja": "ninja",
+  # Nix
+  "nix": "nix",
+  # Norg
+  "norg": "norg",
+  # Novell netware batch files
+  "ncf": "ncf",
+  # Not Quite C
+  "nqc": "nqc",
+  # NSE - Nmap Script Engine - uses Lua syntax
+  "nse": "lua",
+  # NSIS
+  "nsi": "nsis",
+  "nsh": "nsis",
+  # N-Triples
+  "nt": "ntriples",
+  # Nu
+  "nu": "nu",
+  # Numbat
+  "nbt": "numbat",
+  # Oblivion Language and Oblivion Script Extender
+  "obl": "obse",
+  "obse": "obse",
+  "oblivion": "obse",
+  "obscript": "obse",
+  # Objdump
+  "objdump": "objdump",
+  "cppobjdump": "objdump",
+  # Occam
+  "occ": "occam",
+  # Odin
+  "odin": "odin",
+  # Omnimark
+  "xom": "omnimark",
+  "xin": "omnimark",
+  # OpenROAD
+  "or": "openroad",
+  # OpenSCAD
+  "scad": "openscad",
+  # Oracle config file
+  "ora": "ora",
+  # Org (Emacs' org-mode)
+  "org": "org",
+  "org_archive": "org",
+  # PApp
+  "papp": "papp",
+  "pxml": "papp",
+  "pxsl": "papp",
+  # Pascal (also *.p, *.pp, *.inc)
+  "pas": "pascal",
+  # Delphi
+  "dpr": "pascal",
+  # Free Pascal makefile definition file
+  "fpc": "fpcmake",
+  # Path of Exile item filter
+  "filter": "poefilter",
+  # PDF
+  "pdf": "pdf",
+  # PCMK - HAE - crm configure edit
+  "pcmk": "pcmk",
+  # PEM (Privacy-Enhanced Mail)
+  "pem": "pem",
+  "cer": "pem",
+  "crt": "pem",
+  "csr": "pem",
+  # Perl POD
+  "pod": "pod",
+  # Pike and Cmod
+  "pike": "pike",
+  "pmod": "pike",
+  "cmod": "cmod",
+  # Palm Resource compiler
+  "rcp": "pilrc",
+  # Pip requirements
+  "pip": "requirements",
+  # PL/1, PL/I
+  "pli": "pli",
+  "pl1": "pli",
+  # PL/M (also: *.inp)
+  "plm": "plm",
+  "p36": "plm",
+  "pac": "plm",
+  # PL/SQL
+  "pls": "plsql",
+  "plsql": "plsql",
+  # PLP
+  "plp": "plp",
+  # PO and PO template (GNU gettext)
+  "po": "po",
+  "pot": "po",
+  # Pony
+  "pony": "pony",
+  # PostScript (+ font files, encapsulated PostScript, Adobe Illustrator)
+  "ps": "postscr",
+  "pfa": "postscr",
+  "afm": "postscr",
+  "eps": "postscr",
+  "epsf": "postscr",
+  "epsi": "postscr",
+  "ai": "postscr",
+  # PostScript Printer Description
+  "ppd": "ppd",
+  # Povray
+  "pov": "pov",
+  # Power Query M
+  "pq": "pq",
+  # Prisma
+  "prisma": "prisma",
+  # PPWizard
+  "it": "ppwiz",
+  "ih": "ppwiz",
+  # Pug
+  "pug": "pug",
+  # Embedded Puppet
+  "epp": "epuppet",
+  # Obj 3D file format
+  # TODO: is there a way to avoid MS-Windows Object files?
+  "obj": "obj",
+  # Oracle Pro*C/C++
+  "pc": "proc",
+  # Privoxy actions file
+  "action": "privoxy",
+  # Software Distributor Product Specification File (POSIX 1387.2-1995)
+  "psf": "psf",
+  # Prolog
+  "pdb": "prolog",
+  # Promela
+  "pml": "promela",
+  # Property Specification Language (PSL)
+  "psl": "psl",
+  # Google protocol buffers
+  "proto": "proto",
+  "txtpb": "pbtxt",
+  "textproto": "pbtxt",
+  "textpb": "pbtxt",
+  "pbtxt": "pbtxt",
+  # Poke
+  "pk": "poke",
+  # Nvidia PTX (Parallel Thread Execution)
+  # See https://docs.nvidia.com/cuda/parallel-thread-execution/
+  "ptx": "ptx",
+  # Purescript
+  "purs": "purescript",
+  # Pyret
+  "arr": "pyret",
+  # Pyrex/Cython
+  "pyx": "pyrex",
+  "pyx+": "pyrex",
+  "pxd": "pyrex",
+  "pxi": "pyrex",
+  # QL
+  "ql": "ql",
+  "qll": "ql",
+  # QML
+  "qml": "qml",
+  "qbs": "qml",
+  # Quarto
+  "qmd": "quarto",
+  # QuickBms
+  "bms": "quickbms",
+  # Racket (formerly detected as "scheme")
+  "rkt": "racket",
+  "rktd": "racket",
+  "rktl": "racket",
+  # Radiance
+  "rad": "radiance",
+  "mat": "radiance",
+  # Raku (formerly Perl6)
+  "pm6": "raku",
+  "p6": "raku",
+  "t6": "raku",
+  "pod6": "raku",
+  "raku": "raku",
+  "rakumod": "raku",
+  "rakudoc": "raku",
+  "rakutest": "raku",
+  # Renderman Interface Bytestream
+  "rib": "rib",
+  # Rego Policy Language
+  "rego": "rego",
+  # Rexx
+  "rex": "rexx",
+  "orx": "rexx",
+  "rxo": "rexx",
+  "rxj": "rexx",
+  "jrexx": "rexx",
+  "rexxj": "rexx",
+  "rexx": "rexx",
+  "testGroup": "rexx",
+  "testUnit": "rexx",
+  # RSS looks like XML
+  "rss": "xml",
+  # ReScript
+  "res": "rescript",
+  "resi": "rescript",
+  # Relax NG Compact
+  "rnc": "rnc",
+  # Relax NG XML
+  "rng": "rng",
+  # ILE RPG
+  "rpgle": "rpgle",
+  "rpgleinc": "rpgle",
+  # RPL/2
+  "rpl": "rpl",
+  # Robot Framework
+  "robot": "robot",
+  "resource": "robot",
+  # Roc
+  "roc": "roc",
+  # RON (Rusty Object Notation)
+  "ron": "ron",
+  # MikroTik RouterOS script
+  "rsc": "routeros",
+  # Rpcgen
+  "x": "rpcgen",
+  # reStructuredText Documentation Format
+  "rst": "rst",
+  # RTF
+  "rtf": "rtf",
+  # Ruby
+  "rb": "ruby",
+  "rbw": "ruby",
+  # RubyGems
+  "gemspec": "ruby",
+  # RBS (Ruby Signature)
+  "rbs": "rbs",
+  # Rackup
+  "ru": "ruby",
+  # Ruby on Rails
+  "builder": "ruby",
+  "rxml": "ruby",
+  "rjs": "ruby",
+  # Rust
+  "rs": "rust",
+  # S-lang
+  "sl": "slang",
+  # Sage
+  "sage": "sage",
+  # SAS script
+  "sas": "sas",
+  # Sass
+  "sass": "sass",
+  # Scala
+  "scala": "scala",
+  "mill": "scala",
+  # SBT - Scala Build Tool
+  "sbt": "sbt",
+  # Slang Shading Language
+  "slang": "shaderslang",
+  # Slint
+  "slint": "slint",
+  # Scilab
+  "sci": "scilab",
+  "sce": "scilab",
+  # SCSS
+  "scss": "scss",
+  # SD: Streaming Descriptors
+  "sd": "sd",
+  # SDL
+  "sdl": "sdl",
+  "pr": "sdl",
+  # sed
+  "sed": "sed",
+  # SubRip
+  "srt": "srt",
+  # SubStation Alpha
+  "ass": "ssa",
+  "ssa": "ssa",
+  # svelte
+  "svelte": "svelte",
+  # Sieve (RFC 3028, 5228)
+  "siv": "sieve",
+  "sieve": "sieve",
+  # TriG
+  "trig": "trig",
+  # Zig and Zig Object Notation (ZON)
+  "zig": "zig",
+  "zon": "zig",
+  # Ziggy and Ziggy Schema
+  "ziggy": "ziggy",
+  "ziggy-schema": "ziggy_schema",
+  # Zserio
+  "zs": "zserio",
+  # Salt state files
+  "sls": "salt",
+  # Sexplib
+  "sexp": "sexplib",
+  # Simula
+  "sim": "simula",
+  # SINDA
+  "sin": "sinda",
+  "s85": "sinda",
+  # SiSU
+  "sst": "sisu",
+  "ssm": "sisu",
+  "ssi": "sisu",
+  "-sst": "sisu",
+  "_sst": "sisu",
+  # SKILL
+  "il": "skill",
+  "ils": "skill",
+  "cdf": "skill",
+  # Cadence
+  "cdc": "cdc",
+  # Cangjie
+  "cj": "cangjie",
+  # SLRN
+  "score": "slrnsc",
+  # Smali
+  "smali": "smali",
+  # Smalltalk
+  "st": "st",
+  # Smarty templates
+  "tpl": "smarty",
+  # SMITH
+  "smt": "smith",
+  "smith": "smith",
+  # Smithy
+  "smithy": "smithy",
+  # Snobol4 and spitbol
+  "sno": "snobol4",
+  "spt": "snobol4",
+  # SNMP MIB files
+  "mib": "mib",
+  "my": "mib",
+  # Solidity
+  "sol": "solidity",
+  # SPARQL queries
+  "rq": "sparql",
+  "sparql": "sparql",
+  # Spec (Linux RPM)
+  "spec": "spec",
+  # Speedup (AspenTech plant simulator)
+  "speedup": "spup",
+  "spdata": "spup",
+  "spd": "spup",
+  # Slice
+  "ice": "slice",
+  # Microsoft Visual Studio Solution
+  "sln": "solution",
+  "slnf": "json",
+  "slnx": "xml",
+  # Spice
+  "sp": "spice",
+  "spice": "spice",
+  # Spyce
+  "spy": "spyce",
+  "spi": "spyce",
+  # SQL for Oracle Designer
+  "tyb": "sql",
+  "tyc": "sql",
+  "pkb": "sql",
+  "pks": "sql",
+  # SQLJ
+  "sqlj": "sqlj",
+  # PRQL
+  "prql": "prql",
+  # SQR
+  "sqr": "sqr",
+  "sqi": "sqr",
+  # Squirrel
+  "nut": "squirrel",
+  # Starlark
+  "ipd": "starlark",
+  "star": "starlark",
+  "starlark": "starlark",
+  # OpenVPN configuration
+  "ovpn": "openvpn",
+  # Stata
+  "ado": "stata",
+  "do": "stata",
+  "imata": "stata",
+  "mata": "stata",
+  # SMCL
+  "hlp": "smcl",
+  "ihlp": "smcl",
+  "smcl": "smcl",
+  # Stored Procedures
+  "stp": "stp",
+  # Standard ML
+  "sml": "sml",
+  # Sratus VOS command macro
+  "cm": "voscm",
+  # Sway (programming language)
+  "sw": "sway",
+  # Swift
+  "swift": "swift",
+  "swiftinterface": "swift",
+  # Swig
+  "swg": "swig",
+  "swig": "swig",
+  # Synopsys Design Constraints
+  "sdc": "sdc",
+  # SVG (Scalable Vector Graphics)
+  "svg": "svg",
+  # Surface
+  "sface": "surface",
+  # SysML
+  "sysml": "sysml",
+  # LLVM TableGen
+  "td": "tablegen",
+  # TAK
+  "tak": "tak",
+  # Unx Tal
+  "tal": "tal",
+  # templ
+  "templ": "templ",
+  # Teal
+  "tl": "teal",
+  # TealInfo
+  "tli": "tli",
+  # Telix Salt
+  "slt": "tsalt",
+  # Terminfo
+  "ti": "terminfo",
+  # Tera
+  "tera": "tera",
+  # Terraform variables
+  "tfvars": "terraform-vars",
+  # TeX
+  "latex": "tex",
+  "sty": "tex",
+  "dtx": "tex",
+  "ltx": "tex",
+  "bbl": "tex",
+  # LaTeX files generated by Inkscape
+  "pdf_tex": "tex",
+  # ConTeXt
+  "mkii": "context",
+  "mkiv": "context",
+  "mkvi": "context",
+  "mkxl": "context",
+  "mklx": "context",
+  # Texinfo
+  "texinfo": "texinfo",
+  "texi": "texinfo",
+  "txi": "texinfo",
+  # Thrift (Apache)
+  "thrift": "thrift",
+  # TLA+
+  "tla": "tla",
+  # TPP - Text Presentation Program
+  "tpp": "tpp",
+  # TRACE32 Script Language
+  "cmm": "trace32",
+  "cmmt": "trace32",
+  "t32": "trace32",
+  # Treetop
+  "treetop": "treetop",
+  # TSS - Geometry
+  "tssgm": "tssgm",
+  # TSS - Optics
+  "tssop": "tssop",
+  # TSS - Command Line (temporary)
+  "tsscl": "tsscl",
+  # TSV Files
+  "tsv": "tsv",
+  # Tutor mode
+  "tutor": "tutor",
+  # TWIG files
+  "twig": "twig",
+  # TypeScript module and common
+  "mts": "typescript",
+  "cts": "typescript",
+  # TypeScript with React
+  "tsx": "typescriptreact",
+  # TypeSpec files
+  "tsp": "typespec",
+  # Motif UIT/UIL files
+  "uit": "uil",
+  "uil": "uil",
+  # Ungrammar, AKA Un-grammar
+  "ungram": "ungrammar",
+  # UnrealScript
+  "uc": "uc",
+  # URL shortcut
+  "url": "urlshortcut",
+  # V
+  "vsh": "v",
+  "vv": "v",
+  # Vala
+  "vala": "vala",
+  # VDF
+  "vdf": "vdf",
+  # VDM
+  "vdmpp": "vdmpp",
+  "vpp": "vdmpp",
+  "vdmrt": "vdmrt",
+  "vdmsl": "vdmsl",
+  "vdm": "vdmsl",
+  # Vento
+  "vto": "vento",
+  # Vera
+  "vr": "vera",
+  "vri": "vera",
+  "vrh": "vera",
+  # Verilog-AMS HDL
+  "va": "verilogams",
+  "vams": "verilogams",
+  # SystemVerilog
+  "sv": "systemverilog",
+  "svh": "systemverilog",
+  # VHS tape
+  # .tape is also used by TapeCalc, which we do not support ATM.  If TapeCalc
+  # support is needed the contents of the file needs to be inspected.
+  "tape": "vhs",
+  # VHDL
+  "hdl": "vhdl",
+  "vhd": "vhdl",
+  "vhdl": "vhdl",
+  "vbe": "vhdl",
+  "vst": "vhdl",
+  "vho": "vhdl",
+  # Visual Basic
+  # user control, ActiveX document form, active designer, property page
+  "ctl": "vb",
+  "dob": "vb",
+  "dsr": "vb",
+  "pag": "vb",
+  # Visual Basic Project
+  "vbp": "dosini",
+  # VBScript (close to Visual Basic)
+  "vbs": "vb",
+  # Visual Basic .NET (close to Visual Basic)
+  "vb": "vb",
+  # Visual Studio Macro
+  "dsm": "vb",
+  # SaxBasic (close to Visual Basic)
+  "sba": "vb",
+  # VRML V1.0c
+  "wrl": "vrml",
+  # Vroom (vim testing and executable documentation)
+  "vroom": "vroom",
+  # Vue.js Single File Component
+  "vue": "vue",
+  # WebAssembly
+  "wat": "wat",
+  "wast": "wat",
+  # WebAssembly Interface Type (WIT)
+  "wit": "wit",
+  # Webmacro
+  "wm": "webmacro",
+  # WebGPU Shading Language (WGSL)
+  "wgsl": "wgsl",
+  # Website MetaLanguage
+  "wml": "wml",
+  # Winbatch
+  "wbt": "winbatch",
+  # WSML
+  "wsml": "wsml",
+  # WPL
+  "wpl": "xml",
+  # XHTML
+  "xhtml": "xhtml",
+  "xht": "xhtml",
+  # Xilinx Vivado/Vitis project files and block design files
+  "xpr": "xml",
+  "xpfm": "xml",
+  "spfm": "xml",
+  "bxml": "xml",
+  "mmi": "xml",
+  "bd": "json",
+  "bda": "json",
+  "xci": "json",
+  "mss": "mss",
+  # XS Perl extension interface language
+  "xs": "xs",
+  # Xmath
+  "msc": "xmath",
+  "msf": "xmath",
+  # XMI (holding UML models) is also XML
+  "xmi": "xml",
+  # Unison Language
+  "u": "unison",
+  "uu": "unison",
+  # Qt Linguist translation source and Qt User Interface Files are XML
+  # However, for .ts TypeScript is more common.
+  "ui": "xml",
+  # TPM's are RDF-based descriptions of TeX packages (Nikolai Weibull)
+  "tpm": "xml",
+  # Web Services Description Language (WSDL)
+  "wsdl": "xml",
+  # Workflow Description Language (WDL)
+  "wdl": "wdl",
+  # XLIFF (XML Localisation Interchange File Format) is also XML
+  "xlf": "xml",
+  "xliff": "xml",
+  # XML User Interface Language
+  "xul": "xml",
+  # Xquery
+  "xq": "xquery",
+  "xql": "xquery",
+  "xqm": "xquery",
+  "xquery": "xquery",
+  "xqy": "xquery",
+  # XSD
+  "xsd": "xsd",
+  # Xslt
+  "xsl": "xslt",
+  "xslt": "xslt",
+  # Yacc
+  "yy": "yacc",
+  "yxx": "yacc",
+  "y++": "yacc",
+  # Yaml
+  "yaml": "yaml",
+  "yml": "yaml",
+  "eyaml": "yaml",
+  # Raml
+  "raml": "raml",
+  # YANG
+  "yang": "yang",
+  # Yuck
+  "yuck": "yuck",
+  # Zimbu
+  "zu": "zimbu",
+  # Zimbu Templates
+  "zut": "zimbutempl",
+  # Z80 assembler asz80
+  "z8a": "z8a",
+  # Stylus
+  "styl": "stylus",
+  "stylus": "stylus",
+  # Universal Scene Description
+  "usda": "usd",
+  "usd": "usd",
+  # Rofi stylesheet
+  "rasi": "rasi",
+  # Zsh module
+  # mdd: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L285-L288
+  # mdh, pro: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L268-L271
+  # *.mdd will generate *.mdh, *.pro and *.epro.
+  # module's *.c will #include *.mdh containing module dependency information and
+  # *.pro containing all static declarations of *.c
+  # *.epro contains all external declarations of *.c
+  "mdh": "c",
+  "epro": "c",
+  "mdd": "sh",
+  # Blueprint markup files
+  "blp": "blueprint",
+  # Blueprint build system file
+  "bp": "bp",
+}
+# Key: file name (the final path component, excluding the drive and root)
+# Value: filetype
+const ft_from_name = {
+  # Ant
+  "build.xml": "ant",
+  # Ash of busybox
+  ".ash_history": "sh",
+  # Automake (must be before the *.am pattern)
+  "makefile.am": "automake",
+  "Makefile.am": "automake",
+  "GNUmakefile.am": "automake",
+  # APT config file
+  "apt.conf": "aptconf",
+  # BIND zone
+  "named.root": "bindzone",
+  # Busted (Lua unit testing framework - configuration files)
+  ".busted": "lua",
+  # Bun history
+  ".bun_repl_history": "javascript",
+  # Calendar
+  "calendar": "calendar",
+  # Cgdb config file
+  "cgdbrc": "cgdbrc",
+  # Cfengine
+  "cfengine.conf": "cfengine",
+  # Chktex
+  ".chktexrc": "conf",
+  # Codeowners
+  "CODEOWNERS": "codeowners",
+  # Clangd
+  ".clangd": "yaml",
+  # Conda configuration file
+  ".condarc": "yaml",
+  "condarc": "yaml",
+  # Cling
+  ".cling_history": "cpp",
+  # CmakeCache
+  "CMakeCache.txt": "cmakecache",
+  # Configure scripts
+  "configure.in": "config",
+  "configure.ac": "config",
+  # Debian devscripts
+  "devscripts.conf": "sh",
+  ".devscripts": "sh",
+  # Fontconfig config files
+  "fonts.conf": "xml",
+  # Libreoffice config files
+  "psprint.conf": "dosini",
+  "sofficerc": "dosini",
+  # Lynx config files
+  "lynx.cfg": "lynx",
+  # Mamba configuration file
+  ".mambarc": "yaml",
+  "mambarc": "yaml",
+  # XDG mimeapps.list
+  "mimeapps.list": "dosini",
+  # Many tools written in Python use dosini as their config
+  # like setuptools, pudb, coverage, pypi, gitlint, oelint-adv, pylint, bpython, mypy
+  # (must be before *.cfg)
+  "pip.conf": "dosini",
+  "setup.cfg": "dosini",
+  "pudb.cfg": "dosini",
+  ".coveragerc": "dosini",
+  ".pypirc": "dosini",
+  ".gitlint": "dosini",
+  ".oelint.cfg": "dosini",
+  # Many tools written in Python use toml as their config, like black
+  ".black": "toml",
+  # Wakatime config
+  ".wakatime.cfg": "dosini",
+  # Deno history
+  "deno_history.txt": "javascript",
+  # Deny hosts
+  "denyhosts.conf": "denyhosts",
+  # Dict config
+  "dict.conf": "dictconf",
+  ".dictrc": "dictconf",
+  # Earthfile
+  "Earthfile": "earthfile",
+  # EditorConfig
+  ".editorconfig": "editorconfig",
+  # Elinks configuration
+  "elinks.conf": "elinks",
+  # Exim
+  "exim.conf": "exim",
+  # Exports
+  "exports": "exports",
+  # Fetchmail RC file
+  ".fetchmailrc": "fetchmail",
+  # Focus Master file (but not for auto.master)
+  "auto.master": "conf",
+  # FStab
+  "fstab": "fstab",
+  "mtab": "fstab",
+  # Git
+  "COMMIT_EDITMSG": "gitcommit",
+  "MERGE_MSG": "gitcommit",
+  "TAG_EDITMSG": "gitcommit",
+  "NOTES_EDITMSG": "gitcommit",
+  "EDIT_DESCRIPTION": "gitcommit",
+  # gnash(1) configuration files
+  "gnashrc": "gnash",
+  ".gnashrc": "gnash",
+  "gnashpluginrc": "gnash",
+  ".gnashpluginrc": "gnash",
+  # Gitolite
+  "gitolite.conf": "gitolite",
+  # Go (Google)
+  "Gopkg.lock": "toml",
+  "go.work": "gowork",
+  # GoAccess configuration
+  "goaccess.conf": "goaccess",
+  # GTK RC
+  ".gtkrc": "gtkrc",
+  "gtkrc": "gtkrc",
+  # Haskell
+  "cabal.project": "cabalproject",
+  # Go checksum file (must be before *.sum Hercules)
+  "go.sum": "gosum",
+  "go.work.sum": "gosum",
+  # Indent profile (must come before IDL *.pro!)
+  ".indent.pro": "indent",
+  # Indent RC
+  "indentrc": "indent",
+  # Ipfilter
+  "ipf.conf": "ipfilter",
+  "ipf6.conf": "ipfilter",
+  "ipf.rules": "ipfilter",
+  # SysV Inittab
+  "inittab": "inittab",
+  # JavaScript, ECMAScript, ES module script, CommonJS script
+  ".node_repl_history": "javascript",
+  # Other files that look like json
+  ".prettierrc": "json",
+  ".firebaserc": "json",
+  ".stylelintrc": "json",
+  ".lintstagedrc": "json",
+  "flake.lock": "json",
+  "deno.lock": "json",
+  ".swcrc": "json",
+  "composer.lock": "json",
+  "symfony.lock": "json",
+  # Kconfig
+  "Kconfig": "kconfig",
+  "Kconfig.debug": "kconfig",
+  "Config.in": "kconfig",
+  # Latexmkrc
+  ".latexmkrc": "perl",
+  "latexmkrc": "perl",
+  # LDAP configuration
+  "ldaprc": "ldapconf",
+  ".ldaprc": "ldapconf",
+  "ldap.conf": "ldapconf",
+  # Luadoc, Ldoc (must be before *.ld)
+  "config.ld": "lua",
+  # lf configuration (lfrc)
+  "lfrc": "lf",
+  # Lilo: Linux loader
+  "lilo.conf": "lilo",
+  # SBCL implementation of Common Lisp
+  "sbclrc": "lisp",
+  ".sbclrc": "lisp",
+  # Luau config
+  ".luaurc": "jsonc",
+  # Luacheck
+  ".luacheckrc": "lua",
+  # Mailcap configuration file
+  ".mailcap": "mailcap",
+  "mailcap": "mailcap",
+  # Meson Build system config
+  "meson.build": "meson",
+  "meson.options": "meson",
+  "meson_options.txt": "meson",
+  # msmtp
+  ".msmtprc": "msmtp",
+  # Mrxvtrc
+  "mrxvtrc": "mrxvtrc",
+  ".mrxvtrc": "mrxvtrc",
+  # Noemutt setup file
+  "Neomuttrc": "neomuttrc",
+  # Netrc
+  ".netrc": "netrc",
+  # NPM RC file
+  "npmrc": "dosini",
+  ".npmrc": "dosini",
+  # ondir
+  ".ondirrc": "ondir",
+  # OpenAL Soft config files
+  ".alsoftrc": "dosini",
+  "alsoft.conf": "dosini",
+  "alsoft.ini": "dosini",
+  "alsoftrc.sample": "dosini",
+  # Packet filter conf
+  "pf.conf": "pf",
+  # ini style config files, using # comments
+  "pacman.conf": "confini",
+  "mpv.conf": "confini",
+  # Pam environment
+  "pam_env.conf": "pamenv",
+  ".pam_environment": "pamenv",
+  # Perl Reply
+  ".replyrc": "dosini",
+  # Pine config
+  ".pinerc": "pine",
+  "pinerc": "pine",
+  ".pinercex": "pine",
+  "pinercex": "pine",
+  # Pip requirements
+  "requirements.txt": "requirements",
+  # Pipenv Pipfiles
+  "Pipfile": "toml",
+  "Pipfile.lock": "json",
+  # Pixi lock
+  "pixi.lock": "yaml",
+  # Postfix main config
+  "main.cf": "pfmain",
+  "main.cf.proto": "pfmain",
+  # Povray configuration
+  ".povrayrc": "povini",
+  # Puppet
+  "Puppetfile": "ruby",
+  # Procmail
+  ".procmail": "procmail",
+  ".procmailrc": "procmail",
+  # PyPA manifest files
+  "MANIFEST.in": "pymanifest",
+  # QMLdir
+  "qmldir": "qmldir",
+  # Ratpoison config/command files
+  ".ratpoisonrc": "ratpoison",
+  "ratpoisonrc": "ratpoison",
+  # Readline
+  ".inputrc": "readline",
+  "inputrc": "readline",
+  # R profile file
+  ".Rhistory": "r",
+  ".Rprofile": "r",
+  "Rprofile": "r",
+  "Rprofile.site": "r",
+  # Resolv.conf
+  "resolv.conf": "resolv",
+  # Robots.txt
+  "robots.txt": "robots",
+  # Interactive Ruby shell
+  ".irbrc": "ruby",
+  "irbrc": "ruby",
+  ".irb_history": "ruby",
+  "irb_history": "ruby",
+  # Bundler
+  "Gemfile": "ruby",
+  # Samba config
+  "smb.conf": "samba",
+  # Sendmail
+  "sendmail.cf": "sm",
+  # SGML catalog file
+  "catalog": "catalog",
+  # Alpine Linux APKBUILDs are actually POSIX sh scripts with special treatment.
+  "APKBUILD": "apkbuild",
+  # Screen RC
+  ".screenrc": "screen",
+  "screenrc": "screen",
+  # SLRN
+  ".slrnrc": "slrnrc",
+  # Squid
+  "squid.conf": "squid",
+  # OpenSSH server configuration
+  "sshd_config": "sshdconfig",
+  # Tags
+  "tags": "tags",
+  # Xilinx's xsct and xsdb use tcl
+  ".xsctcmdhistory": "tcl",
+  ".xsdbcmdhistory": "tcl",
+  # TeX configuration
+  "texmf.cnf": "texmf",
+  # Tidy config
+  ".tidyrc": "tidy",
+  "tidyrc": "tidy",
+  "tidy.conf": "tidy",
+  # TF (TinyFugue) mud client
+  ".tfrc": "tf",
+  "tfrc": "tf",
+  # Trustees
+  "trustees.conf": "trustees",
+  # Vagrant (uses Ruby syntax)
+  "Vagrantfile": "ruby",
+  # Viminfo file
+  ".viminfo": "viminfo",
+  "_viminfo": "viminfo",
+  # Vgrindefs file
+  "vgrindefs": "vgrindefs",
+  # Wget config
+  ".wgetrc": "wget",
+  "wgetrc": "wget",
+  # Wget2 config
+  ".wget2rc": "wget2",
+  "wget2rc": "wget2",
+  # WvDial
+  "wvdial.conf": "wvdial",
+  ".wvdialrc": "wvdial",
+  # CVS RC file
+  ".cvsrc": "cvsrc",
+  # X11vnc
+  ".x11vncrc": "conf",
+  # Xprofile
+  ".xprofile": "sh",
+  # X compose file
+  ".XCompose": "xcompose",
+  "Compose": "xcompose",
+  # MSBUILD configuration files are also XML
+  "Directory.Packages.props": "xml",
+  "Directory.Build.targets": "xml",
+  "Directory.Build.props": "xml",
+  # ATI graphics driver configuration
+  "fglrxrc": "xml",
+  # Nfs
+  "nfs.conf": "dosini",
+  "nfsmount.conf": "dosini",
+  # Yarn lock
+  "yarn.lock": "yaml",
+  # Zathurarc
+  "zathurarc": "zathurarc",
+}
+
 # Uncomment this line to check for compilation errors early
 # defcompile
index 688e783f0aab007ceb5d38735fada20c36947ab6..9a6febdb2a41cab24fa274b579a1f98e73211a0f 100644 (file)
@@ -1,9 +1,13 @@
 " Vim support file to detect file types
 "
 " Maintainer:          The Vim Project <https://github.com/vim/vim>
-" Last Change:         2025 Oct 05
+" Last Change:         2025 Oct 09
 " Former Maintainer:   Bram Moolenaar <Bram@vim.org>
 
+" If the filetype can be detected from extension or file name(the final path component),
+" please update `ft_from_name` and `ft_from_ext` in `runtime/autoload/dist/ft.vim`.
+" Otherwise add a new autocmd in this file.
+
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
   finish
@@ -57,108 +61,36 @@ au BufNewFile,BufRead */doc/*.txt
        \|   setf help
        \| endif
 
+" Detect by name
+au BufNewFile,BufRead *                                call dist#ft#DetectFromName()
+
 " 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
-
-" ABNF
-au BufNewFile,BufRead *.abnf                   setf abnf
-
-" AceDB
-au BufNewFile,BufRead *.wrm                    setf acedb
-
 " Ada (83, 9X, 95)
-au BufNewFile,BufRead *.adb,*.ads,*.ada                setf ada
 if has("vms")
   au BufNewFile,BufRead *.gpr,*.ada_m,*.adc    setf ada
 else
   au BufNewFile,BufRead *.gpr                  setf ada
 endif
 
-" 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
-
-" ANTLR / PCCTS
-"au BufNewFile,BufRead *.g                     setf antlr
-au BufNewFile,BufRead *.g                      setf pccts
-
-" ANTLR 4
-au BufNewFile,BufRead *.g4                     setf antlr4
-
-" Arduino
-au BufNewFile,BufRead *.ino,*.pde              setf arduino
-
-" Ash of busybox
-au BufNewFile,BufRead .ash_history             setf sh
-
-" Asymptote
-au BufNewFile,BufRead *.asy            setf asy
-
 " 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
-
-" Automake (must be before the *.am pattern)
-au BufNewFile,BufRead [mM]akefile.am,GNUmakefile.am    setf automake
-
-" Applix ELF
-au BufNewFile,BufRead *.am                     setf elf
-
 " 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") |
@@ -192,60 +124,11 @@ au BufNewFile,BufRead *.demo,*.dm{1,2,3,t},*.wxm,maxima-init.mac setf maxima
 " *.[sS], *.[aA] usually Assembly - GNU
 au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst  call dist#ft#FTasm()
 
-" Assembly - Netwide
-au BufNewFile,BufRead *.nasm                   setf nasm
-
-" Assembly - Microsoft
-au BufNewFile,BufRead *.masm                   setf masm
-
-" 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
-
-" Authzed
-au BufNewFile,BufRead *.zed                    setf authzed
-
-" Autoit v3
-au BufNewFile,BufRead *.au3                    setf autoit
-
-" Autohotkey
-au BufNewFile,BufRead *.ahk                    setf autohotkey
-
-" Autotest .at files are actually Autoconf M4
-au BufNewFile,BufRead *.at                     setf config
-
-" 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()
 
-" Bass
-au BufNewFile,BufRead *.bass                   setf bass
-
-" 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 and TI linker command files also use *.cmd.
 " lnk: `/* comment */`, `// comment`, and `--linker-option=value`
 " rexx: `/* comment */`, `-- comment`
@@ -270,67 +153,29 @@ endif
 " 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,*.bicepparam                     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 *.zone                   setf bindzone
 au BufNewFile,BufRead *.db                     call dist#ft#BindzoneCheck('')
 
 " Blade
 au BufNewFile,BufRead *.blade.php              setf blade
 
-" Blank
-au BufNewFile,BufRead *.bl                     setf blank
-
 " Bitbake
 au BufNewFile,BufRead *.bb,*.bbappend,*.bbclass,*/build/conf/*.conf,*/meta{-*,}/conf/*.conf,*/project-spec/configs/*.conf      setf bitbake
 
 " Blkid cache file
 au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old   setf xml
 
-" Brighterscript
-au BufNewFile,BufRead *.bs                     setf brighterscript
-
-" Brightscript
-au BufNewFile,BufRead *.brs                    setf brightscript
-
-" BSDL
-au BufNewFile,BufRead *.bsd,*.bsdl                     setf bsdl
-
 " Bazel (https://bazel.build) and Buck2 (https://buck2.build/)
-autocmd BufRead,BufNewFile *.bzl,*.bxl,*.bazel,WORKSPACE,WORKSPACE.bzlmod      setf bzl
+au BufNewFile,BufRead *.bzl,*.bxl,*.bazel,WORKSPACE,WORKSPACE.bzlmod   setf bzl
 if has("fname_case")
   " There is another check for BUILD and BUCK further below.
-  autocmd BufRead,BufNewFile *.BUILD,BUILD,BUCK                setf bzl
+  au BufNewFile,BufRead *.BUILD,BUILD,BUCK             setf bzl
 endif
 
-" Busted (Lua unit testing framework - configuration files)
-au BufNewFile,BufRead .busted                  setf lua
-
-" Bun history
-au BufNewFile,BufRead .bun_repl_history                setf javascript
-
 " Bundle config
 au BufNewFile,BufRead */.bundle/config                 setf yaml
 
@@ -338,38 +183,11 @@ au BufNewFile,BufRead */.bundle/config                    setf yaml
 au BufNewFile,BufRead *.c                      call dist#ft#FTlpc()
 au BufNewFile,BufRead *.lpc,*.ulpc             setf lpc
 
-" C3
-au BufNewFile,BufRead *.c3,*.c3i,*.c3t         setf c3
-
-" Cairo
-au BufNewFile,BufRead *.cairo                  setf cairo
-
-" Calendar
-au BufNewFile,BufRead calendar                 setf calendar
-
-" Cap'n Proto
-au BufNewFile,BufRead *.capnp                  setf capnp
-
-" Cgdb config file
-au BufNewFile,BufRead cgdbrc                   setf cgdbrc
-
 " m17n database files. */m17n/* matches installed files, */.m17n.d/* matches
 " per-user config files, */m17n-db/* matches the git repo. (must be before
 " *.cs)
 au BufNewFile,BufRead */{m17n,.m17n.d,m17n-db}/*.{ali,cs,dir,flt,fst,lnm,mic,mim,tbl} setf m17ndb
 
-" C#
-au BufNewFile,BufRead *.cs,*.csx,*.cake                setf cs
-
-" CSDL
-au BufNewFile,BufRead *.csdl                   setf csdl
-
-" Ctags
-au BufNewFile,BufRead *.ctags                  setf conf
-
-" Cabal
-au BufNewFile,BufRead *.cabal                  setf cabal
-
 " Cdrdao TOC or LaTeX \tableofcontents files
 au BufNewFile,BufRead *.toc
        \ if getline(1) =~# '\\contentsline' |setf tex|else|setf cdrtoc|endif
@@ -377,51 +195,12 @@ au BufNewFile,BufRead *.toc
 " Cdrdao config
 au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao     setf cdrdaoconf
 
-" Cedar
-au BufNewFile,BufRead *.cedar                  setf cedar
-
-" Cfengine
-au BufNewFile,BufRead cfengine.conf            setf cfengine
-
-" ChaiScript
-au BufRead,BufNewFile *.chai                   setf chaiscript
-
-" Chatito
-au BufNewFile,BufRead *.chatito                        setf chatito
-
-" Chktex
-au BufRead,BufNewFile .chktexrc                        setf conf
-
-" Chuck
-au BufNewFile,BufRead *.ck                     setf chuck
-
-" Comshare Dimension Definition Language
-au BufNewFile,BufRead *.cdl                    setf cdl
-
-" Codeowners
-au BufNewFile,BufRead CODEOWNERS               setf codeowners
-
-" Conary Recipe
-au BufNewFile,BufRead *.recipe                 setf conaryrecipe
-
 " Containers config files
 au BufNewFile,BufRead */containers/containers.conf{,.d/*.conf}         setf toml
 au BufNewFile,BufRead */containers/containers.conf.modules/*.conf      setf toml
 au BufNewFile,BufRead */containers/registries.conf{,.d/*.conf}         setf toml
 au BufNewFile,BufRead */containers/storage.conf                                setf toml
 
-" Corn config file
-au BufNewFile,BufRead *.corn                   setf corn
-
-" ChainPack Object Notation (CPON)
-au BufNewFile,BufRead *.cpon                   setf cpon
-
-" 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
@@ -429,38 +208,15 @@ au BufNewFile,BufRead *.cc
 au BufNewFile,BufRead *.cpp
        \ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif
 
-" Cypher query language
-au BufNewFile,BufRead *.cypher                 setf cypher
-
 " C++
-au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp
 if has("fname_case")
        au BufNewFile,BufRead *.C,*.H if !&fileignorecase | setf cpp | endif
 endif
 
-" MS files (ixx: C++ module interface file, Microsoft Project file)
-au BufNewFile,BufRead *.ixx,*.mpp setf cpp
-
-" C++ 20 modules (clang)
-" https://clang.llvm.org/docs/StandardCPlusPlusModules.html#file-name-requirement
-au BufNewFile,BufRead *.cppm,*.ccm,*.cxxm,*.c++m setf cpp
-
 " .h files can be C, C++, Ch, Objective-C, or Objective-C++.
 " Set g_filetype_h to set a different filetype
 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
@@ -483,57 +239,32 @@ 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
-
-" Clangd
-au BufNewFile,BufRead .clangd                  setf yaml
-
 " Clang-format
 au BufNewFile,BufRead .clang-format            setf yaml
 
 " Clang-tidy
 au BufNewFile,BufRead .clang-tidy              setf yaml
 
-" Conda configuration file
-au BufNewFile,BufRead .condarc,condarc         setf yaml
-
 " Matplotlib
 au BufNewFile,BufRead *.mplstyle,matplotlibrc  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()
 
-" Cling
-au BufNewFile,BufRead .cling_history           setf cpp
-
 " Clipper, FoxPro, ABB RAPID or eviews
 au BufNewFile,BufRead *.prg                    call dist#ft#FTprg()
 if has("fname_case")
   au BufNewFile,BufRead *.Prg,*.PRG                    call dist#ft#FTprg()
 endif
 
-" Clojure
-au BufNewFile,BufRead *.clj,*.cljs,*.cljx,*.cljc               setf clojure
-
 " Cmake
 au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in                setf cmake
 
-" CmakeCache
-autocmd BufRead,BufNewFile CMakeCache.txt                      setf cmakecache
-
 " 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      setf cobol
 "   cobol or zope form controller python script? (heuristic)
 au BufNewFile,BufRead *.cpy
        \ if getline(1) =~ '^##' |
@@ -542,49 +273,10 @@ au BufNewFile,BufRead *.cpy
        \   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
-
-" Clinical Quality Language (CQL)
-" .cql is also mentioned as the 'XDCC Catcher queue list' file extension.
-" If support for XDCC Catcher is needed in the future, the contents of the file
-" needs to be inspected.
-au BufNewFile,BufRead *.cql                    setf cqlang
-
-" Crystal
-au BufNewFile,BufRead *.cr                     setf crystal
-
-" CSV Files
-au BufNewFile,BufRead *.csv                    setf csv
-
-" CUDA Compute Unified Device Architecture
-au BufNewFile,BufRead *.cu,*.cuh               setf cuda
-
-" Cue
-au BufNewFile,BufRead *.cue                    setf cue
-
-" DAX
-au BufNewFile,BufRead *.dax                    setf dax
-
-" Debian devscripts
-au BufNewFile,BufRead devscripts.conf,.devscripts      setf sh
-
 " 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
 
@@ -595,11 +287,8 @@ au BufNewFile,BufRead *Eterm/*.cfg         setf eterm
 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
+au BufNewFile,BufRead mix.lock,*.exs setf elixir
+au BufNewFile,BufRead *.eex,*.leex setf eelixir
 
 " Euphoria 3 or 4
 au BufNewFile,BufRead *.eu,*.ew,*.exu,*.exw  call dist#ft#EuphoriaCheck()
@@ -610,47 +299,19 @@ endif
 " Execline (s6) scripts
 au BufNewFile,BufRead *s6*/\(up\|down\|run\|finish\)    setf execline
 
-" Fontconfig config files
-au BufNewFile,BufRead fonts.conf                       setf xml
-
 " Faust
-au BufNewFile,BufRead *.lib                            setf faust
 au BufNewFile,BufRead *.dsp                            call dist#ft#FTdsp()
 
-" Libreoffice config files
-au BufNewFile,BufRead *.xcu,*.xlb,*.xlc,*.xba          setf xml
-au BufNewFile,BufRead psprint.conf,sofficerc           setf dosini
-
-" Libtool files
-au BufNewFile,BufRead *.lo,*.la,*.lai          setf sh
-
-" Lynx config files
-au BufNewFile,BufRead lynx.cfg                 setf lynx
-
-" LyRiCs
-au BufNewFile,BufRead *.lrc                    setf lyrics
-
-" Mamba configuration file
-au BufNewFile,BufRead .mambarc,mambarc         setf yaml
-
-" MLIR
-au BufNewFile,BufRead *.mlir                   setf mlir
-
 " 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
 
-" XDG mimeapps.list
-au BufNewFile,BufRead mimeapps.list    setf dosini
-
 " Many tools written in Python use dosini as their config
 " like setuptools, pudb, coverage, pypi, gitlint, oelint-adv, pylint, bpython, mypy
 " (must be before *.cfg)
-au BufNewFile,BufRead pip.conf,setup.cfg,pudb.cfg,.coveragerc,.pypirc,.gitlint,.oelint.cfg     setf dosini
 au BufNewFile,BufRead {.,}pylintrc,*/bpython/config,*/mypy/config                      setf dosini
 
 " Many tools written in Python use toml as their config, like black
-au BufNewFile,BufRead .black   setf toml
 au BufNewFile,BufRead black
        \  if getline(1) =~ 'tool.back'
        \|   setf toml
@@ -663,39 +324,17 @@ au BufNewFile,BufRead */{lxqt,screengrab}/*.conf  setf dosini
 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
-
 " LaTeX packages use LaTeX as their configuration, such as:
 " ~/.texlive/texmf-config/tex/latex/hyperref/hyperref.cfg
 " ~/.texlive/texmf-config/tex/latex/docstrip/docstrip.cfg
 au BufNewFile,BufRead */tex/latex/**.cfg               setf tex
 
-" Wakatime config
-au BufNewFile,BufRead .wakatime.cfg            setf dosini
-
 " Configure files
 au BufNewFile,BufRead *.cfg                    call dist#ft#FTcfg()
 if has("fname_case")
   au BufNewFile,BufRead *.Cfg,*.CFG                    call dist#ft#FTcfg()
 endif
 
-" 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
-
-" Dafny
-au BufNewFile,BufRead *.dfy                    setf dafny
-
-" Dart
-au BufRead,BufNewfile *.dart,*.drt             setf dart
-
 " Debian autopkgtest
 au BufNewFile,BufRead */debian/tests/control   setf autopkgtest
 
@@ -720,31 +359,13 @@ au BufNewFile,BufRead */etc/apt/sources.list              setf debsources
 au BufNewFile,BufRead */etc/apt/sources.list.d/*.list  setf debsources
 au BufNewFile,BufRead */etc/apt/sources.list.d/*.sources       setf deb822sources
 
-" Deno history
-au BufNewFile,BufRead deno_history.txt         setf javascript
-
-" Deny hosts
-au BufNewFile,BufRead denyhosts.conf           setf denyhosts
-
-" Dhall
-au BufNewFile,BufRead *.dhall                  setf dhall
-
 " 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
 
@@ -752,7 +373,6 @@ au BufNewFile,BufRead dictd*.conf           setf dictdconf
 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 |
@@ -774,21 +394,9 @@ au BufNewFile,BufRead *.rul
 " 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,dune-file 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 or Modula-2
 au BufNewFile,BufRead *.def                    call dist#ft#FTdef()
 
@@ -796,12 +404,6 @@ if has("fname_case")
   au BufNewFile,BufRead *.DEF                  setf modula2
 endif
 
-" 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*<\!' |
@@ -810,19 +412,6 @@ au BufNewFile,BufRead *.dsl
        \   setf structurizr |
        \ endif
 
-" DTD (Document Type Definition for XML)
-au BufNewFile,BufRead *.dtd                    setf dtd
-
-" Devicetree (.its for U-Boot Flattened Image Trees, .keymap for ZMK keymap, and
-" .overlay for Zephyr overlay)
-au BufNewFile,BufRead *.dts,*.dtsi,*.dtso      setf dts
-au BufNewFile,BufRead *.its                    setf dts
-au BufNewFile,BufRead *.keymap                 setf dts
-au BufNewFile,BufRead *.overlay                        setf dts
-
-" Earthfile
-au BufNewFile,BufRead Earthfile                        setf earthfile
-
 " EDIF (*.edf,*.edif,*.edn,*.edo) or edn
 au BufNewFile,BufRead *.ed\(f\|if\|o\)         setf edif
 au BufNewFile,BufRead *.edn
@@ -832,97 +421,21 @@ au BufNewFile,BufRead *.edn
        \   setf clojure |
        \ endif
 
-" EditorConfig
-au BufNewFile,BufRead .editorconfig            setf editorconfig
-
-" 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
 
-" Elsa - https://github.com/ucsd-progsys/elsa
-au BufNewFile,BufRead *.lc                     setf elsa
-
-" EdgeDB Schema Definition Language
-au BufNewFile,BufRead *.esdl                   setf esdl
-
 " 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,{,.}fennelrc  setf fennel
-
-" Fetchmail RC file
-au BufNewFile,BufRead .fetchmailrc             setf fetchmail
-
-" FGA
-au BufNewFile,BufRead *.fga                    setf fga
-
-" FIRRTL - Flexible Internal Representation for RTL
-au BufNewFile,BufRead *.fir                    setf firrtl
-
-" Fish shell
-au BufNewFile,BufRead *.fish                   setf fish
+au BufNewFile,BufRead *.fnl,{,.}fennelrc       setf fennel
 
 " Flatpak config
 au BufNewFile,BufRead */flatpak/repo/config    setf dosini
 
-" Flix
-au BufNewFile,BufRead *.flix                   setf flix
-
-" 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,*.4th         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
@@ -932,54 +445,16 @@ au BufNewFile,BufRead *.for,*.fortran,*.fpp,*.ftn,*.f77,*.f90,*.f95,*.f03,*.f08
 " Fortran or Forth
 au BufNewFile,BufRead *.f                      call dist#ft#FTf()
 
-" Framescript
-au BufNewFile,BufRead *.fsl                    setf framescript
-
-" FStab
-au BufNewFile,BufRead fstab,mtab               setf fstab
-
-" Func
-au BufNewFile,BufRead *.fc                     setf func
-
-" Fusion
-au BufRead,BufNewFile *.fusion                 setf fusion
-
 " F# or Forth
 au BufNewFile,BufRead *.fs                     call dist#ft#FTfs()
 
-" FHIR Shorthand (FSH)
-au BufNewFile,BufRead *.fsh                    setf fsh
-
-" F#
-au BufNewFile,BufRead *.fsi,*.fsx              setf fsharp
-
 " GDB command files
 au BufNewFile,BufRead .gdbinit,gdbinit,.cuda-gdbinit,cuda-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
@@ -999,7 +474,7 @@ au BufNewFile,BufRead */.config/fd/ignore,.fdignore,.ignore setf gitignore
 au BufNewFile,BufRead .rgignore,.dockerignore,.containerignore setf gitignore
 au BufNewFile,BufRead .npmignore,.vscodeignore                 setf gitignore
 au BufNewFile,BufRead git-rebase-todo                          setf gitrebase
-au BufRead,BufNewFile .gitsendemail.msg.??????                 setf gitsendemail
+au BufNewFile,BufRead .gitsendemail.msg.??????                 setf gitsendemail
 au BufNewFile,BufRead *.git/*
       \ if getline(1) =~# '^\x\{40,\}\>\|^ref: ' |
       \   setf git |
@@ -1008,17 +483,6 @@ au BufNewFile,BufRead *.git/*
 " Gkrellmrc
 au BufNewFile,BufRead gkrellmrc,gkrellmrc_?    setf gkrellmrc
 
-" Gleam
-au BufNewFile,BufRead *.gleam                  setf gleam
-
-" GLSL
-" Extensions supported by Khronos reference compiler (with one exception, ".glsl")
-" https://github.com/KhronosGroup/glslang
-au BufNewFile,BufRead *.vert,*.tesc,*.tese,*.glsl,*.geom,*.frag,*.comp,*.rgen,*.rmiss,*.rchit,*.rahit,*.rint,*.rcall   setf glsl
-
-" GN (generate ninja) files
-au BufNewFile,BufRead *.gn,*.gni               setf gn
-
 " GP scripts (2.0 and onward)
 au BufNewFile,BufRead *.gp,.gprc               setf gp
 
@@ -1031,17 +495,9 @@ if !empty($GNUPGHOME)
   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,.gnuplot_history setf gnuplot
 
@@ -1053,100 +509,20 @@ au BufNewFile,BufRead *.grc
        \   setf yaml |
        \ endif
 
-" Go (Google)
-au BufNewFile,BufRead *.go                     setf go
-au BufNewFile,BufRead Gopkg.lock               setf toml
-au BufRead,BufNewFile go.work                  setf gowork
-
-" GoAccess configuration
-au BufNewFile,BufRead goaccess.conf            setf goaccess
-
-" 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,Jenkinsfile            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
 au BufNewFile,BufRead README                   call dist#ft#FTharedoc()
 
 " 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 */{.,}cabal/config       setf cabalconfig
 au BufNewFile,BufRead cabal.config             setf cabalconfig
 au BufNewFile,BufRead *.persistentmodels       setf haskellpersistent
 
-" Haste
-au BufNewFile,BufRead *.ht                     setf haste
-au BufNewFile,BufRead *.htpp                   setf hastepreproc
-
-" Haxe
-au BufNewFile,BufRead *.hx                     setf haxe
-
-" HCL
-au BufRead,BufNewFile *.hcl                    setf hcl
-
-" Go checksum file (must be before *.sum Hercules)
-au BufNewFile,BufRead go.sum,go.work.sum       setf gosum
-
-" Hercules
-au BufNewFile,BufRead *.vc,*.ev,*.sum,*.errsum setf hercules
-
-" HEEx
-au BufRead,BufNewFile *.heex                   setf heex
-
-" HEX (Intel)
-au BufNewFile,BufRead *.hex,*.ihex,*.int,*.ihe,*.ihx,*.mcs,*.h32,*.h80,*.h86,*.a43,*.a90       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
-
-" TI Code Composer Studio General Extension Language
-au BufNewFile,BufRead *.gel                    setf gel
-
 " Tilde (must be before HTML)
 au BufNewFile,BufRead *.t.html                 setf tilde
 
@@ -1157,36 +533,18 @@ au BufNewFile,BufRead init.trans,*/etc/translate-shell,.trans    setf clojure
 au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm  call dist#ft#FThtml()
 au BufNewFile,BufRead *.cshtml                 setf html
 
-" HTTP request files
-au BufNewFile,BufRead *.http                   setf http
-
-" HTML with Ruby - eRuby
-au BufNewFile,BufRead *.erb,*.rhtml            setf eruby
-
-" 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
 
-" Hurl
-au BufRead,BufNewFile *.hurl                   setf hurl
-
 " Hy
-au BufRead,BufNewFile *.hy,.hy-history         setf hy
-
-" Hyper Builder
-au BufNewFile,BufRead *.hb                     setf hb
+au BufNewFile,BufRead *.hy,.hy-history         setf hy
 
 " Hyprland Configuration language
 au BufNewFile,BufRead */hypr/*.conf,hypr\(land\|paper\|idle\|lock\).conf setf hyprlang
 
-" Httest
-au BufNewFile,BufRead *.htt,*.htb              setf httest
-
 " i3
 au BufNewFile,BufRead */i3/config              setf i3config
 au BufNewFile,BufRead */.i3/config             setf i3config
@@ -1196,153 +554,38 @@ au BufNewFile,BufRead */sway/config             setf swayconfig
 au BufNewFile,BufRead */sway/config.d/*                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), Prolog, Cproto or zsh module C
 au BufNewFile,BufRead *.pro                    call dist#ft#ProtoCheck('idlang')
 
-" Idris2
-au BufNewFile,BufRead *.idr                    setf idris2
-au BufNewFile,BufRead *.lidr                   setf lidris2
-
-" 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
-
-" Ipkg for Idris 2 language
-au BufNewFile,BufRead *.ipkg                   setf ipkg
-
-" 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,*.INI              setf dosini
-
-" SysV Inittab
-au BufNewFile,BufRead inittab                  setf inittab
-
-" Inko
-au BufNewFile,BufRead *.inko                   setf inko
-
-" 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
-
-" Janet
-au BufNewFile,BufRead *.janet                  setf janet
-
-" Java
-au BufNewFile,BufRead *.java,*.jav,*.jsh       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
-au BufNewFile,BufRead .node_repl_history       setf javascript
-
-" JavaScript with React
-au BufNewFile,BufRead *.jsx                    setf javascriptreact
-
-" Java Server Pages
-au BufNewFile,BufRead *.jsp                    setf jsp
+au BufNewFile,BufRead upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c setf upstreamdat
+au BufNewFile,BufRead fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c        setf upstreamlog
+au BufNewFile,BufRead upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog
+au BufNewFile,BufRead usserver.log\c,usserver.*.log\c,*.usserver.log\c setf usserverlog
+au BufNewFile,BufRead usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c setf usw2kagtlog
 
 " Java Properties resource file (note: doesn't catch font.properties.pl)
 au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_??  setf jproperties
 " Eclipse preference files use Java Properties syntax
 au BufNewFile,BufRead org.eclipse.*.prefs      setf jproperties
 
-" Jess
-au BufNewFile,BufRead *.clp                    setf jess
-
-" Jgraph
-au BufNewFile,BufRead *.jgr                    setf jgraph
-
-" Jinja
-au BufNewFile,BufRead *.jinja                  setf jinja
-
-" Jujutsu
-au BufNewFile,BufRead *.jjdescription          setf jjdescription
-
-" Jovial
-au BufNewFile,BufRead *.jov,*.j73,*.jovial     setf jovial
-
-" Jq
-au BufNewFile,BufRead *.jq                     setf jq
-
-" JSON5
-au BufNewFile,BufRead *.json5                  setf json5
-
-" JSON Patch (RFC 6902)
-au BufNewFile,BufRead *.json-patch             setf json
-
-" Geojson is also json
-au BufNewFile,BufRead *.geojson                        setf json
-
-" Jupyter Notebook and jupyterlab config is also json
-au BufNewFile,BufRead *.ipynb,*.jupyterlab-settings    setf json
-
-" Sublime config
-au BufNewFile,BufRead *.sublime-project,*.sublime-settings,*.sublime-workspace setf json
-
-" Other files that look like json
-au BufNewFile,BufRead .prettierrc,.firebaserc,.stylelintrc,.lintstagedrc,flake.lock,deno.lock,.swcrc,composer.lock,symfony.lock        setf json
-
 " JSONC (JSON with comments)
 au BufNewFile,BufRead *.jsonc,.babelrc,.eslintrc,.jsfmtrc,bun.lock     setf jsonc
 au BufNewFile,BufRead .jshintrc,.jscsrc,.vsconfig,.hintrc,.swrc,[jt]sconfig*.json      setf jsonc
 " Visual Studio Code settings
-au BufRead,BufNewFile ~/*/{Code,VSCodium}/User/*.json setf jsonc
-
-" JSON
-au BufNewFile,BufRead *.json,*.jsonp,*.webmanifest     setf json
-
-" JSON Lines
-au BufNewFile,BufRead *.jsonl                  setf jsonl
-
-" Jsonnet
-au BufNewFile,BufRead *.jsonnet,*.libsonnet    setf jsonnet
-
-" Julia
-au BufNewFile,BufRead *.jl                     setf julia
+au BufNewFile,BufRead ~/*/{Code,VSCodium}/User/*.json setf jsonc
 
 " Just
 au BufNewFile,BufRead \c{,*.}justfile,\c*.just setf just
@@ -1350,21 +593,6 @@ au BufNewFile,BufRead \c{,*.}justfile,\c*.just setf just
 " Kitty
 au BufNewFile,BufRead kitty.conf,*/kitty/*.conf setf kitty
 
-" KAREL
-au BufNewFile,BufRead *.kl setf karel
-if has("fname_case")
-   au BufNewFile,BufRead *.KL setf karel
-endif
-
-" KDL
-au BufNewFile,BufRead *.kdl                    setf kdl
-
-" KerML
-au BufNewFile,BufRead *.kerml          setf kerml
-
-" Kixtart
-au BufNewFile,BufRead *.kix                    setf kix
-
 " Kuka Robot Language
 au BufNewFile,BufRead *.src                    call dist#ft#FTsrc()
 au BufNewFile,BufRead *.dat                    call dist#ft#FTdat()
@@ -1375,75 +603,21 @@ if has("fname_case")
    au BufNewFile,BufRead *.Sub,*.SUB           setf krl
 endif
 
-" 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,Config.in  setf kconfig
-
-" Kyaml
-au BufNewFile,BufRead *.kyaml,*.kyml           setf yaml
-
-" Lace (ISE)
-au BufNewFile,BufRead *.ace,*.ACE              setf lace
-
 " Lalrpop
 au BufNewFile,Bufread *.lalrpop                        setf lalrpop
 
 " Larch Shared Language
 au BufNewFile,BufRead .lsl                     call dist#ft#FTlsl()
 
-" 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 configuration
-au BufNewFile,BufRead ldaprc,.ldaprc,ldap.conf setf ldapconf
-
-" LDAP LDIF
-au BufNewFile,BufRead *.ldif                   setf ldif
-
-" Luadoc, Ldoc (must be before *.ld)
-au BufNewFile,BufRead config.ld                        setf lua
-
 " Ld loader
 au BufNewFile,BufRead *.ld,*/ldscripts/*       setf ld
 
-" Lean
-au BufNewFile,BufRead *.lean                   setf lean
-
-" Ledger
-au BufRead,BufNewFile *.ldg,*.ledger,*.journal                 setf ledger
-
-" lf configuration (lfrc)
-au BufNewFile,BufRead lfrc                     setf lf
-
-" Leo
-au BufNewFile,BufRead *.leo                    setf leo
-
-" 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
 
@@ -1456,12 +630,6 @@ au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc  setf lftp
 " Lifelines, LLVM, or Lex for C++
 au BufNewFile,BufRead *.ll                     call dist#ft#FTll()
 
-" Lilo: Linux loader
-au BufNewFile,BufRead lilo.conf                        setf lilo
-
-" Lilypond
-au BufNewFile,BufRead *.ly,*.ily               setf lilypond
-
 " Lisp (*.el = ELisp)
 " *.jl was removed, it's also used for Julia, better skip than guess wrong.
 if has("fname_case")
@@ -1473,100 +641,46 @@ endif
 " *.cl = Common Lisp or OpenCL
 au BufNewFile,BufRead *.cl call dist#ft#FTcl()
 
-" SBCL implementation of Common Lisp
-au BufNewFile,BufRead sbclrc,.sbclrc           setf lisp
-
-" Liquidsoap
-au BufNewFile,BufRead *.liq                    setf liquidsoap
-
-" 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
 
-" Livebook
-au BufNewFile,BufRead *.livemd                 setf livebook
-
 " 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 *.lotos          setf lotos
-
 " LOTOS or LaTeX \listoftables files
 au BufNewFile,BufRead *.lot
        \ if getline(1) =~# '\\contentsline' |setf tex|else|setf lotos|endif
 
-" Lout (also: *.lt)
-au BufNewFile,BufRead *.lou,*.lout             setf lout
-
 " Lua, Texlua
 au BufNewFile,BufRead *.lua,*.tlu,.lua_history setf lua
 
-" Luau
-au BufNewFile,BufRead *.luau           setf luau
-
-" Luau config
-au BufNewFile,BufRead .luaurc          setf jsonc
-
-" Luacheck
-au BufNewFile,BufRead .luacheckrc              setf lua
-
 " Luarocks
 au BufNewFile,BufRead *.rockspec,rock_manifest setf lua
 
 " Linden Scripting Language (Second Life)
 au BufNewFile,BufRead *.lsl                    call dist#ft#FTlsl()
 
-" Lynx style file (or LotusScript!)
-au BufNewFile,BufRead *.lss                    setf lss
-
 " M4
 au BufNewFile,BufRead *.m4     call dist#ft#FTm4()
 
 au BufNewFile,BufRead .m4_history              setf m4
 
-" 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  call dist#ft#FTmake()
 au BufNewFile,BufRead Kbuild                   setf make
 
-" MakeIndex
-au BufNewFile,BufRead *.ist,*.mst              setf ist
-
-" Mallard
-au BufNewFile,BufRead *.page                   setf mallard
-
-" Manpage
-au BufNewFile,BufRead *.man                    setf man
-
 " 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
        \ if getline(1) =~ '^\*\+$' |
@@ -1583,62 +697,24 @@ au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md
        \   setf markdown |
        \ endif
 
-" Mason (it used to include *.comp, are those Mason files?)
-au BufNewFile,BufRead *.mason,*.mhtml  setf mason
-
 " Mathematica, Matlab, Murphi, Objective C or Octave
 au BufNewFile,BufRead *.m                      call dist#ft#FTm()
 
-" Mathematica notebook and package files
-au BufNewFile,BufRead *.nb,*.wl                        setf mma
-
-" Maya Extension Language
-au BufNewFile,BufRead *.mel                    setf mel
-
 " mbsync
 au BufNewFile,BufRead *.mbsyncrc,isyncrc       setf mbsync
 
-" mcmeta
-au BufNewFile,BufRead *.mcmeta                 setf json
-
-" MediaWiki
-au BufNewFile,BufRead *.mw,*.wiki              setf mediawiki
-
 " 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
 
-" Mermaid
-au BufNewFile,BufRead *.mmd,*.mmdc,*.mermaid   setf mermaid
-
-" Meson Build system config
-au BufNewFile,BufRead meson.build,meson.options,meson_options.txt setf meson
-au BufNewFile,BufRead *.wrap                   setf dosini
-
-" 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()
 
-" msmtp
-au BufNewFile,BufRead .msmtprc                 setf msmtp
-
-" Symbian meta-makefile definition (MMP)
-au BufNewFile,BufRead *.mmp                    setf mmp
-
 " ABB Rapid, Modula-2, Modsim III or LambdaProlog
 au BufNewFile,BufRead *.mod                    call dist#ft#FTmod()
 if has("fname_case")
@@ -1652,39 +728,12 @@ endif
 " Modula-3 (.m3, .i3, .mg, .ig)
 au BufNewFile,BufRead *.[mi][3g]               setf modula3
 
-" Larch/Modula-3
-au BufNewFile,BufRead *.lm3                    setf modula3
-
 " Modconf
 au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
 
-" Monk
-au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc setf monk
-
-" MOO
-au BufNewFile,BufRead *.moo                    setf moo
-
-" Moonscript
-au BufNewFile,BufRead *.moon                   setf moonscript
-
-" Move language
-au BufNewFile,BufRead *.move                   setf move
-
-" 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,.mysql_history   setf mysql
 
@@ -1704,21 +753,9 @@ au BufNewFile,BufRead *.rc,*.rch
 " Mojo files use either .mojo or .🔥 as extension
 au BufNewFile,BufRead *.mojo,*.🔥            setf mojo
 
-" MuPAD source
-au BufRead,BufNewFile *.mu                     setf mupad
-
-" Mush
-au BufNewFile,BufRead *.mush                   setf mush
-
-" Mustache
-au BufNewFile,BufRead *.mustache               setf mustache
-
 " Mutt setup file (also for Muttng)
 au BufNewFile,BufRead Mutt{ng,}rc              setf muttrc
 
-" N1QL
-au BufRead,BufNewfile *.n1ql,*.nql             setf n1ql
-
 " Neomutt log
 au BufNewFile,BufRead *.neomuttdebug*          setf neomuttlog
 
@@ -1731,36 +768,12 @@ au BufNewFile,BufRead */etc/nanorc,*.nanorc      setf nanorc
 " Natural
 au BufNewFile,BufRead *.NS[ACGLMNPS]           setf natural
 
-" Noemutt setup file
-au BufNewFile,BufRead Neomuttrc                        setf neomuttrc
-
-" Netrc
-au BufNewFile,BufRead .netrc                   setf netrc
-
 " Neofetch
 au BufNewFile,BufRead */neofetch/config.conf   setf sh
 
 " Nginx
 au BufNewFile,BufRead *.nginx,nginx*.conf,*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
-
-" Norg
-au BufNewFile,BufRead *.norg           setf norg
-
-" 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" |
@@ -1772,9 +785,6 @@ au BufNewFile,BufRead *.[0-9],*.[013]p,*.[1-8]x,*.3{am,perl,pm,posix,type},*.n     c
 " Nroff or Objective C++
 au BufNewFile,BufRead *.mm                     call dist#ft#FTmm()
 
-" Not Quite C
-au BufNewFile,BufRead *.nqc                    setf nqc
-
 " notmuch
 au BufNewFile,BufRead .notmuch-config{,.*}             setf dosini
 au BufNewFile,BufRead ~/.config/notmuch/*/config       setf dosini
@@ -1782,74 +792,22 @@ if exists('$XDG_CONFIG_HOME')
   au BufNewFile,BufRead $XDG_CONFIG_HOME/notmuch/*/config setf dosini
 endif
 
-" NSE - Nmap Script Engine - uses Lua syntax
-au BufNewFile,BufRead *.nse                    setf lua
-
-" NSIS
-au BufNewFile,BufRead *.nsi,*.nsh              setf nsis
-
-" N-Triples
-au BufNewFile,BufRead *.nt                     setf ntriples
-
-" Nu
-au BufNewFile,BufRead *.nu             setf nu
-
-" Numbat
-au BufNewFile,BufRead *.nbt            setf numbat
-
-" Oblivion Language and Oblivion Script Extender
-au BufNewFile,BufRead *.obl,*.obse,*.oblivion,*.obscript  setf obse
-
-" Objdump
-au BufNewFile,BufRead *.objdump,*.cppobjdump  setf objdump
-
 " 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,*/octave/history  setf octave
 
-" Odin
-au BufNewFile,BufRead *.odin                   setf odin
-
-" Omnimark
-au BufNewFile,BufRead *.xom,*.xin              setf omnimark
-
-" ondir
-au BufNewFile,BufRead .ondirrc                 setf ondir
-
 " OPAM
 au BufNewFile,BufRead opam,*.opam,*.opam.template,opam.locked,*.opam.locked setf opam
 
-" OpenAL Soft config files
-au BufNewFile,BufRead .alsoftrc,alsoft.conf,alsoft.ini,alsoftrc.sample setf dosini
-
 " OpenFOAM
 au BufNewFile,BufRead fvSchemes,fvSolution,fvConstrains,fvModels,*/constant/g  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 (Emacs' org-mode)
-au BufNewFile,BufRead *.org,*.org_archive              setf org
-
-" Packet filter conf
-au BufNewFile,BufRead pf.conf                          setf pf
+" OPL
+au BufNewFile,BufRead *.[Oo][Pp][Ll]                   setf opl
 
 " ini style config files, using # comments
-au BufNewFile,BufRead pacman.conf,mpv.conf             setf confini
 au BufNewFile,BufRead */.aws/config,*/.aws/credentials,*/.aws/cli/alias        setf confini
 au BufNewFile,BufRead *.nmconnection                   setf confini
 au BufNewFile,BufRead paru.conf                                setf confini
@@ -1871,24 +829,12 @@ au BufRead pacman.log*                                   call s:StarSetf('pacmanlog')
 " 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
-au BufNewFile,BufRead *.dpr                            setf pascal
-
 " Xilinx labtools project file or Lazarus program file
 au BufNewFile,BufRead *.lpr
        \ if getline(1) =~# "<?xml" |
@@ -1897,21 +843,6 @@ au BufNewFile,BufRead *.lpr
        \   setf pascal |
        \ endif
 
-" 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
-
-" PEM (Privacy-Enhanced Mail)
-au BufNewFile,BufRead *.pem,*.cer,*.crt,*.csr          setf pem
-
 " Perl or Prolog
 if has("fname_case")
   au BufNewFile,BufRead *.pl,*.PL                      call dist#ft#FTpl()
@@ -1920,9 +851,6 @@ else
 endif
 au BufNewFile,BufRead *.plx,*.al,*.psgi                        setf perl
 
-" Perl Reply
-au BufNewFile,BufRead .replyrc                         setf dosini
-
 " Perl, XPM or XPM2
 au BufNewFile,BufRead *.pm
        \ if getline(1) =~ "XPM2" |
@@ -1933,9 +861,6 @@ au BufNewFile,BufRead *.pm
        \   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.
@@ -1943,22 +868,10 @@ au BufNewFile,BufRead *.pod                      setf pod
 " Also .theme for Drupal theme files.
 au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp,*.phpt,*.theme       setf php
 
-" 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
-
 " Pip requirements
-au BufNewFile,BufRead *.pip                    setf requirements
-au BufNewFile,BufRead requirements.txt         setf requirements
 au BufNewFile,BufRead *-requirements.txt       setf requirements
 au BufNewFile,BufRead requirements-*.txt       setf requirements
 au BufNewFile,BufRead constraints.txt          setf requirements
@@ -1966,49 +879,9 @@ au BufNewFile,BufRead requirements.in             setf requirements
 au BufNewFile,BufRead requirements/*.txt       setf requirements
 au BufNewFile,BufRead requires/*.txt           setf requirements
 
-" Pipenv Pipfiles
-au BufNewFile,BufRead Pipfile                  setf toml
-au BufNewFile,BufRead Pipfile.lock             setf json
-
-" Pixi lock
-au BufNewFile,BufRead pixi.lock                        setf yaml
-
 " Pkl
 au BufNewFile,BufRead *.pkl,*.pcf,pkl-lsp://*  setf pkl
 
-" 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
-
-" Pony
-au BufNewFile,BufRead *.pony                   setf pony
-
-" Postfix main config
-au BufNewFile,BufRead main.cf,main.cf.proto    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()
 
@@ -2017,43 +890,12 @@ au BufNewFile,BufRead    *.ps1,*.psd1,*.psm1,*.pssc      setf ps1
 au BufNewFile,BufRead  *.ps1xml                        setf ps1xml
 au BufNewFile,BufRead  *.cdxml,*.psc1                  setf xml
 
-" Power Query M
-au BufNewFile,BufRead *.pq                     setf pq
-
 " 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
-
-" 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()
 
@@ -2064,98 +906,26 @@ au BufNewFile,BufRead *.i                        call dist#ft#FTi()
 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 *.txtpb,*.textproto,*.textpb,*.pbtxt setf pbtxt
-
-" Poke
-au BufNewFile,BufRead *.pk                     setf poke
-
 " Protocols
 au BufNewFile,BufRead */etc/protocols          setf protocols
 
-" Nvidia PTX (Parallel Thread Execution)
-" See https://docs.nvidia.com/cuda/parallel-thread-execution/
-au BufNewFile,BufRead *.ptx                    setf ptx
-
-" Purescript
-au BufNewFile,BufRead *.purs                   setf purescript
-
-" PyPA manifest files
-au BufNewFile,BufRead MANIFEST.in              setf pymanifest
-
-" Pyret
-au BufNewFile,BufRead *.arr                    setf pyret
-
-" Pyrex/Cython
-au BufNewFile,BufRead *.pyx,*.pyx+,*.pxd,*.pxi setf pyrex
-
 " Python, Python Shell Startup and Python Stub Files
 " Quixote (Python-based web framework) and IPython
 au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc,.python_history,.jline-jython.history        setf python
 au BufNewFile,BufRead *.ipy,*.ptl,*.pyi,SConstruct                setf python
 
-" QL
-au BufRead,BufNewFile *.ql,*.qll               setf ql
-
-" QML
-au BufRead,BufNewFile *.qml,*.qbs                      setf qml
-
-" QMLdir
-au BufRead,BufNewFile qmldir                   setf qmldir
-
-" Quarto
-au BufRead,BufNewFile *.qmd                    setf quarto
-
-" QuickBms
-au BufRead,BufNewFile *.bms                    setf quickbms
-
-" Racket (formerly detected as "scheme")
-au BufNewFile,BufRead *.rkt,*.rktd,*.rktl      setf racket
-
-" 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
-
 " Ripgrep rc
 au BufNewFile,BufRead {.,}ripgreprc                    setf conf
 
@@ -2180,12 +950,6 @@ else
   au BufNewFile,BufRead *.rmd,*.smd                    setf rmd
 endif
 
-" R profile file
-au BufNewFile,BufRead .Rhistory,.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
@@ -2199,106 +963,15 @@ 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
-
-" ILE RPG
-au BufNewFile,BufRead *.rpgle,*.rpgleinc       setf rpgle
-
-" 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
-
-" Roc
-au BufNewFile,BufRead *.roc                    setf roc
-
-" RON (Rusty Object Notation)
-au BufNewFile,BufRead *.ron                    setf ron
-
-" MikroTik RouterOS script
-au BufRead,BufNewFile *.rsc                    setf routeros
-
-" Rpcgen
-au BufNewFile,BufRead *.x                      setf rpcgen
-
-" reStructuredText Documentation Format
-au BufNewFile,BufRead *.rst                    setf rst
-
-" RTF
-au BufNewFile,BufRead *.rtf                    setf rtf
-
-" Interactive Ruby shell
-au BufNewFile,BufRead .irbrc,irbrc,.irb_history,irb_history    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
-au BufNewFile,BufRead *.sl                     setf slang
-
-" Sage
-au BufNewFile,BufRead *.sage                   setf sage
-
-" 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, TI linear assembly
 au BufNewFile,BufRead *.sa                     call dist#ft#FTsa()
 
-" Scala
-au BufNewFile,BufRead *.scala,*.mill           setf scala
-
-" SBT - Scala Build Tool
-au BufNewFile,BufRead *.sbt                    setf sbt
-
-" Slang Shading Language
-au BufNewFile,BufRead *.slang                  setf shaderslang
-
-" Slint
-au BufNewFile,BufRead *.slint                  setf slint
-
 " SuperCollider
 au BufNewFile,BufRead *.sc                     call dist#ft#FTsc()
 
@@ -2307,36 +980,6 @@ 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.
@@ -2375,18 +1018,12 @@ au BufNewFile,BufRead *.decl,*.dcl,*.dec
        \    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 and Arch Linux PKGBUILDs 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[_-]history,bash-fc[-.],*.ebuild,*.bash,*.eclass,PKGBUILD,*.bats,*.cygport call dist#ft#SetFileTypeSH("bash")
 au BufNewFile,BufRead .kshrc,*.ksh call dist#ft#SetFileTypeSH("ksh")
 au BufNewFile,BufRead */etc/profile,.profile,*.sh,*.env{rc,} call dist#ft#SetFileTypeSH(getline(1))
-" Alpine Linux APKBUILDs are actually POSIX sh scripts with special treatment.
-au BufNewFile,BufRead APKBUILD setf apkbuild
-
 " Shell script (Arch Linux) or PHP file (Drupal)
 au BufNewFile,BufRead *.install
        \ if getline(1) =~ '<?php' |
@@ -2402,71 +1039,20 @@ au BufNewFile,BufRead .tcshrc,*.tcsh,tcsh.tcshrc,tcsh.login     call dist#ft#SetFile
 " (patterns ending in a start further below)
 au BufNewFile,BufRead .login,.cshrc,csh.cshrc,csh.login,csh.logout,*.csh,.alias  call dist#ft#CSH()
 
-" TriG
-au BufNewFile,BufRead *.trig                   setf trig
-
-" Zig and Zig Object Notation (ZON)
-au BufNewFile,BufRead *.zig,*.zon              setf zig
-
-" Ziggy and Ziggy Schema
-au BufNewFile,BufRead *.ziggy                   setf ziggy
-au BufNewFile,BufRead *.ziggy-schema            setf ziggy_schema
-
-" Zserio
-au BufNewFile,BufRead *.zs                     setf zserio
-
 " 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,.zsh_history setf zsh
 au BufNewFile,BufRead *.zsh,*.zsh-theme,*.zunit                setf zsh
 
-" Salt state files
-au BufNewFile,BufRead *.sls                    setf salt
-
 " Scheme, Supertux configuration, Lips.js history, Guile init file ("racket" patterns are now separate, see above)
 au BufNewFile,BufRead *.scm,*.ss,*.sld,*.stsg,*/supertux2/config,.lips_repl_history,.guile     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
-
-" Cadence
-au BufNewFile,BufRead *.cdc                    setf cdc
-
-" Cangjie
-au BufNewFile,BufRead *.cj                     setf cangjie
-
-" SLRN
-au BufNewFile,BufRead .slrnrc                  setf slrnrc
-au BufNewFile,BufRead *.score                  setf slrnsc
-
-" Smali
-au BufNewFile,BufRead *.smali                  setf smali
-
-" 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.*?>' |
@@ -2483,57 +1069,13 @@ au BufNewFile,BufRead *.smi
        \   setf mib |
        \ endif
 
-" SMITH
-au BufNewFile,BufRead *.smt,*.smith            setf smith
-
-" Smithy
-au BufNewFile,BufRead *.smithy                 setf smithy
-
 " Snakemake
 au BufNewFile,BufRead Snakefile,*.smk          setf snakemake
 
-" 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
-au BufNewFile,BufRead *.slnx                   setf xml
-
-" 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,*.tyc,*.pkb,*.pks  setf sql
-
 " *.typ can be either SQL or Typst files
 au BufNewFile,BufRead *.typ                    call dist#ft#FTtyp()
 
@@ -2541,68 +1083,31 @@ au BufNewFile,BufRead *.typ                     call dist#ft#FTtyp()
 au BufNewFile,BufRead *.sql                    call dist#ft#SQL()
 au BufNewFile,BufRead .sqlite_history          setf sql
 
-" SQLJ
-au BufNewFile,BufRead *.sqlj                   setf sqlj
-
-" PRQL
-au BufNewFile,BufRead *.prql                   setf prql
-
-" 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
 
-" Starlark
-au BufNewFile,BufRead *.ipd,*.star,*.starlark  setf starlark
-
 " OpenVPN configuration
-au BufNewFile,BufRead *.ovpn                   setf openvpn
 au BufNewFile,BufRead */openvpn/*/*.conf       setf openvpn
 
 " 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
-
 " SPA JSON
 au BufNewFile,BufRead */pipewire/*.conf                setf spajson
 au BufNewFile,BufRead */wireplumber/*.conf     setf spajson
 
-" 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
-
-" Sway (programming language)
-au BufNewFile,BufRead *.sw                     setf sway
-
 " Swift
-au BufNewFile,BufRead *.swift,*.swiftinterface setf swift
 au BufNewFile,BufRead *.swift.gyb              setf swiftgyb
 
 " Swift Intermediate Language or SILE
 au BufNewFile,BufRead *.sil                    call dist#ft#FTsil()
 
-" Swig
-au BufNewFile,BufRead *.swg,*.swig setf swig
-
 " Sysctl
 au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf  setf sysctl
 
@@ -2618,78 +1123,29 @@ 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
-
-" SysML
-au BufNewFile,BufReadPost *.sysml      setf sysml
-
-" LLVM TableGen
-au BufNewFile,BufRead *.td                     setf tablegen
-
 " 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
-
-" Unx Tal
-au BufNewFile,BufRead *.tal                    setf tal
-
 " Task
-au BufRead,BufNewFile {pending,completed,undo}.data  setf taskdata
-au BufRead,BufNewFile *.task                   setf taskedit
+au BufNewFile,BufRead {pending,completed,undo}.data  setf taskdata
+au BufNewFile,BufRead *.task                   setf taskedit
 
 " Tcl (JACL too)
 au BufNewFile,BufRead *.tcl,*.tm,*.tk,*.itcl,*.itk,*.jacl,.tclshrc,.wishrc,.tclsh-history      setf tcl
 
-" Xilinx's xsct and xsdb use tcl
-au BufNewFile,BufRead .xsctcmdhistory,.xsdbcmdhistory  setf tcl
-
-" templ
-au BufNewFile,BufRead *.templ                  setf templ
-
-" 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
+au BufNewFile,BufRead *.ttl
        \ if getline(1) =~ '^@\?\(prefix\|base\)' |
        \   setf turtle |
        \ else |
        \   setf teraterm |
        \ endif
 
-" Terminfo
-au BufNewFile,BufRead *.ti                     setf terminfo
-
-" Tera
-au BufRead,BufNewFile *.tera                   setf tera
-
-" 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()
 au BufNewFile,BufRead texdoc.cnf               setf conf
 
@@ -2698,71 +1154,17 @@ au BufNewFile,BufRead texdoc.cnf                setf conf
 " Sometime we need to view its content for debugging
 au BufNewFile,BufRead *.{pgf,nlo,nls,thm,eps_tex,pygtex,pygstyle,clo,aux,brf,ind,lof,loe,nav,vrb,ins,tikz,bbx,cbx,beamer}      setf tex
 
-" LaTeX files generated by Inkscape
-au BufNewFile,BufRead *.pdf_tex                        setf tex
-
-" 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
-
-" Thrift (Apache)
-au BufNewFile,BufRead *.thrift                 setf thrift
-
-" Tidy config
-au BufNewFile,BufRead .tidyrc,tidyrc,tidy.conf setf tidy
-
-" TF (TinyFugue) mud client
-au BufNewFile,BufRead .tfrc,tfrc               setf tf
-
 " TF (TinyFugue) 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,uv.lock           setf toml
 
-" TPP - Text Presentation Program
-au BufNewFile,BufRead *.tpp                    setf tpp
-
-" TRACE32 Script Language
-au BufNewFile,BufRead *.cmm,*.cmmt,*.t32       setf trace32
-
-" 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
+au BufNewFile,BufRead *.ts
        \ if getline(1) =~ '<?xml' |
        \   setf xml |
        \ else |
@@ -2770,18 +1172,6 @@ au BufNewFile,BufReadPost *.ts
        \ endif
 au BufNewFile,BufRead .ts_node_repl_history    setf typescript
 
-" TypeScript module and common
-au BufNewFile,BufRead *.mts,*.cts              setf typescript
-
-" TypeScript with React
-au BufNewFile,BufRead *.tsx                    setf typescriptreact
-
-" TypeSpec files
-au BufNewFile,BufRead *.tsp                    setf typespec
-
-" Motif UIT/UIL files
-au BufNewFile,BufRead *.uit,*.uil              setf uil
-
 " Udev conf
 au BufNewFile,BufRead */etc/udev/udev.conf     setf udevconf
 
@@ -2791,12 +1181,6 @@ au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm
 " Udev symlinks config
 au BufNewFile,BufRead */etc/udev/cdsymlinks.conf       setf sh
 
-" Ungrammar, AKA Un-grammar
-au BufNewFile,BufRead *.ungram                 setf ungrammar
-
-" UnrealScript
-au BufNewFile,BufRead *.uc                     setf uc
-
 " Updatedb
 au BufNewFile,BufRead */etc/updatedb.conf      setf updatedb
 
@@ -2808,57 +1192,14 @@ 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
 
-" URL shortcut
-au BufNewFile,BufRead *.url                    setf urlshortcut
-
-" V
-au BufNewFile,BufRead *.vsh,*.vv                       setf v
-
-" 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
-
-" Vento
-au BufNewFile,BufRead *.vto                    setf vento
-
-" Vera
-au BufNewFile,BufRead *.vr,*.vri,*.vrh         setf vera
-
-" Vagrant (uses Ruby syntax)
-au BufNewFile,BufRead Vagrantfile              setf ruby
-
 " Verilog HDL, V or Coq
 au BufNewFile,BufRead *.v                      call dist#ft#FTv()
 
-" Verilog-AMS HDL
-au BufNewFile,BufRead *.va,*.vams              setf verilogams
-
-" SystemVerilog
-au BufNewFile,BufRead *.sv,*.svh               setf systemverilog
-
-" VHS tape
-" .tape is also used by TapeCalc, which we do not support ATM.  If TapeCalc
-" support is needed the contents of the file needs to be inspected.
-au BufNewFile,BufRead *.tape                   setf vhs
-
-" VHDL
-au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst,*.vho  setf vhdl
-
 " Vim script
 au BufNewFile,BufRead *.vim,.exrc,_exrc,.netrwhist     setf vim
 
-" Viminfo file
-au BufNewFile,BufRead .viminfo,_viminfo                setf viminfo
-
 " Virata Config Script File or Drupal module
-au BufRead,BufNewFile *.hw,*.module,*.pkg
+au BufNewFile,BufRead *.hw,*.module,*.pkg
        \ if getline(1) =~ '<?php' |
        \   setf php |
        \ else |
@@ -2870,79 +1211,12 @@ au BufRead,BufNewFile *.hw,*.module,*.pkg
 " Visual Basic or FORM
 au BufNewFile,BufRead *.frm                    call dist#ft#FTfrm()
 
-" Visual Basic
-" user control, ActiveX document form, active designer, property page
-au BufNewFile,BufRead *.ctl,*.dob,*.dsr,*.pag  setf vb
-
 " Visual Basic or Vimball Archiver
 au BufNewFile,BufRead *.vba                    call dist#ft#FTvba()
 
-" Visual Basic Project
-au BufNewFile,BufRead *.vbp                    setf dosini
-
-" VBScript (close to Visual Basic)
-au BufNewFile,BufRead *.vbs                    setf vb
-
-" Visual Basic .NET (close to Visual Basic)
-au BufNewFile,BufRead *.vb                     setf vb
-
-" Visual Studio Macro
-au BufNewFile,BufRead *.dsm                    setf vb
-
-" SaxBasic (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
-
 " Waybar config
 au BufNewFile,BufRead */waybar/config          setf jsonc
 
-" WebAssembly
-au BufNewFile,BufRead *.wat,*.wast             setf wat
-
-" WebAssembly Interface Type (WIT)
-au BufNewFile,BufRead *.wit                    setf wit
-
-" 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
-
-" WebGPU Shading Language (WGSL)
-au BufNewFile,BufRead *.wgsl                   setf wgsl
-
-" 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
 
@@ -2961,15 +1235,6 @@ au BufNewFile,BufRead *.ws[fc]                   setf wsh
 " Xdg-user-dirs
 au BufNewFile,BufRead user-dirs.dirs,user-dirs.defaults                setf sh
 
-" XHTML
-au BufNewFile,BufRead *.xhtml,*.xht            setf xhtml
-
-" X11vnc
-au BufNewFile,BufRead .x11vncrc                        setf conf
-
-" Xprofile
-au BufNewFile,BufRead .xprofile                        setf sh
-
 " 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
@@ -2996,31 +1261,16 @@ au BufNewFile,BufRead xorg.conf,xorg.conf-4     let b:xf86conf_xfree86_version = 4 |
 " Xinetd conf
 au BufNewFile,BufRead */etc/xinetd.conf                setf xinetd
 
-" Xilinx Vivado/Vitis project files and block design files
-au BufNewFile,BufRead *.xpr,*.xpfm,*.spfm,*.bxml,*.mmi         setf xml
-au BufNewFile,BufRead *.bd,*.bda,*.xci                         setf json
-au BufNewFile,BufRead *.mss                                    setf mss
-
-" XS Perl extension interface language
-au BufNewFile,BufRead *.xs                     setf xs
-
-" X compose file
-au BufNewFile,BufRead .XCompose,Compose        setf xcompose
-
 " 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
 
@@ -3030,77 +1280,22 @@ 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
 
-" MSBUILD configuration files are also XML
-au BufNewFile,BufRead Directory.Packages.props,Directory.Build.targets,Directory.Build.props   setf xml
-
-" Unison Language
-au BufNewFile,BufRead *.u,*.uu                         setf unison
-
-" 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
-
-" Workflow Description Language (WDL)
-au BufNewFile,BufRead *.wdl                    setf wdl
-
-" 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,*.eyaml             setf yaml
 au BufNewFile,BufRead */.kube/config,*/.kube/kuberc    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
-
-" Yuck
-au BufNewFile,BufRead *.yuck                   setf yuck
-
 " 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)
@@ -3108,9 +1303,8 @@ 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
-
+" Detect by extention
+au BufNewFile,BufRead *                                call dist#ft#DetectFromExt()
 augroup END
 
 
@@ -3279,9 +1473,6 @@ au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc*           call s:StarSetf('muttrc')
 au BufNewFile,BufRead .neomuttrc*,*/.neomutt/neomuttrc*        call s:StarSetf('neomuttrc')
 au BufNewFile,BufRead neomuttrc*,Neomuttrc*            call s:StarSetf('neomuttrc')
 
-" Nfs
-au BufNewFile,BufRead nfs.conf,nfsmount.conf           setf dosini
-
 " Nginx
 au BufNewFile,BufRead */etc/nginx/*,*/usr/local/nginx/conf/*   call s:StarSetf('nginx')
 
@@ -3318,7 +1509,7 @@ au BufNewFile,BufRead *termcap*
 
 " ReDIF
 " Only used when the .rdf file was not detected to be XML.
-au BufRead,BufNewFile *.rdf                    call dist#ft#Redif()
+au BufNewFile,BufRead *.rdf                    call dist#ft#Redif()
 
 " Remind
 au BufNewFile,BufRead .reminders*              call s:StarSetf('remind')
@@ -3326,9 +1517,6 @@ au BufNewFile,BufRead .reminders*         call s:StarSetf('remind')
 " SGML catalog file
 au BufNewFile,BufRead sgml.catalog*            call s:StarSetf('catalog')
 
-" Stylus
-au BufNewFile,BufReadPost *.styl,*.stylus      setf stylus
-
 " avoid doc files being recognized a shell files
 au BufNewFile,BufRead */doc/{,.}bash[_-]completion{,.d,.sh}{,/*} setf text
 
@@ -3349,9 +1537,6 @@ au BufNewFile,BufRead .login*,.cshrc*  call dist#ft#CSH()
 " tmux configuration with arbitrary extension
 au BufNewFile,BufRead {.,}tmux*.conf*          call s:StarSetf('tmux')
 
-" Universal Scene Description
-au BufNewFile,BufRead *.usda,*.usd             setf usd
-
 " UCI
 " UCI files are normally in /etc/config, but that might be mounted over sshfs or similar, so we match more loosely.
 " There was some concern[1] that this pattern would match too much, so now we check the file content as well.
@@ -3391,40 +1576,17 @@ 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')
 
-" Yarn lock
-au BufNewFile,BufRead yarn.lock                        setf yaml
-
-" Zathurarc
-au BufNewFile,BufRead zathurarc                        setf zathurarc
-
-" Rofi stylesheet
-au BufNewFile,BufRead *.rasi                   setf rasi
-
 " 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')
 
-" Zsh module
-" mdd: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L285-L288
-" mdh, pro: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L268-L271
-" *.mdd will generate *.mdh, *.pro and *.epro.
-" module's *.c will #include *.mdh containing module dependency information and
-" *.pro containing all static declarations of *.c
-" *.epro contains all external declarations of *.c
-au BufNewFile,BufRead *.mdh,*.epro             setf c
-au BufNewFile,BufRead *.mdd                    setf sh
-
 " 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
 
-" Blueprint build system file
-au BufNewFile,BufRead *.bp                     setf bp
 
 " Generic log file
 " Disabled cause it is too distracting