function! TestExtension(filetype, filename, content) call Log('Detecting ' . a:filetype . ' filetype (' . a:filename . ')...') try set shortmess+=F let g:message = "" exec "noautocmd n " . a:filename silent put =a:content 1delete _ filetype detect exec "if &filetype != '" . a:filetype . "' \nthrow &filetype\nendif" exec ":bw!" catch echo g:message echo "Filename '" . a:filename . "' does not resolve to extension '" . a:filetype . "'" echo " instead received: '" . v:exception . "'" exec ":cq!" endtry endfunction " make sure native vim scripts.vim is respected call TestExtension("rib", "renderman", "##RenderMan") " make sure case of file does matter when recognizing file call TestExtension("ruby", "scripts/build", "#!/usr/bin/env ruby") call TestExtension("sh", "bash1", "#!/bin/bash") call TestExtension("sh", "bash2", "#! /bin/bash") call TestExtension("sh", "bash3", "#! /bin/bash2.3") call TestExtension("sh", "bash4", "#!/usr/bin/env bash") call TestExtension("sh", "bash6", "#!/usr/bin/env -i -=split-string foo=bar bash -l foo") call TestExtension("sh", "bash1", "#!/bin/bash") " This is defined only by vim-native scripts.vim for now call TestExtension("sh", "bash7", ":") " Vim help file call TestExtension("help", $VIMRUNTIME . "/doc/foobar.txt", "") " Abaqus or Trasys call TestExtension("abaqus", "foobar.inp", "*HEADING\nFoobar") call TestExtension("trasys", "foobar.inp", "MSC PATRAN\n* foobar\nHEADER SURFACE DATA\nBSC ENCLO1") " 8th (Firth-derivative) call TestExtension("8th", "foobar.8th", "") call TestExtension("8th", "foobar.8th", "") " A-A-P recipe call TestExtension("aap", "foobar.aap", "") " A2ps printing utility call TestExtension("a2ps", "/etc/a2ps.cfg", "") call TestExtension("a2ps", "/usr/local/etc/a2ps.cfg", "") call TestExtension("a2ps", "/etc/a2ps/foobar.cfg", "") call TestExtension("a2ps", "/usr/local/etc/a2ps/foobar.cfg", "") call TestExtension("a2ps", "/tmp/a2psrc", "") call TestExtension("a2ps", "/tmp/.a2psrc", "") " ABAB/4 call TestExtension("abap", "foobar.abap", "") " ABC music notation call TestExtension("abc", "foobar.abc", "") " ABEL call TestExtension("abel", "foobar.abl", "") " AceDB call TestExtension("acedb", "foobar.wrm", "") " Ada (83, 9X, 95) call TestExtension("ada", "foobar.adb", "") call TestExtension("ada", "foobar.ads", "") call TestExtension("ada", "foobar.ada", "") call TestExtension("ada", "foobar.gpr", "") " AHDL call TestExtension("ahdl", "foobar.tdf", "") " AIDL call TestExtension("aidl", "foobar.aidl", "") " AMPL call TestExtension("ampl", "foobar.run", "") " Ant call TestExtension("ant", "build.xml", "") " Arduino call TestExtension("arduino", "foobar.ino", "") call TestExtension("arduino", "foobar.pde", "") " Apache config file call TestExtension("apache", ".htaccess", "") call TestExtension("apache", "/etc/httpd/foobar.conf", "") call TestExtension("apache", "/etc/apache2/sites-foobar/foobar.com", "") call TestExtension("apache", "/usr/local/etc/httpd/foobar.conf", "") call TestExtension("apache", "/usr/local/etc/apache2/sites-foobar/foobar.com", "") " XA65 MOS6510 cross assembler call TestExtension("a65", "foobar.a65", "") " Applescript call TestExtension("applescript", "foobar.scpt", "") " Applix ELF call TestExtension("elf", "foobar.am", "") call TestExtension("automake", "Makefile.am", "") call TestExtension("automake", "makefile.am", "") " ALSA configuration call TestExtension("alsaconf", ".asoundrc", "") call TestExtension("alsaconf", "/usr/share/alsa/alsa.conf", "") call TestExtension("alsaconf", "/media/foo/usr/share/alsa/alsa.conf", "") call TestExtension("alsaconf", "/etc/asound.conf", "") call TestExtension("alsaconf", "/media/foo/etc/asound.conf", "") " Arc Macro Language call TestExtension("aml", "foobar.aml", "") " APT config file call TestExtension("aptconf", "apt.conf", "") call TestExtension("aptconf", "/root/.aptitude/config", "") call TestExtension("aptconf", "/etc/apt/apt.conf.d/foo_bar-12", "") call TestExtension("aptconf", "/etc/apt/apt.conf.d/foo_bar-12.conf", "") call TestExtension("", "/etc/apt/apt.conf.d/.gsdf", "") " Arch Inventory file call TestExtension("arch", ".arch-inventory", "") call TestExtension("arch", "=tagging-method", "") " ART*Enterprise (formerly ART-IM) call TestExtension("art", "foobar.art", "") " AsciiDoc call TestExtension("asciidoc", "foobar.asciidoc", "") call TestExtension("asciidoc", "foobar.adoc", "") " ASN.1 call TestExtension("asn", "foobar.asn", "") call TestExtension("asn", "foobar.asn1", "") " Active Server Pages (with Visual Basic Script) call TestExtension("aspvbs", "foobar.asa", "") let g:filetype_asa = "fizfuz" call TestExtension("fizfuz", "foobar.asa", "") " Active Server Pages (with Perl or Visual Basic Script) call TestExtension("aspvbs", "vbs.asp", "") call TestExtension("aspperl", "perl.asp", "\n\n") let g:filetype_asp = "fizfuz" call TestExtension("fizfuz", "fizfuz.asp", "") " Grub (must be before catch *.lst) call TestExtension("grub", "/boot/grub/menu.lst", "") call TestExtension("grub", "/media/foobar/boot/grub/menu.lst", "") call TestExtension("grub", "/boot/grub/grub.conf", "") call TestExtension("grub", "/media/foobar/boot/grub/grub.conf", "") call TestExtension("grub", "/etc/grub.conf", "") call TestExtension("grub", "/media/foobar/etc/grub.conf", "") " Assembly (all kinds) " *.lst is not pure assembly, it has two extra columns (address, byte codes) au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call dist#ft#FTasm() " Macro (VAX) call TestExtension("vmasm", "foobar.mar", "") " Atlas call TestExtension("atlas", "foobar.atl", "") call TestExtension("atlas", "foobar.as", "") " Autoit v3 call TestExtension("autoit", "foobar.au3", "") " Autohotkey call TestExtension("autohotkey", "foobar.ahk", "") " Automake call TestExtension("automake", "Makefile.am", "") call TestExtension("automake", "makefile.am", "") call TestExtension("automake", "GNUmakefile.am", "") " Autotest .at files are actually m4 call TestExtension("m4", "foobar.at", "") " Avenue call TestExtension("ave", "foobar.ave", "") " Awk call TestExtension("awk", "foobar.awk", "") " C++ call TestExtension("c", "foobar.c", "") call TestExtension("cpp", "foobar.cxx", "") call TestExtension("cpp", "foobar.c++", "") call TestExtension("cpp", "foobar.hh", "") call TestExtension("cpp", "foobar.hxx", "") call TestExtension("cpp", "foobar.hpp", "") call TestExtension("cpp", "foobar.ipp", "") call TestExtension("cpp", "foobar.moc", "") call TestExtension("cpp", "foobar.tcc", "") call TestExtension("cpp", "foobar.inl", "") " Django call TestExtension("htmldjango", "foobar.j2", "") call TestExtension("htmldjango", "foobar.jinja", "") call TestExtension("htmldjango", "foobar.jinja2", "") call TestExtension("htmldjango", "foobar.njk", "") " vim-polyglot only call TestExtension("blade", "test.blade.php", "") call TestExtension("yaml.ansible", "playbook.yml", "") call TestExtension("yaml.ansible", "host_vars/foobar", "") call TestExtension("yaml.ansible", "handlers.foobar.yaml", "") call TestExtension("yaml.ansible", "requirements.yaml", "") call TestExtension("ps1xml", "foobar.ps1xml", "") call TestExtension("terraform", "terraform.tf", "") call TestExtension("idris2", "foobar.idr", "") call TestExtension("idris", "foobar.idr", "pkgs : List String\npkgs = [\"NCurses\", \"Readline\"]") let g:filetype_idr = "fizfuz" call TestExtension("fizfuz", "fizfuz.idr", "") " .m extension call TestExtension("octave", "matlab.m", "") call TestExtension("objc", "objc.m", "\n\n #import ") call TestExtension("octave", "objc.m", "results_ub_times=zeros(2,2,M);\n%results pour la lower bound") call TestExtension("mma", "mathematica.m", "newcase[ \"00003\" ];\n (* Hello world *)") call TestExtension("murphi", "murphi.m", "type\n square: 1 .. 9") call TestExtension("murphi", "murphi.m", "something\n--foobar") call TestExtension("octave", "percentcomment.m", "hello world\n%foobar") call TestExtension("objc", "comment.m", "\n/* Hello world */") let g:filetype_m = "fizfuz" call TestExtension("fizfuz", "fizfuz.m", "") " .fs extension call TestExtension("forth", "empty.fs", "") call TestExtension("fsharp", "fsharp.fs", "let myInt = 5") call TestExtension("glsl", "glsl.fs", "//#version 120\nvoid main() {}") let g:filetype_fs = "fizfuz" call TestExtension("fizfuz", "fizfuz.fs", "") " .re extension call TestExtension("reason", "empty.re", "") call TestExtension("cpp", "cpp.re", "#include \"config.h\"") call TestExtension("cpp", "cpp2.re", "#ifdef HAVE_CONFIG_H") call TestExtension("cpp", "cpp3.re", "#define YYCTYPE unsigned char") call TestExtension("reason", "react.re", "ReasonReact.Router.push('');") " .bas extension call TestExtension("vbnet", "vb.vb", "") call TestExtension("basic", "empty.bas", "") call TestExtension("vb", "vb1.bas", "Attribute VB_Name = \"Class1\"") call TestExtension("vb", "vb2.bas", "VERSION 5.00\nBegin VB.Form Form1") call TestExtension("vb", "vb2.bas", "VERSION 5.00\nBegin VB.Form Form1") call TestExtension("vb", "vb.sba", "") call TestExtension("vb", "vb.vbs", "") call TestExtension("vb", "vb.dsm", "") call TestExtension("vb", "vb.dsm", "") call TestExtension("vb", "vb.ctl", "") " .idr extension call TestExtension("idris", "lowercase.idr", "--idris1") call TestExtension("idris", "uppercase.idr", "--Idris1") call TestExtension("idris", "start-space-l.idr", "-- idris1") call TestExtension("idris", "start-space-u.idr", "-- Idris1") call TestExtension("idris", "two-spaces-l.idr", "-- idris 1") call TestExtension("idris", "two-spaces-u.idr", "-- Idris 1") "call TestExtension("idris", "mypkg.ipkg", "package mypkg\n\npkgs = pruviloj, lightyear") call TestExtension("idris", "use-type-prov.idr", "%language TypeProviders") call TestExtension("idris", "use-elab-refl.idr", "%language ElabReflection") call TestExtension("idris", "access-modifier.idr", "%access export\n\npublic export\nMyTest : Type-> Type\n\nfact : Nat -> Nat") call TestExtension("idris2", "lowercase.idr", "--idris2") call TestExtension("idris2", "uppercase.idr", "--Idris2") call TestExtension("idris2", "start-space-l.idr", "-- idris2") call TestExtension("idris2", "start-space-u.idr", "-- Idris2") call TestExtension("idris2", "two-spaces-l.idr", "-- idris 2") call TestExtension("idris2", "two-spaces-u.idr", "-- Idris 2") call TestExtension("idris2", "mypkg.ipkg", "package mypkg\n\ndepends = effects") call TestExtension("idris2", "use-post-proj.idr", "%language PostfixProjections") " .lidr extension call TestExtension("lidris", "lidris-1.lidr", "Some test plaintext\n\n> --idris1\n> myfact : Nat -> Nat\n> myfact Z = 1\n> myfact (S k) = (S k) * myfact k\n\nMore plaintext") call TestExtension("lidris2", "lidris-2.lidr", "Some test plaintext\n\n> --idris2\n> myfact : Nat -> Nat\n> myfact Z = 1\n> myfact (S k) = (S k) * myfact k\n\nMore plaintext") " .h extension call TestExtension("objcpp", "foo.h", "@interface MTNavigationController : UINavigationController") call TestExtension("cpp", "foo.h", "") let g:c_syntax_for_h = 1 call TestExtension("objc", "foo.h", "@interface MTNavigationController : UINavigationController") call TestExtension("c", "foo.h", "") unlet g:c_syntax_for_h let g:ch_syntax_for_h = 1 call TestExtension("ch", "foo.h", "") " perl call TestExtension("perl", "empty.plx", "") call TestExtension("perl", "empty.al", "") call TestExtension("perl", "empty.psgi", "") call TestExtension("pod", "empty.pod", "") " raku call TestExtension("raku", "empty.p6", "") call TestExtension("raku", "empty.pm6", "") call TestExtension("raku", "empty.pl6", "") call TestExtension("raku", "empty.raku", "") call TestExtension("raku", "empty.rakumod", "") call TestExtension("raku", "empty.pod6", "") call TestExtension("raku", "empty.rakudoc", "") call TestExtension("raku", "empty.rakutest", "") call TestExtension("raku", "empty.t6", "") " .pm extension call TestExtension("perl", "empty.pm", "") call TestExtension("perl", "strict.pm", " use strict hello;") call TestExtension("perl", "use5.pm", " use 5;") call TestExtension("perl", "usev5.pm", " use v5;") call TestExtension("raku", "script.pm", "#!/usr/bin/env perl6\nprint('Hello world')") call TestExtension("raku", "class.pm", " class Class {}") call TestExtension("raku", "module.pm", " module foobar") call TestExtension("xpm", "xpm.pm", "/* XPM */") call TestExtension("xpm2", "xpm2.pm", "/* XPM2 */") let g:filetype_pm = "fizfuz" call TestExtension("fizfuz", "fizfuz.pm", "") " .pl extension call TestExtension("perl", "empty.pl", "") call TestExtension("prolog", "comment.pl", "% hello world") call TestExtension("prolog", "comment2.pl", "/* hello world */") call TestExtension("prolog", "statement.pl", "happy(vincent). ") call TestExtension("prolog", "statement2.pl", "nearbychk(X,Y) :- Y is X-1.") call TestExtension("perl", "strict.pl", " use strict hello;") call TestExtension("perl", "use5.pl", " use 5;") call TestExtension("perl", "usev5.pl", " use v5;") call TestExtension("raku", "script.pl", "#!/usr/bin/env perl6\nprint('Hello world')") call TestExtension("raku", "class.pl", " class Class {}") call TestExtension("raku", "module.pl", " module foobar") let g:filetype_pl = "fizfuz" call TestExtension("fizfuz", "fizfuz.pl", "") " .t extension call TestExtension("perl", "empty.t", "") call TestExtension("perl", "strict.t", " use strict hello;") call TestExtension("perl", "use5.t", " use 5;") call TestExtension("perl", "usev5.t", " use v5;") call TestExtension("raku", "script.t", "#!/usr/bin/env perl6\nprint('Hello world')") call TestExtension("raku", "class.t", " class Class {}") call TestExtension("raku", "module.t", " module foobar") call TestExtension("nroff", "module.t", ".nf\n101 Main Street") let g:filetype_t = "fizfuz" call TestExtension("fizfuz", "fizfuz.t", "") " .tt2 extension call TestExtension("tt2", "empty.tt2", "") call TestExtension("tt2html", "doctype.tt2", "") call TestExtension("tt2html", "percent.tt2", "<%filter>") call TestExtension("tt2html", "html.tt2", "") " .html extension call TestExtension("html", "empty.html", "") call TestExtension("mason", "mason1.html", "% my $planet = 42;") call TestExtension("mason", "mason2.html", "<%filter>") call TestExtension("htmldjango", "jinja2.html", "{% for item in navigation %}{% endfor %}") call TestExtension("htmldjango", "jinja3.html", "{% block head %}") call TestExtension("htmldjango", "jinja4.html", "{# some comment #}") call TestExtension("xhtml", "xhtml.html", "