13e54569bSBram Moolenaar" Test :setfiletype
23e54569bSBram Moolenaar
33e54569bSBram Moolenaarfunc Test_detection()
43e54569bSBram Moolenaar  filetype on
53e54569bSBram Moolenaar  augroup filetypedetect
63e54569bSBram Moolenaar    au BufNewFile,BufRead *	call assert_equal(1, did_filetype())
73e54569bSBram Moolenaar  augroup END
83e54569bSBram Moolenaar  new something.vim
93e54569bSBram Moolenaar  call assert_equal('vim', &filetype)
103e54569bSBram Moolenaar
113e54569bSBram Moolenaar  bwipe!
123e54569bSBram Moolenaar  filetype off
133e54569bSBram Moolenaarendfunc
143e54569bSBram Moolenaar
153e54569bSBram Moolenaarfunc Test_conf_type()
163e54569bSBram Moolenaar  filetype on
173e54569bSBram Moolenaar  call writefile(['# some comment', 'must be conf'], 'Xfile')
183e54569bSBram Moolenaar  augroup filetypedetect
193e54569bSBram Moolenaar    au BufNewFile,BufRead *	call assert_equal(0, did_filetype())
203e54569bSBram Moolenaar  augroup END
213e54569bSBram Moolenaar  split Xfile
223e54569bSBram Moolenaar  call assert_equal('conf', &filetype)
233e54569bSBram Moolenaar
243e54569bSBram Moolenaar  bwipe!
253e54569bSBram Moolenaar  call delete('Xfile')
263e54569bSBram Moolenaar  filetype off
273e54569bSBram Moolenaarendfunc
283e54569bSBram Moolenaar
293e54569bSBram Moolenaarfunc Test_other_type()
303e54569bSBram Moolenaar  filetype on
313e54569bSBram Moolenaar  augroup filetypedetect
323e54569bSBram Moolenaar    au BufNewFile,BufRead *	call assert_equal(0, did_filetype())
333e54569bSBram Moolenaar    au BufNewFile,BufRead Xfile	setf testfile
343e54569bSBram Moolenaar    au BufNewFile,BufRead *	call assert_equal(1, did_filetype())
353e54569bSBram Moolenaar  augroup END
363e54569bSBram Moolenaar  call writefile(['# some comment', 'must be conf'], 'Xfile')
373e54569bSBram Moolenaar  split Xfile
383e54569bSBram Moolenaar  call assert_equal('testfile', &filetype)
393e54569bSBram Moolenaar
403e54569bSBram Moolenaar  bwipe!
413e54569bSBram Moolenaar  call delete('Xfile')
423e54569bSBram Moolenaar  filetype off
433e54569bSBram Moolenaarendfunc
440a0217abSBram Moolenaar
450a0217abSBram Moolenaar" Filetypes detected just from matching the file name.
460a0217abSBram Moolenaarlet s:filename_checks = {
47c2734051SBram Moolenaar    \ '8th': ['file.8th'],
4810a1a534SBram Moolenaar    \ 'a2ps': ['/etc/a2ps.cfg', '/etc/a2ps/file.cfg', 'a2psrc', '.a2psrc', 'any/etc/a2ps.cfg', 'any/etc/a2ps/file.cfg'],
490a0217abSBram Moolenaar    \ 'a65': ['file.a65'],
50c2734051SBram Moolenaar    \ 'aap': ['file.aap'],
510a0217abSBram Moolenaar    \ 'abap': ['file.abap'],
520a0217abSBram Moolenaar    \ 'abc': ['file.abc'],
530a0217abSBram Moolenaar    \ 'abel': ['file.abl'],
540a0217abSBram Moolenaar    \ 'acedb': ['file.wrm'],
550a0217abSBram Moolenaar    \ 'ada': ['file.adb', 'file.ads', 'file.ada', 'file.gpr'],
560a0217abSBram Moolenaar    \ 'ahdl': ['file.tdf'],
572afc3b4fSBram Moolenaar    \ 'aidl': ['file.aidl'],
5810a1a534SBram Moolenaar    \ 'alsaconf': ['.asoundrc', '/usr/share/alsa/alsa.conf', '/etc/asound.conf', 'any/etc/asound.conf', 'any/usr/share/alsa/alsa.conf'],
590a0217abSBram Moolenaar    \ 'aml': ['file.aml'],
600a0217abSBram Moolenaar    \ 'ampl': ['file.run'],
610a0217abSBram Moolenaar    \ 'ant': ['build.xml'],
62770ddbe1SZdenek Dohnal    \ 'apache': ['.htaccess', '/etc/httpd/file.conf', '/etc/apache2/sites-2/file.com', '/etc/apache2/some.config', '/etc/apache2/conf.file/conf', '/etc/apache2/mods-some/file', '/etc/apache2/sites-some/file', '/etc/httpd/conf.d/file.config', '/etc/apache2/conf.file/file', '/etc/apache2/file.conf', '/etc/apache2/file.conf-file', '/etc/apache2/mods-file/file', '/etc/apache2/sites-file/file', '/etc/apache2/sites-file/file.com', '/etc/httpd/conf.d/file.conf', '/etc/httpd/conf.d/file.conf-file', 'access.conf', 'access.conf-file', 'any/etc/apache2/conf.file/file', 'any/etc/apache2/file.conf', 'any/etc/apache2/file.conf-file', 'any/etc/apache2/mods-file/file', 'any/etc/apache2/sites-file/file', 'any/etc/apache2/sites-file/file.com', 'any/etc/httpd/conf.d/file.conf', 'any/etc/httpd/conf.d/file.conf-file', 'any/etc/httpd/file.conf', 'apache.conf', 'apache.conf-file', 'apache2.conf', 'apache2.conf-file', 'httpd.conf', 'httpd.conf-file', 'srm.conf', 'srm.conf-file', '/etc/httpd/mods-some/file', '/etc/httpd/sites-some/file', '/etc/httpd/conf.file/conf'],
6310a1a534SBram Moolenaar    \ 'apachestyle': ['/etc/proftpd/file.config,/etc/proftpd/conf.file/file', '/etc/proftpd/conf.file/file', '/etc/proftpd/file.conf', '/etc/proftpd/file.conf-file', 'any/etc/proftpd/conf.file/file', 'any/etc/proftpd/file.conf', 'any/etc/proftpd/file.conf-file', 'proftpd.conf', 'proftpd.conf-file'],
640a0217abSBram Moolenaar    \ 'applescript': ['file.scpt'],
6510a1a534SBram Moolenaar    \ 'aptconf': ['apt.conf', '/.aptitude/config', 'any/.aptitude/config'],
6610a1a534SBram Moolenaar    \ 'arch': ['.arch-inventory', '=tagging-method'],
670a0217abSBram Moolenaar    \ 'arduino': ['file.ino', 'file.pde'],
680a0217abSBram Moolenaar    \ 'art': ['file.art'],
690a0217abSBram Moolenaar    \ 'asciidoc': ['file.asciidoc', 'file.adoc'],
700a0217abSBram Moolenaar    \ 'asn': ['file.asn', 'file.asn1'],
7110a1a534SBram Moolenaar    \ 'asterisk': ['asterisk/file.conf', 'asterisk/file.conf-file', 'some-asterisk/file.conf', 'some-asterisk/file.conf-file'],
720a0217abSBram Moolenaar    \ 'atlas': ['file.atl', 'file.as'],
730a0217abSBram Moolenaar    \ 'autohotkey': ['file.ahk'],
740a0217abSBram Moolenaar    \ 'autoit': ['file.au3'],
7510a1a534SBram Moolenaar    \ 'automake': ['GNUmakefile.am', 'makefile.am', 'Makefile.am'],
760a0217abSBram Moolenaar    \ 'ave': ['file.ave'],
779a5c553fSBram Moolenaar    \ 'awk': ['file.awk', 'file.gawk'],
780a0217abSBram Moolenaar    \ 'b': ['file.mch', 'file.ref', 'file.imp'],
794488f5a5SBram Moolenaar    \ 'bzl': ['file.bazel', 'file.bzl', 'WORKSPACE'],
800a0217abSBram Moolenaar    \ 'bc': ['file.bc'],
810a0217abSBram Moolenaar    \ 'bdf': ['file.bdf'],
829bbd883bSBram Moolenaar    \ 'beancount': ['file.beancount'],
830a0217abSBram Moolenaar    \ 'bib': ['file.bib'],
8410a1a534SBram Moolenaar    \ 'bindzone': ['named.root', '/bind/db.file', '/named/db.file', 'any/bind/db.file', 'any/named/db.file'],
850a0217abSBram Moolenaar    \ 'blank': ['file.bl'],
8610a1a534SBram Moolenaar    \ 'bsdl': ['file.bsd', 'file.bsdl', 'bsd', 'some-bsd'],
870a0217abSBram Moolenaar    \ 'bst': ['file.bst'],
8810a1a534SBram Moolenaar    \ 'bzr': ['bzr_log.any', 'bzr_log.file'],
8910a1a534SBram Moolenaar    \ 'c': ['enlightenment/file.cfg', 'file.qc', 'file.c', 'some-enlightenment/file.cfg'],
900a0217abSBram Moolenaar    \ 'cabal': ['file.cabal'],
91dcbab75dSBram Moolenaar    \ 'cabalconfig': ['cabal.config'],
92dcbab75dSBram Moolenaar    \ 'cabalproject': ['cabal.project', 'cabal.project.local'],
9310a1a534SBram Moolenaar    \ 'calendar': ['calendar', '/.calendar/file', '/share/calendar/any/calendar.file', '/share/calendar/calendar.file', 'any/share/calendar/any/calendar.file', 'any/share/calendar/calendar.file'],
9410a1a534SBram Moolenaar    \ 'catalog': ['catalog', 'sgml.catalogfile', 'sgml.catalog', 'sgml.catalog-file'],
950a0217abSBram Moolenaar    \ 'cdl': ['file.cdl'],
9610a1a534SBram Moolenaar    \ 'cdrdaoconf': ['/etc/cdrdao.conf', '/etc/defaults/cdrdao', '/etc/default/cdrdao', '.cdrdao', 'any/etc/cdrdao.conf', 'any/etc/default/cdrdao', 'any/etc/defaults/cdrdao'],
970a0217abSBram Moolenaar    \ 'cdrtoc': ['file.toc'],
980a0217abSBram Moolenaar    \ 'cf': ['file.cfm', 'file.cfi', 'file.cfc'],
990a0217abSBram Moolenaar    \ 'cfengine': ['cfengine.conf'],
10010a1a534SBram Moolenaar    \ 'cfg': ['file.cfg', 'file.hgrc', 'filehgrc', 'hgrc', 'some-hgrc'],
1010a0217abSBram Moolenaar    \ 'ch': ['file.chf'],
1020a0217abSBram Moolenaar    \ 'chaiscript': ['file.chai'],
1030a0217abSBram Moolenaar    \ 'chaskell': ['file.chs'],
1040a0217abSBram Moolenaar    \ 'chill': ['file..ch'],
1050a0217abSBram Moolenaar    \ 'chordpro': ['file.chopro', 'file.crd', 'file.cho', 'file.crdpro', 'file.chordpro'],
1060a0217abSBram Moolenaar    \ 'cl': ['file.eni'],
1070a0217abSBram Moolenaar    \ 'clean': ['file.dcl', 'file.icl'],
1080a0217abSBram Moolenaar    \ 'clojure': ['file.clj', 'file.cljs', 'file.cljx', 'file.cljc'],
1090a0217abSBram Moolenaar    \ 'cmake': ['CMakeLists.txt', 'file.cmake', 'file.cmake.in'],
11010a1a534SBram Moolenaar    \ 'cmusrc': ['any/.cmus/autosave', 'any/.cmus/rc', 'any/.cmus/command-history', 'any/.cmus/file.theme', 'any/cmus/rc', 'any/cmus/file.theme', '/.cmus/autosave', '/.cmus/command-history', '/.cmus/file.theme', '/.cmus/rc', '/cmus/file.theme', '/cmus/rc'],
1110a0217abSBram Moolenaar    \ 'cobol': ['file.cbl', 'file.cob', 'file.lib'],
1120a0217abSBram Moolenaar    \ 'coco': ['file.atg'],
1130a0217abSBram Moolenaar    \ 'conaryrecipe': ['file.recipe'],
1140a0217abSBram Moolenaar    \ 'conf': ['auto.master'],
11528b6a3beSAman Verma    \ 'config': ['configure.in', 'configure.ac', '/etc/hostname.file'],
116faebda8cSBram Moolenaar    \ 'context': ['tex/context/any/file.tex', 'file.mkii', 'file.mkiv', 'file.mkvi', 'file.mkxl', 'file.mklx'],
1170a0217abSBram Moolenaar    \ 'cpp': ['file.cxx', 'file.c++', 'file.hh', 'file.hxx', 'file.hpp', 'file.ipp', 'file.moc', 'file.tcc', 'file.inl', 'file.tlh'],
1180a0217abSBram Moolenaar    \ 'crm': ['file.crm'],
11910a1a534SBram Moolenaar    \ 'crontab': ['crontab', 'crontab.file', '/etc/cron.d/file', 'any/etc/cron.d/file'],
1200a0217abSBram Moolenaar    \ 'cs': ['file.cs'],
1210a0217abSBram Moolenaar    \ 'csc': ['file.csc'],
1220a0217abSBram Moolenaar    \ 'csdl': ['file.csdl'],
1230a0217abSBram Moolenaar    \ 'csp': ['file.csp', 'file.fdr'],
1240a0217abSBram Moolenaar    \ 'css': ['file.css'],
1250a0217abSBram Moolenaar    \ 'cterm': ['file.con'],
1260a0217abSBram Moolenaar    \ 'cucumber': ['file.feature'],
12710a1a534SBram Moolenaar    \ 'cuda': ['file.cu', 'file.cuh'],
1280a0217abSBram Moolenaar    \ 'cupl': ['file.pld'],
1290a0217abSBram Moolenaar    \ 'cuplsim': ['file.si'],
1300a0217abSBram Moolenaar    \ 'cvs': ['cvs123'],
1310a0217abSBram Moolenaar    \ 'cvsrc': ['.cvsrc'],
1320a0217abSBram Moolenaar    \ 'cynpp': ['file.cyn'],
133afbdb905SBram Moolenaar    \ 'dart': ['file.dart', 'file.drt'],
1340a0217abSBram Moolenaar    \ 'datascript': ['file.ds'],
1350a0217abSBram Moolenaar    \ 'dcd': ['file.dcd'],
1360022675aSBram Moolenaar    \ 'debchangelog': ['changelog.Debian', 'changelog.dch', 'NEWS.Debian', 'NEWS.dch', '/debian/changelog'],
13710a1a534SBram Moolenaar    \ 'debcontrol': ['/debian/control', 'any/debian/control'],
13810a1a534SBram Moolenaar    \ 'debcopyright': ['/debian/copyright', 'any/debian/copyright'],
13910a1a534SBram Moolenaar    \ 'debsources': ['/etc/apt/sources.list', '/etc/apt/sources.list.d/file.list', 'any/etc/apt/sources.list', 'any/etc/apt/sources.list.d/file.list'],
1400a0217abSBram Moolenaar    \ 'def': ['file.def'],
1410a0217abSBram Moolenaar    \ 'denyhosts': ['denyhosts.conf'],
1420a0217abSBram Moolenaar    \ 'desc': ['file.desc'],
143f1f0ff95SBram Moolenaar    \ 'desktop': ['file.desktop', '.directory', 'file.directory'],
1440a0217abSBram Moolenaar    \ 'dictconf': ['dict.conf', '.dictrc'],
145be01090eSBram Moolenaar    \ 'dictdconf': ['dictd.conf', 'dictdfile.conf', 'dictd-file.conf'],
1460a0217abSBram Moolenaar    \ 'diff': ['file.diff', 'file.rej'],
14710a1a534SBram Moolenaar    \ 'dircolors': ['.dir_colors', '.dircolors', '/etc/DIR_COLORS', 'any/etc/DIR_COLORS'],
14810a1a534SBram Moolenaar    \ 'dnsmasq': ['/etc/dnsmasq.conf', '/etc/dnsmasq.d/file', 'any/etc/dnsmasq.conf', 'any/etc/dnsmasq.d/file'],
1491ff14ba2SBram Moolenaar    \ 'dockerfile': ['Containerfile', 'Dockerfile', 'file.Dockerfile'],
1500a0217abSBram Moolenaar    \ 'dosbatch': ['file.bat', 'file.sys'],
151e3e598e8SLiam Beguin    \ 'dosini': ['.editorconfig', '/etc/pacman.conf', '/etc/yum.conf', 'file.ini', 'npmrc', '.npmrc', 'php.ini', 'php.ini-5', 'php.ini-file', '/etc/yum.repos.d/file', 'any/etc/pacman.conf', 'any/etc/yum.conf', 'any/etc/yum.repos.d/file', 'file.wrap'],
152f8ddb257SBram Moolenaar    \ 'dot': ['file.dot', 'file.gv'],
15310a1a534SBram Moolenaar    \ 'dracula': ['file.drac', 'file.drc', 'filelvs', 'filelpe', 'drac.file', 'lpe', 'lvs', 'some-lpe', 'some-lvs'],
1540a0217abSBram Moolenaar    \ 'dtd': ['file.dtd'],
1550a0217abSBram Moolenaar    \ 'dts': ['file.dts', 'file.dtsi'],
156beef4eedSBram Moolenaar    \ 'dune': ['jbuild', 'dune', 'dune-project', 'dune-workspace'],
1570a0217abSBram Moolenaar    \ 'dylan': ['file.dylan'],
1580a0217abSBram Moolenaar    \ 'dylanintr': ['file.intr'],
1590a0217abSBram Moolenaar    \ 'dylanlid': ['file.lid'],
1600a0217abSBram Moolenaar    \ 'ecd': ['file.ecd'],
1610a0217abSBram Moolenaar    \ 'edif': ['file.edf', 'file.edif', 'file.edo'],
1625f36d5fbSBram Moolenaar    \ 'elinks': ['elinks.conf'],
163f3caeb63SAustin Gatlin    \ 'elixir': ['file.ex', 'file.exs', 'mix.lock'],
164f3caeb63SAustin Gatlin    \ 'eelixir': ['file.eex', 'file.leex'],
1650016fd2eSBram Moolenaar    \ 'elm': ['file.elm'],
1660a0217abSBram Moolenaar    \ 'elmfilt': ['filter-rules'],
1678323cab3SBram Moolenaar    \ 'epuppet': ['file.epp'],
1680a0217abSBram Moolenaar    \ 'erlang': ['file.erl', 'file.hrl', 'file.yaws'],
1690a0217abSBram Moolenaar    \ 'eruby': ['file.erb', 'file.rhtml'],
17010a1a534SBram Moolenaar    \ 'esmtprc': ['anyesmtprc', 'esmtprc', 'some-esmtprc'],
1710a0217abSBram Moolenaar    \ 'esqlc': ['file.ec', 'file.EC'],
1720a0217abSBram Moolenaar    \ 'esterel': ['file.strl'],
17310a1a534SBram Moolenaar    \ 'eterm': ['anyEterm/file.cfg', 'Eterm/file.cfg', 'some-Eterm/file.cfg'],
1740a0217abSBram Moolenaar    \ 'exim': ['exim.conf'],
1750a0217abSBram Moolenaar    \ 'expect': ['file.exp'],
1760a0217abSBram Moolenaar    \ 'exports': ['exports'],
1770a0217abSBram Moolenaar    \ 'factor': ['file.factor'],
1780a0217abSBram Moolenaar    \ 'falcon': ['file.fal'],
1790a0217abSBram Moolenaar    \ 'fan': ['file.fan', 'file.fwt'],
180402115f1SBram Moolenaar    \ 'fennel': ['file.fnl'],
1810a0217abSBram Moolenaar    \ 'fetchmail': ['.fetchmailrc'],
1820a0217abSBram Moolenaar    \ 'fgl': ['file.4gl', 'file.4gh', 'file.m4gl'],
183b1b163efSBram Moolenaar    \ 'fish': ['file.fish'],
1840a0217abSBram Moolenaar    \ 'focexec': ['file.fex', 'file.focexec'],
18538654503SBram Moolenaar    \ 'forth': ['file.fs', 'file.ft', 'file.fth'],
1860a0217abSBram Moolenaar    \ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'],
187f6d9935aSBram Moolenaar    \ 'fpcmake': ['file.fpc'],
1880a0217abSBram Moolenaar    \ 'framescript': ['file.fsl'],
1890a0217abSBram Moolenaar    \ 'freebasic': ['file.fb', 'file.bi'],
1900a0217abSBram Moolenaar    \ 'fstab': ['fstab', 'mtab'],
19110a1a534SBram Moolenaar    \ 'fvwm': ['/.fvwm/file', 'any/.fvwm/file'],
192782b4bbcSBram Moolenaar    \ 'gdb': ['.gdbinit', 'gdbinit'],
1930a0217abSBram Moolenaar    \ 'gdmo': ['file.mo', 'file.gdmo'],
19410a1a534SBram Moolenaar    \ 'gedcom': ['file.ged', 'lltxxxxx.txt', '/tmp/lltmp', '/tmp/lltmp-file', 'any/tmp/lltmp', 'any/tmp/lltmp-file'],
195fcde67c9SBram Moolenaar    \ 'gemtext': ['file.gmi', 'file.gemini'],
196b34f3374SBram Moolenaar    \ 'gift': ['file.gift'],
1970a0217abSBram Moolenaar    \ 'gitcommit': ['COMMIT_EDITMSG', 'MERGE_MSG', 'TAG_EDITMSG'],
19810a1a534SBram Moolenaar    \ 'gitconfig': ['file.git/config', '.gitconfig', '.gitmodules', 'file.git/modules//config', '/.config/git/config', '/etc/gitconfig', '/etc/gitconfig.d/file', '/.gitconfig.d/file', 'any/.config/git/config', 'any/.gitconfig.d/file', 'some.git/config', 'some.git/modules/any/config'],
19910a1a534SBram Moolenaar    \ 'gitolite': ['gitolite.conf', '/gitolite-admin/conf/file', 'any/gitolite-admin/conf/file'],
2000a0217abSBram Moolenaar    \ 'gitrebase': ['git-rebase-todo'],
2018ab3c1dcSBram Moolenaar    \ 'gitsendemail': ['.gitsendemail.msg.xxxxxx'],
2028ab3c1dcSBram Moolenaar    \ 'gkrellmrc': ['gkrellmrc', 'gkrellmrc_x'],
2030a0217abSBram Moolenaar    \ 'gnash': ['gnashrc', '.gnashrc', 'gnashpluginrc', '.gnashpluginrc'],
2040a0217abSBram Moolenaar    \ 'gnuplot': ['file.gpi'],
2050a0217abSBram Moolenaar    \ 'go': ['file.go'],
2060a0217abSBram Moolenaar    \ 'gp': ['file.gp', '.gprc'],
20710a1a534SBram Moolenaar    \ 'gpg': ['/.gnupg/options', '/.gnupg/gpg.conf', '/usr/any/gnupg/options.skel', 'any/.gnupg/gpg.conf', 'any/.gnupg/options', 'any/usr/any/gnupg/options.skel'],
2080a0217abSBram Moolenaar    \ 'grads': ['file.gs'],
2090a0217abSBram Moolenaar    \ 'gretl': ['file.gretl'],
2100a0217abSBram Moolenaar    \ 'groovy': ['file.gradle', 'file.groovy'],
21110a1a534SBram Moolenaar    \ 'group': ['any/etc/group', 'any/etc/group-', 'any/etc/group.edit', 'any/etc/gshadow', 'any/etc/gshadow-', 'any/etc/gshadow.edit', 'any/var/backups/group.bak', 'any/var/backups/gshadow.bak', '/etc/group', '/etc/group-', '/etc/group.edit', '/etc/gshadow', '/etc/gshadow-', '/etc/gshadow.edit', '/var/backups/group.bak', '/var/backups/gshadow.bak'],
21210a1a534SBram Moolenaar    \ 'grub': ['/boot/grub/menu.lst', '/boot/grub/grub.conf', '/etc/grub.conf', 'any/boot/grub/grub.conf', 'any/boot/grub/menu.lst', 'any/etc/grub.conf'],
2130a0217abSBram Moolenaar    \ 'gsp': ['file.gsp'],
21410a1a534SBram Moolenaar    \ 'gtkrc': ['.gtkrc', 'gtkrc', '.gtkrc-file', 'gtkrc-file'],
2150a0217abSBram Moolenaar    \ 'haml': ['file.haml'],
216a09bee32SBram Moolenaar    \ 'hamster': ['file.hsm'],
217f5409dbfSMarcin Szamotulski    \ 'haskell': ['file.hs', 'file.hsc', 'file.hs-boot', 'file.hsig'],
2180a0217abSBram Moolenaar    \ 'haste': ['file.ht'],
2190a0217abSBram Moolenaar    \ 'hastepreproc': ['file.htpp'],
2200a0217abSBram Moolenaar    \ 'hb': ['file.hb'],
2210a0217abSBram Moolenaar    \ 'hercules': ['file.vc', 'file.ev', 'file.sum', 'file.errsum'],
2220a0217abSBram Moolenaar    \ 'hex': ['file.hex', 'file.h32'],
2230a0217abSBram Moolenaar    \ 'hgcommit': ['hg-editor-file.txt'],
2240a0217abSBram Moolenaar    \ 'hog': ['file.hog', 'snort.conf', 'vision.conf'],
225c3bf7b56SBram Moolenaar    \ 'hollywood': ['file.hws'],
22610a1a534SBram Moolenaar    \ 'hostconf': ['/etc/host.conf', 'any/etc/host.conf'],
22710a1a534SBram Moolenaar    \ 'hostsaccess': ['/etc/hosts.allow', '/etc/hosts.deny', 'any/etc/hosts.allow', 'any/etc/hosts.deny'],
22810a1a534SBram Moolenaar    \ 'logcheck': ['/etc/logcheck/file.d-some/file', '/etc/logcheck/file.d/file', 'any/etc/logcheck/file.d-some/file', 'any/etc/logcheck/file.d/file'],
22910a1a534SBram Moolenaar    \ 'modula3': ['file.m3', 'file.mg', 'file.i3', 'file.ig'],
23010a1a534SBram Moolenaar    \ 'natural': ['file.NSA', 'file.NSC', 'file.NSG', 'file.NSL', 'file.NSM', 'file.NSN', 'file.NSP', 'file.NSS'],
23110a1a534SBram Moolenaar    \ 'neomuttrc': ['Neomuttrc', '.neomuttrc', '.neomuttrc-file', '/.neomutt/neomuttrc', '/.neomutt/neomuttrc-file', 'Neomuttrc', 'Neomuttrc-file', 'any/.neomutt/neomuttrc', 'any/.neomutt/neomuttrc-file', 'neomuttrc', 'neomuttrc-file'],
23210a1a534SBram Moolenaar    \ 'opl': ['file.OPL', 'file.OPl', 'file.OpL', 'file.Opl', 'file.oPL', 'file.oPl', 'file.opL', 'file.opl'],
23310a1a534SBram Moolenaar    \ 'pcmk': ['file.pcmk'],
23410a1a534SBram Moolenaar    \ 'r': ['file.r'],
23510a1a534SBram Moolenaar    \ 'rhelp': ['file.rd'],
23610a1a534SBram Moolenaar    \ 'rmd': ['file.rmd', 'file.smd'],
23710a1a534SBram Moolenaar    \ 'rnoweb': ['file.rnw', 'file.snw'],
23810a1a534SBram Moolenaar    \ 'rrst': ['file.rrst', 'file.srst'],
239d1362211SBram Moolenaar    \ 'template': ['file.tmpl'],
2400a0217abSBram Moolenaar    \ 'htmlm4': ['file.html.m4'],
2410a0217abSBram Moolenaar    \ 'httest': ['file.htt', 'file.htb'],
2420a0217abSBram Moolenaar    \ 'ibasic': ['file.iba', 'file.ibi'],
24310a1a534SBram Moolenaar    \ 'icemenu': ['/.icewm/menu', 'any/.icewm/menu'],
2440a0217abSBram Moolenaar    \ 'icon': ['file.icn'],
2450a0217abSBram Moolenaar    \ 'indent': ['.indent.pro', 'indentrc'],
2460a0217abSBram Moolenaar    \ 'inform': ['file.inf', 'file.INF'],
24710a1a534SBram Moolenaar    \ 'initng': ['/etc/initng/any/file.i', 'file.ii', 'any/etc/initng/any/file.i'],
2480a0217abSBram Moolenaar    \ 'inittab': ['inittab'],
2490a0217abSBram Moolenaar    \ 'ipfilter': ['ipf.conf', 'ipf6.conf', 'ipf.rules'],
2500a0217abSBram Moolenaar    \ 'iss': ['file.iss'],
2510a0217abSBram Moolenaar    \ 'ist': ['file.ist', 'file.mst'],
2520a0217abSBram Moolenaar    \ 'j': ['file.ijs'],
2530a0217abSBram Moolenaar    \ 'jal': ['file.jal', 'file.JAL'],
25410a1a534SBram Moolenaar    \ 'jam': ['file.jpl', 'file.jpr', 'JAM-file.file', 'JAM.file', 'Prl-file.file', 'Prl.file'],
2550a0217abSBram Moolenaar    \ 'java': ['file.java', 'file.jav'],
2560a0217abSBram Moolenaar    \ 'javacc': ['file.jj', 'file.jjt'],
257c1faf3dcSBram Moolenaar    \ 'javascript': ['file.js', 'file.javascript', 'file.es', 'file.mjs', 'file.cjs'],
25892852ceeSBram Moolenaar    \ 'javascriptreact': ['file.jsx'],
2590a0217abSBram Moolenaar    \ 'jess': ['file.clp'],
2600a0217abSBram Moolenaar    \ 'jgraph': ['file.jgr'],
2610a0217abSBram Moolenaar    \ 'jovial': ['file.jov', 'file.j73', 'file.jovial'],
26210a1a534SBram Moolenaar    \ 'jproperties': ['file.properties', 'file.properties_xx', 'file.properties_xx_xx', 'some.properties_xx_xx_file'],
26350c56893SBram Moolenaar    \ 'json': ['file.json', 'file.jsonp', 'file.json-patch', 'file.webmanifest', 'Pipfile.lock', 'file.ipynb', '.babelrc', '.eslintrc', '.prettierrc', '.firebaserc'],
264acbb4b57SIzhak Jakov    \ 'jsonc': ['file.jsonc'],
2650a0217abSBram Moolenaar    \ 'jsp': ['file.jsp'],
2660eec8519SChristian Clason    \ 'julia': ['file.jl'],
26710a1a534SBram Moolenaar    \ 'kconfig': ['Kconfig', 'Kconfig.debug', 'Kconfig.file'],
2680a0217abSBram Moolenaar    \ 'kivy': ['file.kv'],
2690a0217abSBram Moolenaar    \ 'kix': ['file.kix'],
270ab067a21SBram Moolenaar    \ 'kotlin': ['file.kt', 'file.ktm', 'file.kts'],
2710a0217abSBram Moolenaar    \ 'kscript': ['file.ks'],
2720a0217abSBram Moolenaar    \ 'kwt': ['file.k'],
2730a0217abSBram Moolenaar    \ 'lace': ['file.ace', 'file.ACE'],
2740a0217abSBram Moolenaar    \ 'latte': ['file.latte', 'file.lte'],
2750a0217abSBram Moolenaar    \ 'ld': ['file.ld'],
2760a0217abSBram Moolenaar    \ 'ldif': ['file.ldif'],
2770a0217abSBram Moolenaar    \ 'less': ['file.less'],
2780a0217abSBram Moolenaar    \ 'lex': ['file.lex', 'file.l', 'file.lxx', 'file.l++'],
27910a1a534SBram Moolenaar    \ 'lftp': ['lftp.conf', '.lftprc', 'anylftp/rc', 'lftp/rc', 'some-lftp/rc'],
2800a0217abSBram Moolenaar    \ 'lhaskell': ['file.lhs'],
28110a1a534SBram Moolenaar    \ 'libao': ['/etc/libao.conf', '/.libao', 'any/.libao', 'any/etc/libao.conf'],
2820a0217abSBram Moolenaar    \ 'lifelines': ['file.ll'],
28310a1a534SBram Moolenaar    \ 'lilo': ['lilo.conf', 'lilo.conf-file'],
28410a1a534SBram Moolenaar    \ 'limits': ['/etc/limits', '/etc/anylimits.conf', '/etc/anylimits.d/file.conf', '/etc/limits.conf', '/etc/limits.d/file.conf', '/etc/some-limits.conf', '/etc/some-limits.d/file.conf', 'any/etc/limits', 'any/etc/limits.conf', 'any/etc/limits.d/file.conf', 'any/etc/some-limits.conf', 'any/etc/some-limits.d/file.conf'],
2850a0217abSBram Moolenaar    \ 'liquid': ['file.liquid'],
2862891459bSBram Moolenaar    \ 'lisp': ['file.lsp', 'file.lisp', 'file.el', 'file.cl', '.emacs', '.sawfishrc', 'sbclrc', '.sbclrc'],
2870a0217abSBram Moolenaar    \ 'lite': ['file.lite', 'file.lt'],
28810a1a534SBram Moolenaar    \ 'litestep': ['/LiteStep/any/file.rc', 'any/LiteStep/any/file.rc'],
28910a1a534SBram Moolenaar    \ 'loginaccess': ['/etc/login.access', 'any/etc/login.access'],
29010a1a534SBram Moolenaar    \ 'logindefs': ['/etc/login.defs', 'any/etc/login.defs'],
2910a0217abSBram Moolenaar    \ 'logtalk': ['file.lgt'],
2920a0217abSBram Moolenaar    \ 'lotos': ['file.lot', 'file.lotos'],
2930a0217abSBram Moolenaar    \ 'lout': ['file.lou', 'file.lout'],
2940a0217abSBram Moolenaar    \ 'lprolog': ['file.sig'],
2950a0217abSBram Moolenaar    \ 'lsl': ['file.lsl'],
2960a0217abSBram Moolenaar    \ 'lss': ['file.lss'],
2970a0217abSBram Moolenaar    \ 'lua': ['file.lua', 'file.rockspec', 'file.nse'],
2980a0217abSBram Moolenaar    \ 'lynx': ['lynx.cfg'],
299deba5eb1SBram Moolenaar    \ 'matlab': ['file.m'],
3006bc00699SBram Moolenaar    \ 'm3build': ['m3makefile', 'm3overrides'],
3016bc00699SBram Moolenaar    \ 'm3quake': ['file.quake', 'cm3.cfg'],
3020a0217abSBram Moolenaar    \ 'm4': ['file.at'],
30310a1a534SBram Moolenaar    \ 'mail': ['snd.123', '.letter', '.letter.123', '.followup', '.article', '.article.123', 'pico.123', 'mutt-xx-xxx', 'muttng-xx-xxx', 'ae123.txt', 'file.eml', 'reportbug-file'],
30410a1a534SBram Moolenaar    \ 'mailaliases': ['/etc/mail/aliases', '/etc/aliases', 'any/etc/aliases', 'any/etc/mail/aliases'],
3050a0217abSBram Moolenaar    \ 'mailcap': ['.mailcap', 'mailcap'],
30610a1a534SBram Moolenaar    \ 'make': ['file.mk', 'file.mak', 'file.dsp', 'makefile', 'Makefile', 'makefile-file', 'Makefile-file', 'some-makefile', 'some-Makefile'],
3070a0217abSBram Moolenaar    \ 'mallard': ['file.page'],
3080a0217abSBram Moolenaar    \ 'man': ['file.man'],
30910a1a534SBram Moolenaar    \ 'manconf': ['/etc/man.conf', 'man.config', 'any/etc/man.conf'],
3100a0217abSBram Moolenaar    \ 'map': ['file.map'],
3110a0217abSBram Moolenaar    \ 'maple': ['file.mv', 'file.mpl', 'file.mws'],
3120a0217abSBram Moolenaar    \ 'markdown': ['file.markdown', 'file.mdown', 'file.mkd', 'file.mkdn', 'file.mdwn', 'file.md'],
3130a0217abSBram Moolenaar    \ 'mason': ['file.mason', 'file.mhtml', 'file.comp'],
3140a0217abSBram Moolenaar    \ 'master': ['file.mas', 'file.master'],
3150a0217abSBram Moolenaar    \ 'mel': ['file.mel'],
316c3bf7b56SBram Moolenaar    \ 'meson': ['meson.build', 'meson_options.txt'],
3170a0217abSBram Moolenaar    \ 'messages': ['/log/auth', '/log/cron', '/log/daemon', '/log/debug', '/log/kern', '/log/lpr', '/log/mail', '/log/messages', '/log/news/news', '/log/syslog', '/log/user',
3180a0217abSBram Moolenaar    \     '/log/auth.log', '/log/cron.log', '/log/daemon.log', '/log/debug.log', '/log/kern.log', '/log/lpr.log', '/log/mail.log', '/log/messages.log', '/log/news/news.log', '/log/syslog.log', '/log/user.log',
3190a0217abSBram Moolenaar    \     '/log/auth.err', '/log/cron.err', '/log/daemon.err', '/log/debug.err', '/log/kern.err', '/log/lpr.err', '/log/mail.err', '/log/messages.err', '/log/news/news.err', '/log/syslog.err', '/log/user.err',
3200a0217abSBram Moolenaar    \      '/log/auth.info', '/log/cron.info', '/log/daemon.info', '/log/debug.info', '/log/kern.info', '/log/lpr.info', '/log/mail.info', '/log/messages.info', '/log/news/news.info', '/log/syslog.info', '/log/user.info',
3210a0217abSBram Moolenaar    \      '/log/auth.warn', '/log/cron.warn', '/log/daemon.warn', '/log/debug.warn', '/log/kern.warn', '/log/lpr.warn', '/log/mail.warn', '/log/messages.warn', '/log/news/news.warn', '/log/syslog.warn', '/log/user.warn',
3220a0217abSBram Moolenaar    \      '/log/auth.crit', '/log/cron.crit', '/log/daemon.crit', '/log/debug.crit', '/log/kern.crit', '/log/lpr.crit', '/log/mail.crit', '/log/messages.crit', '/log/news/news.crit', '/log/syslog.crit', '/log/user.crit',
3230a0217abSBram Moolenaar    \      '/log/auth.notice', '/log/cron.notice', '/log/daemon.notice', '/log/debug.notice', '/log/kern.notice', '/log/lpr.notice', '/log/mail.notice', '/log/messages.notice', '/log/news/news.notice', '/log/syslog.notice', '/log/user.notice'],
3240a0217abSBram Moolenaar    \ 'mf': ['file.mf'],
3250a0217abSBram Moolenaar    \ 'mgl': ['file.mgl'],
3260a0217abSBram Moolenaar    \ 'mgp': ['file.mgp'],
3270a0217abSBram Moolenaar    \ 'mib': ['file.mib', 'file.my'],
3280a0217abSBram Moolenaar    \ 'mix': ['file.mix', 'file.mixal'],
3290a0217abSBram Moolenaar    \ 'mma': ['file.nb'],
3300a0217abSBram Moolenaar    \ 'mmp': ['file.mmp'],
33110a1a534SBram Moolenaar    \ 'modconf': ['/etc/modules.conf', '/etc/modules', '/etc/conf.modules', '/etc/modprobe.file', 'any/etc/conf.modules', 'any/etc/modprobe.file', 'any/etc/modules', 'any/etc/modules.conf'],
3328ab3c1dcSBram Moolenaar    \ 'modula2': ['file.m2', 'file.mi'],
3330a0217abSBram Moolenaar    \ 'monk': ['file.isc', 'file.monk', 'file.ssc', 'file.tsc'],
3340a0217abSBram Moolenaar    \ 'moo': ['file.moo'],
3350a0217abSBram Moolenaar    \ 'mp': ['file.mp'],
33610a1a534SBram Moolenaar    \ 'mplayerconf': ['mplayer.conf', '/.mplayer/config', 'any/.mplayer/config'],
3370a0217abSBram Moolenaar    \ 'mrxvtrc': ['mrxvtrc', '.mrxvtrc'],
3380a0217abSBram Moolenaar    \ 'msidl': ['file.odl', 'file.mof'],
3390a0217abSBram Moolenaar    \ 'msql': ['file.msql'],
3400a0217abSBram Moolenaar    \ 'mupad': ['file.mu'],
3410a0217abSBram Moolenaar    \ 'mush': ['file.mush'],
34210a1a534SBram Moolenaar    \ 'muttrc': ['Muttngrc', 'Muttrc', '.muttngrc', '.muttngrc-file', '.muttrc', '.muttrc-file', '/.mutt/muttngrc', '/.mutt/muttngrc-file', '/.mutt/muttrc', '/.mutt/muttrc-file', '/.muttng/muttngrc', '/.muttng/muttngrc-file', '/.muttng/muttrc', '/.muttng/muttrc-file', '/etc/Muttrc.d/file', 'Muttngrc-file', 'Muttrc-file', 'any/.mutt/muttngrc', 'any/.mutt/muttngrc-file', 'any/.mutt/muttrc', 'any/.mutt/muttrc-file', 'any/.muttng/muttngrc', 'any/.muttng/muttngrc-file', 'any/.muttng/muttrc', 'any/.muttng/muttrc-file', 'any/etc/Muttrc.d/file', 'muttngrc', 'muttngrc-file', 'muttrc', 'muttrc-file'],
3430a0217abSBram Moolenaar    \ 'mysql': ['file.mysql'],
344d9bc8a80SBram Moolenaar    \ 'n1ql': ['file.n1ql', 'file.nql'],
34510a1a534SBram Moolenaar    \ 'named': ['namedfile.conf', 'rndcfile.conf', 'named-file.conf', 'named.conf', 'rndc-file.conf', 'rndc-file.key', 'rndc.conf', 'rndc.key'],
34610a1a534SBram Moolenaar    \ 'nanorc': ['/etc/nanorc', 'file.nanorc', 'any/etc/nanorc'],
3470a0217abSBram Moolenaar    \ 'ncf': ['file.ncf'],
3480a0217abSBram Moolenaar    \ 'netrc': ['.netrc'],
3498b8c0ed6SChris Aumann    \ 'nginx': ['file.nginx', 'nginxfile.conf', 'filenginx.conf', 'any/etc/nginx/file', 'any/usr/local/nginx/conf/file', 'any/nginx/file.conf'],
3500a0217abSBram Moolenaar    \ 'ninja': ['file.ninja'],
3510a0217abSBram Moolenaar    \ 'nqc': ['file.nqc'],
35210a1a534SBram Moolenaar    \ 'nroff': ['file.tr', 'file.nr', 'file.roff', 'file.tmac', 'file.mom', 'tmac.file'],
3530a0217abSBram Moolenaar    \ 'nsis': ['file.nsi', 'file.nsh'],
3540a0217abSBram Moolenaar    \ 'obj': ['file.obj'],
355beef4eedSBram Moolenaar    \ 'ocaml': ['file.ml', 'file.mli', 'file.mll', 'file.mly', '.ocamlinit', 'file.mlt', 'file.mlp', 'file.mlip', 'file.mli.cppo', 'file.ml.cppo'],
3560a0217abSBram Moolenaar    \ 'occam': ['file.occ'],
357deba5eb1SBram Moolenaar    \ 'octave': ['octaverc', '.octaverc', 'octave.conf'],
3580a0217abSBram Moolenaar    \ 'omnimark': ['file.xom', 'file.xin'],
359beef4eedSBram Moolenaar    \ 'opam': ['opam', 'file.opam', 'file.opam.template'],
3600a0217abSBram Moolenaar    \ 'openroad': ['file.or'],
3610a0217abSBram Moolenaar    \ 'ora': ['file.ora'],
36210a1a534SBram Moolenaar    \ 'pamconf': ['/etc/pam.conf', '/etc/pam.d/file', 'any/etc/pam.conf', 'any/etc/pam.d/file'],
36310a1a534SBram Moolenaar    \ 'pamenv': ['/etc/security/pam_env.conf', '/home/user/.pam_environment', '.pam_environment', 'pam_env.conf'],
3640a0217abSBram Moolenaar    \ 'papp': ['file.papp', 'file.pxml', 'file.pxsl'],
365a0122dcdSBram Moolenaar    \ 'pascal': ['file.pas', 'file.dpr', 'file.lpr'],
36610a1a534SBram Moolenaar    \ 'passwd': ['any/etc/passwd', 'any/etc/passwd-', 'any/etc/passwd.edit', 'any/etc/shadow', 'any/etc/shadow-', 'any/etc/shadow.edit', 'any/var/backups/passwd.bak', 'any/var/backups/shadow.bak', '/etc/passwd', '/etc/passwd-', '/etc/passwd.edit', '/etc/shadow', '/etc/shadow-', '/etc/shadow.edit', '/var/backups/passwd.bak', '/var/backups/shadow.bak'],
36788774a30SBram Moolenaar    \ 'pbtxt': ['file.pbtxt'],
3680a0217abSBram Moolenaar    \ 'pccts': ['file.g'],
3690a0217abSBram Moolenaar    \ 'pdf': ['file.pdf'],
3700a0217abSBram Moolenaar    \ 'perl': ['file.plx', 'file.al', 'file.psgi', 'gitolite.rc', '.gitolite.rc', 'example.gitolite.rc'],
3710a0217abSBram Moolenaar    \ 'pf': ['pf.conf'],
3720a0217abSBram Moolenaar    \ 'pfmain': ['main.cf'],
3730a0217abSBram Moolenaar    \ 'php': ['file.php', 'file.php9', 'file.phtml', 'file.ctp'],
3740479e910SBram Moolenaar    \ 'lpc': ['file.lpc', 'file.ulpc'],
3750479e910SBram Moolenaar    \ 'pike': ['file.pike', 'file.pmod'],
3760479e910SBram Moolenaar    \ 'cmod': ['file.cmod'],
3770a0217abSBram Moolenaar    \ 'pilrc': ['file.rcp'],
3780a0217abSBram Moolenaar    \ 'pine': ['.pinerc', 'pinerc', '.pinercex', 'pinercex'],
37910a1a534SBram Moolenaar    \ 'pinfo': ['/etc/pinforc', '/.pinforc', 'any/.pinforc', 'any/etc/pinforc'],
3800a0217abSBram Moolenaar    \ 'pli': ['file.pli', 'file.pl1'],
3810a0217abSBram Moolenaar    \ 'plm': ['file.plm', 'file.p36', 'file.pac'],
3820a0217abSBram Moolenaar    \ 'plp': ['file.plp'],
3830a0217abSBram Moolenaar    \ 'plsql': ['file.pls', 'file.plsql'],
3840a0217abSBram Moolenaar    \ 'po': ['file.po', 'file.pot'],
3850a0217abSBram Moolenaar    \ 'pod': ['file.pod'],
386c80f6475SBram Moolenaar    \ 'poke': ['file.pk'],
3870a0217abSBram Moolenaar    \ 'postscr': ['file.ps', 'file.pfa', 'file.afm', 'file.eps', 'file.epsf', 'file.epsi', 'file.ai'],
3880a0217abSBram Moolenaar    \ 'pov': ['file.pov'],
3890a0217abSBram Moolenaar    \ 'povini': ['.povrayrc'],
3900a0217abSBram Moolenaar    \ 'ppd': ['file.ppd'],
3910a0217abSBram Moolenaar    \ 'ppwiz': ['file.it', 'file.ih'],
3920a0217abSBram Moolenaar    \ 'privoxy': ['file.action'],
3930a0217abSBram Moolenaar    \ 'proc': ['file.pc'],
3940a0217abSBram Moolenaar    \ 'procmail': ['.procmail', '.procmailrc'],
3950a0217abSBram Moolenaar    \ 'prolog': ['file.pdb'],
3960a0217abSBram Moolenaar    \ 'promela': ['file.pml'],
3970a0217abSBram Moolenaar    \ 'proto': ['file.proto'],
39810a1a534SBram Moolenaar    \ 'protocols': ['/etc/protocols', 'any/etc/protocols'],
399ef38bcf0SBram Moolenaar    \ 'ps1': ['file.ps1', 'file.psd1', 'file.psm1', 'file.pssc'],
400ef38bcf0SBram Moolenaar    \ 'ps1xml': ['file.ps1xml'],
4010a0217abSBram Moolenaar    \ 'psf': ['file.psf'],
402112a0064SBram Moolenaar    \ 'psl': ['file.psl'],
403a0122dcdSBram Moolenaar    \ 'puppet': ['file.pp'],
404eb05d05fSBram Moolenaar    \ 'pyret': ['file.arr'],
4050a0217abSBram Moolenaar    \ 'pyrex': ['file.pyx', 'file.pxd'],
406ad723503SBram Moolenaar    \ 'python': ['file.py', 'file.pyw', '.pythonstartup', '.pythonrc', 'file.ptl', 'file.pyi', 'SConstruct'],
40710a1a534SBram Moolenaar    \ 'quake': ['anybaseq2/file.cfg', 'anyid1/file.cfg', 'quake3/file.cfg', 'baseq2/file.cfg', 'id1/file.cfg', 'quake1/file.cfg', 'some-baseq2/file.cfg', 'some-id1/file.cfg', 'some-quake1/file.cfg'],
4080a0217abSBram Moolenaar    \ 'radiance': ['file.rad', 'file.mat'],
4093f88e71fSBram Moolenaar    \ 'raku': ['file.pm6', 'file.p6', 'file.t6', 'file.pod6', 'file.raku', 'file.rakumod', 'file.rakudoc', 'file.rakutest'],
4100a0217abSBram Moolenaar    \ 'ratpoison': ['.ratpoisonrc', 'ratpoisonrc'],
4118323cab3SBram Moolenaar    \ 'rbs': ['file.rbs'],
4120a0217abSBram Moolenaar    \ 'rc': ['file.rc', 'file.rch'],
4130a0217abSBram Moolenaar    \ 'rcs': ['file,v'],
4140a0217abSBram Moolenaar    \ 'readline': ['.inputrc', 'inputrc'],
41510a1a534SBram Moolenaar    \ 'remind': ['.reminders', 'file.remind', 'file.rem', '.reminders-file'],
416a4ce82feSBram Moolenaar    \ 'rego': ['file.rego'],
4170a0217abSBram Moolenaar    \ 'resolv': ['resolv.conf'],
4180a0217abSBram Moolenaar    \ 'reva': ['file.frt'],
4190a0217abSBram Moolenaar    \ 'rexx': ['file.rex', 'file.orx', 'file.rxo', 'file.rxj', 'file.jrexx', 'file.rexxj', 'file.rexx', 'file.testGroup', 'file.testUnit'],
4200a0217abSBram Moolenaar    \ 'rib': ['file.rib'],
4210a0217abSBram Moolenaar    \ 'rnc': ['file.rnc'],
4220a0217abSBram Moolenaar    \ 'rng': ['file.rng'],
4230a0217abSBram Moolenaar    \ 'robots': ['robots.txt'],
4240818ab82Szainin    \ 'routeros': ['file.rsc'],
4250a0217abSBram Moolenaar    \ 'rpcgen': ['file.x'],
4260a0217abSBram Moolenaar    \ 'rpl': ['file.rpl'],
4270a0217abSBram Moolenaar    \ 'rst': ['file.rst'],
4280a0217abSBram Moolenaar    \ 'rtf': ['file.rtf'],
4298323cab3SBram Moolenaar    \ 'ruby': ['.irbrc', 'irbrc', 'file.rb', 'file.rbw', 'file.gemspec', 'file.ru', 'Gemfile', 'file.builder', 'file.rxml', 'file.rjs', 'file.rant', 'file.rake', 'rakefile', 'Rakefile', 'rantfile', 'Rantfile', 'rakefile-file', 'Rakefile-file', 'Puppetfile'],
4300a0217abSBram Moolenaar    \ 'rust': ['file.rs'],
4310a0217abSBram Moolenaar    \ 'samba': ['smb.conf'],
4320a0217abSBram Moolenaar    \ 'sas': ['file.sas'],
4330a0217abSBram Moolenaar    \ 'sass': ['file.sass'],
4340a0217abSBram Moolenaar    \ 'sather': ['file.sa'],
4350a0217abSBram Moolenaar    \ 'sbt': ['file.sbt'],
4366db7b637SBrennon M    \ 'scala': ['file.scala', 'file.sc'],
4379cd91a1eSBram Moolenaar    \ 'scheme': ['file.scm', 'file.ss', 'file.rkt', 'file.rktd', 'file.rktl'],
4380a0217abSBram Moolenaar    \ 'scilab': ['file.sci', 'file.sce'],
4390a0217abSBram Moolenaar    \ 'screen': ['.screenrc', 'screenrc'],
440beef4eedSBram Moolenaar    \ 'sexplib': ['file.sexp'],
441dd097bdcSGregory Anders    \ 'scdoc': ['file.scd'],
4420a0217abSBram Moolenaar    \ 'scss': ['file.scss'],
4430a0217abSBram Moolenaar    \ 'sd': ['file.sd'],
4440a0217abSBram Moolenaar    \ 'sdc': ['file.sdc'],
4450a0217abSBram Moolenaar    \ 'sdl': ['file.sdl', 'file.pr'],
4460a0217abSBram Moolenaar    \ 'sed': ['file.sed'],
447c0fcb6e0SBram Moolenaar    \ 'svelte': ['file.svelte'],
44810a1a534SBram Moolenaar    \ 'sensors': ['/etc/sensors.conf', '/etc/sensors3.conf', 'any/etc/sensors.conf', 'any/etc/sensors3.conf'],
44910a1a534SBram Moolenaar    \ 'services': ['/etc/services', 'any/etc/services'],
45010a1a534SBram Moolenaar    \ 'setserial': ['/etc/serial.conf', 'any/etc/serial.conf'],
451409da842SBram Moolenaar    \ 'sh': ['.bashrc', 'file.bash', '/usr/share/doc/bash-completion/filter.sh','/etc/udev/cdsymlinks.conf', 'any/etc/udev/cdsymlinks.conf'],
45238654503SBram Moolenaar    \ 'sieve': ['file.siv', 'file.sieve'],
4530a0217abSBram Moolenaar    \ 'simula': ['file.sim'],
4540a0217abSBram Moolenaar    \ 'sinda': ['file.sin', 'file.s85'],
4550a0217abSBram Moolenaar    \ 'sisu': ['file.sst', 'file.ssm', 'file.ssi', 'file.-sst', 'file._sst', 'file.sst.meta', 'file.-sst.meta', 'file._sst.meta'],
4560a0217abSBram Moolenaar    \ 'skill': ['file.il', 'file.ils', 'file.cdf'],
4570a0217abSBram Moolenaar    \ 'slang': ['file.sl'],
4580a0217abSBram Moolenaar    \ 'slice': ['file.ice'],
45910a1a534SBram Moolenaar    \ 'slpconf': ['/etc/slp.conf', 'any/etc/slp.conf'],
46010a1a534SBram Moolenaar    \ 'slpreg': ['/etc/slp.reg', 'any/etc/slp.reg'],
46110a1a534SBram Moolenaar    \ 'slpspi': ['/etc/slp.spi', 'any/etc/slp.spi'],
4620a0217abSBram Moolenaar    \ 'slrnrc': ['.slrnrc'],
4630a0217abSBram Moolenaar    \ 'slrnsc': ['file.score'],
4640a0217abSBram Moolenaar    \ 'sm': ['sendmail.cf'],
4650a0217abSBram Moolenaar    \ 'smarty': ['file.tpl'],
4660a0217abSBram Moolenaar    \ 'smcl': ['file.hlp', 'file.ihlp', 'file.smcl'],
4670a0217abSBram Moolenaar    \ 'smith': ['file.smt', 'file.smith'],
4680a0217abSBram Moolenaar    \ 'sml': ['file.sml'],
4690a0217abSBram Moolenaar    \ 'snobol4': ['file.sno', 'file.spt'],
47017d015b2SBram Moolenaar    \ 'sparql': ['file.rq', 'file.sparql'],
4710a0217abSBram Moolenaar    \ 'spec': ['file.spec'],
4720a0217abSBram Moolenaar    \ 'spice': ['file.sp', 'file.spice'],
4730a0217abSBram Moolenaar    \ 'spup': ['file.speedup', 'file.spdata', 'file.spd'],
4740a0217abSBram Moolenaar    \ 'spyce': ['file.spy', 'file.spi'],
4750a0217abSBram Moolenaar    \ 'sql': ['file.tyb', 'file.typ', 'file.tyc', 'file.pkb', 'file.pks'],
4760a0217abSBram Moolenaar    \ 'sqlj': ['file.sqlj'],
4770a0217abSBram Moolenaar    \ 'sqr': ['file.sqr', 'file.sqi'],
4780a0217abSBram Moolenaar    \ 'squid': ['squid.conf'],
4790a0217abSBram Moolenaar    \ 'srec': ['file.s19', 'file.s28', 'file.s37', 'file.mot', 'file.srec'],
48010a1a534SBram Moolenaar    \ 'sshconfig': ['ssh_config', '/.ssh/config', '/etc/ssh/ssh_config.d/file.conf', 'any/etc/ssh/ssh_config.d/file.conf', 'any/.ssh/config'],
481da84ac2aSBram Moolenaar    \ 'sshdconfig': ['sshd_config', '/etc/ssh/sshd_config.d/file.conf', 'any/etc/ssh/sshd_config.d/file.conf'],
4820a0217abSBram Moolenaar    \ 'st': ['file.st'],
4830a0217abSBram Moolenaar    \ 'stata': ['file.ado', 'file.do', 'file.imata', 'file.mata'],
4840a0217abSBram Moolenaar    \ 'stp': ['file.stp'],
485*c143fa07SBram Moolenaar    \ 'sudoers': ['any/etc/sudoers', 'sudoers.tmp', '/etc/sudoers', 'any/etc/sudoers.d/file'],
4860a0217abSBram Moolenaar    \ 'svg': ['file.svg'],
48710a1a534SBram Moolenaar    \ 'svn': ['svn-commitfile.tmp', 'svn-commit-file.tmp', 'svn-commit.tmp'],
4880d76683eSBram Moolenaar    \ 'swift': ['file.swift'],
4890d76683eSBram Moolenaar    \ 'swiftgyb': ['file.swift.gyb'],
4900d76683eSBram Moolenaar    \ 'sil': ['file.sil'],
49110a1a534SBram Moolenaar    \ 'sysctl': ['/etc/sysctl.conf', '/etc/sysctl.d/file.conf', 'any/etc/sysctl.conf', 'any/etc/sysctl.d/file.conf'],
49210a1a534SBram Moolenaar    \ 'systemd': ['any/systemd/file.automount', 'any/systemd/file.dnssd', 'any/systemd/file.link', 'any/systemd/file.mount', 'any/systemd/file.netdev', 'any/systemd/file.network', 'any/systemd/file.nspawn', 'any/systemd/file.path', 'any/systemd/file.service', 'any/systemd/file.slice', 'any/systemd/file.socket', 'any/systemd/file.swap', 'any/systemd/file.target', 'any/systemd/file.timer', '/etc/systemd/some.conf.d/file.conf', '/etc/systemd/system/some.d/file.conf', '/etc/systemd/system/some.d/.#file', '/etc/systemd/system/.#otherfile', '/home/user/.config/systemd/user/some.d/mine.conf', '/home/user/.config/systemd/user/some.d/.#file', '/home/user/.config/systemd/user/.#otherfile', '/.config/systemd/user/.#', '/.config/systemd/user/.#-file', '/.config/systemd/user/file.d/.#', '/.config/systemd/user/file.d/.#-file', '/.config/systemd/user/file.d/file.conf', '/etc/systemd/file.conf.d/file.conf', '/etc/systemd/system/.#', '/etc/systemd/system/.#-file', '/etc/systemd/system/file.d/.#', '/etc/systemd/system/file.d/.#-file', '/etc/systemd/system/file.d/file.conf', '/systemd/file.automount', '/systemd/file.dnssd', '/systemd/file.link', '/systemd/file.mount', '/systemd/file.netdev', '/systemd/file.network', '/systemd/file.nspawn', '/systemd/file.path', '/systemd/file.service', '/systemd/file.slice', '/systemd/file.socket', '/systemd/file.swap', '/systemd/file.target', '/systemd/file.timer', 'any/.config/systemd/user/.#', 'any/.config/systemd/user/.#-file', 'any/.config/systemd/user/file.d/.#', 'any/.config/systemd/user/file.d/.#-file', 'any/.config/systemd/user/file.d/file.conf', 'any/etc/systemd/file.conf.d/file.conf', 'any/etc/systemd/system/.#', 'any/etc/systemd/system/.#-file', 'any/etc/systemd/system/file.d/.#', 'any/etc/systemd/system/file.d/.#-file', 'any/etc/systemd/system/file.d/file.conf'],
4930a0217abSBram Moolenaar    \ 'systemverilog': ['file.sv', 'file.svh'],
4940a0217abSBram Moolenaar    \ 'tags': ['tags'],
4950a0217abSBram Moolenaar    \ 'tak': ['file.tak'],
4960a0217abSBram Moolenaar    \ 'taskdata': ['pending.data', 'completed.data', 'undo.data'],
4970a0217abSBram Moolenaar    \ 'taskedit': ['file.task'],
49878aa5ffeSBram Moolenaar    \ 'tcl': ['file.tcl', 'file.tm', 'file.tk', 'file.itcl', 'file.itk', 'file.jacl', '.tclshrc', 'tclsh.rc', '.wishrc'],
4990a0217abSBram Moolenaar    \ 'teraterm': ['file.ttl'],
5000a0217abSBram Moolenaar    \ 'terminfo': ['file.ti'],
5010a0217abSBram Moolenaar    \ 'tex': ['file.latex', 'file.sty', 'file.dtx', 'file.ltx', 'file.bbl'],
5020a0217abSBram Moolenaar    \ 'texinfo': ['file.texinfo', 'file.texi', 'file.txi'],
5030a0217abSBram Moolenaar    \ 'texmf': ['texmf.cnf'],
504409da842SBram Moolenaar    \ 'text': ['file.text', 'README', '/usr/share/doc/bash-completion/AUTHORS'],
5050a0217abSBram Moolenaar    \ 'tf': ['file.tf', '.tfrc', 'tfrc'],
50644aaf541SBram Moolenaar    \ 'tidy': ['.tidyrc', 'tidyrc', 'tidy.conf'],
5070a0217abSBram Moolenaar    \ 'tilde': ['file.t.html'],
5080a0217abSBram Moolenaar    \ 'tli': ['file.tli'],
509e519eb41SEric Pruitt    \ 'tmux': ['tmuxfile.conf', '.tmuxfile.conf', '.tmux-file.conf', '.tmux.conf', 'tmux-file.conf', 'tmux.conf', 'tmux.conf.local'],
51028b6a3beSAman Verma    \ 'toml': ['file.toml', 'Gopkg.lock', 'Pipfile', '/home/user/.cargo/config'],
5110a0217abSBram Moolenaar    \ 'tpp': ['file.tpp'],
5120a0217abSBram Moolenaar    \ 'treetop': ['file.treetop'],
5130a0217abSBram Moolenaar    \ 'trustees': ['trustees.conf'],
5140a0217abSBram Moolenaar    \ 'tsalt': ['file.slt'],
5150a0217abSBram Moolenaar    \ 'tsscl': ['file.tsscl'],
5160a0217abSBram Moolenaar    \ 'tssgm': ['file.tssgm'],
5170a0217abSBram Moolenaar    \ 'tssop': ['file.tssop'],
5180a0217abSBram Moolenaar    \ 'twig': ['file.twig'],
51992852ceeSBram Moolenaar    \ 'typescriptreact': ['file.tsx'],
5200a0217abSBram Moolenaar    \ 'uc': ['file.uc'],
52110a1a534SBram Moolenaar    \ 'udevconf': ['/etc/udev/udev.conf', 'any/etc/udev/udev.conf'],
52210a1a534SBram Moolenaar    \ 'udevperm': ['/etc/udev/permissions.d/file.permissions', 'any/etc/udev/permissions.d/file.permissions'],
523624b6eafSBram Moolenaar    \ 'udevrules': ['/etc/udev/rules.d/file.rules', '/usr/lib/udev/rules.d/file.rules', '/lib/udev/rules.d/file.rules'],
5240a0217abSBram Moolenaar    \ 'uil': ['file.uit', 'file.uil'],
52510a1a534SBram Moolenaar    \ 'updatedb': ['/etc/updatedb.conf', 'any/etc/updatedb.conf'],
52610a1a534SBram Moolenaar    \ 'upstart': ['/usr/share/upstart/file.conf', '/usr/share/upstart/file.override', '/etc/init/file.conf', '/etc/init/file.override', '/.init/file.conf', '/.init/file.override', '/.config/upstart/file.conf', '/.config/upstart/file.override', 'any/.config/upstart/file.conf', 'any/.config/upstart/file.override', 'any/.init/file.conf', 'any/.init/file.override', 'any/etc/init/file.conf', 'any/etc/init/file.override', 'any/usr/share/upstart/file.conf', 'any/usr/share/upstart/file.override'],
5270a0217abSBram Moolenaar    \ 'upstreamdat': ['upstream.dat', 'UPSTREAM.DAT', 'upstream.file.dat', 'UPSTREAM.FILE.DAT', 'file.upstream.dat', 'FILE.UPSTREAM.DAT'],
5280a0217abSBram Moolenaar    \ 'upstreaminstalllog': ['upstreaminstall.log', 'UPSTREAMINSTALL.LOG', 'upstreaminstall.file.log', 'UPSTREAMINSTALL.FILE.LOG', 'file.upstreaminstall.log', 'FILE.UPSTREAMINSTALL.LOG'],
5290a0217abSBram Moolenaar    \ 'upstreamlog': ['fdrupstream.log', 'upstream.log', 'UPSTREAM.LOG', 'upstream.file.log', 'UPSTREAM.FILE.LOG', 'file.upstream.log', 'FILE.UPSTREAM.LOG', 'UPSTREAM-file.log', 'UPSTREAM-FILE.LOG'],
5300a0217abSBram Moolenaar    \ 'usserverlog': ['usserver.log', 'USSERVER.LOG', 'usserver.file.log', 'USSERVER.FILE.LOG', 'file.usserver.log', 'FILE.USSERVER.LOG'],
5310a0217abSBram Moolenaar    \ 'usw2kagtlog': ['usw2kagt.log', 'USW2KAGT.LOG', 'usw2kagt.file.log', 'USW2KAGT.FILE.LOG', 'file.usw2kagt.log', 'FILE.USW2KAGT.LOG'],
5320a0217abSBram Moolenaar    \ 'vb': ['file.sba', 'file.vb', 'file.vbs', 'file.dsm', 'file.ctl'],
5330a0217abSBram Moolenaar    \ 'vera': ['file.vr', 'file.vri', 'file.vrh'],
5340a0217abSBram Moolenaar    \ 'verilog': ['file.v'],
5350a0217abSBram Moolenaar    \ 'verilogams': ['file.va', 'file.vams'],
5360a0217abSBram Moolenaar    \ 'vgrindefs': ['vgrindefs'],
53710a1a534SBram Moolenaar    \ 'vhdl': ['file.hdl', 'file.vhd', 'file.vhdl', 'file.vbe', 'file.vst', 'file.vhdl_123', 'file.vho', 'some.vhdl_1', 'some.vhdl_1-file'],
53810a1a534SBram Moolenaar    \ 'vim': ['file.vim', 'file.vba', '.exrc', '_exrc', 'some-vimrc', 'some-vimrc-file', 'vimrc', 'vimrc-file'],
5390a0217abSBram Moolenaar    \ 'viminfo': ['.viminfo', '_viminfo'],
5400a0217abSBram Moolenaar    \ 'vmasm': ['file.mar'],
5410a0217abSBram Moolenaar    \ 'voscm': ['file.cm'],
5420a0217abSBram Moolenaar    \ 'vrml': ['file.wrl'],
5430a0217abSBram Moolenaar    \ 'vroom': ['file.vroom'],
54442481114SBram Moolenaar    \ 'vue': ['file.vue'],
54538654503SBram Moolenaar    \ 'wast': ['file.wast', 'file.wat'],
5460a0217abSBram Moolenaar    \ 'webmacro': ['file.wm'],
5470a0217abSBram Moolenaar    \ 'wget': ['.wgetrc', 'wgetrc'],
5480a0217abSBram Moolenaar    \ 'winbatch': ['file.wbt'],
5490a0217abSBram Moolenaar    \ 'wml': ['file.wml'],
55010a1a534SBram Moolenaar    \ 'wsh': ['file.wsf', 'file.wsc'],
5510a0217abSBram Moolenaar    \ 'wsml': ['file.wsml'],
5520a0217abSBram Moolenaar    \ 'wvdial': ['wvdial.conf', '.wvdialrc'],
55310a1a534SBram Moolenaar    \ 'xdefaults': ['.Xdefaults', '.Xpdefaults', '.Xresources', 'xdm-config', 'file.ad', '/Xresources/file', '/app-defaults/file', 'Xresources', 'Xresources-file', 'any/Xresources/file', 'any/app-defaults/file'],
5540a0217abSBram Moolenaar    \ 'xhtml': ['file.xhtml', 'file.xht'],
55510a1a534SBram Moolenaar    \ 'xinetd': ['/etc/xinetd.conf', '/etc/xinetd.d/file', 'any/etc/xinetd.conf', 'any/etc/xinetd.d/file'],
5560a0217abSBram Moolenaar    \ 'xmath': ['file.msc', 'file.msf'],
557690c524cSSteven Penny    \ 'xml': ['/etc/blkid.tab', '/etc/blkid.tab.old', 'file.xmi', 'file.csproj', 'file.csproj.user', 'file.ui', 'file.tpm', '/etc/xdg/menus/file.menu', 'fglrxrc', 'file.xlf', 'file.xliff', 'file.xul', 'file.wsdl', 'file.wpl', 'any/etc/blkid.tab', 'any/etc/blkid.tab.old', 'any/etc/xdg/menus/file.menu', 'file.atom', 'file.rss', 'file.cdxml', 'file.psc1', 'file.mpd'],
55810a1a534SBram Moolenaar    \ 'xmodmap': ['anyXmodmap', 'Xmodmap', 'some-Xmodmap', 'some-xmodmap', 'some-xmodmap-file', 'xmodmap', 'xmodmap-file'],
5590a0217abSBram Moolenaar    \ 'xf86conf': ['xorg.conf', 'xorg.conf-4'],
5606e77b88dSBram Moolenaar    \ 'xpm': ['file.xpm'],
5610a0217abSBram Moolenaar    \ 'xpm2': ['file.xpm2'],
5620a0217abSBram Moolenaar    \ 'xquery': ['file.xq', 'file.xql', 'file.xqm', 'file.xquery', 'file.xqy'],
5630a0217abSBram Moolenaar    \ 'xs': ['file.xs'],
5640a0217abSBram Moolenaar    \ 'xsd': ['file.xsd'],
5650a0217abSBram Moolenaar    \ 'xslt': ['file.xsl', 'file.xslt'],
5660a0217abSBram Moolenaar    \ 'yacc': ['file.yy', 'file.yxx', 'file.y++'],
5670a0217abSBram Moolenaar    \ 'yaml': ['file.yaml', 'file.yml'],
568da1c11c6SBram Moolenaar    \ 'raml': ['file.raml'],
5690a0217abSBram Moolenaar    \ 'z8a': ['file.z8a'],
5700a0217abSBram Moolenaar    \ 'zimbu': ['file.zu'],
5710a0217abSBram Moolenaar    \ 'zimbutempl': ['file.zut'],
57210a1a534SBram Moolenaar    \ 'zsh': ['.zprofile', '/etc/zprofile', '.zfbfmarks', 'file.zsh', '.zcompdump', '.zlogin', '.zlogout', '.zshenv', '.zshrc', '.zcompdump-file', '.zlog', '.zlog-file', '.zsh', '.zsh-file', 'any/etc/zprofile', 'zlog', 'zlog-file', 'zsh', 'zsh-file'],
5730a0217abSBram Moolenaar    \
5740a0217abSBram Moolenaar    \ 'help': [$VIMRUNTIME . '/doc/help.txt'],
5750a0217abSBram Moolenaar    \ }
5760a0217abSBram Moolenaar
5778ab3c1dcSBram Moolenaarlet s:filename_case_checks = {
5788ab3c1dcSBram Moolenaar    \ 'modula2': ['file.DEF', 'file.MOD'],
5794488f5a5SBram Moolenaar    \ 'bzl': ['file.BUILD', 'BUILD'],
5808ab3c1dcSBram Moolenaar    \ }
5818ab3c1dcSBram Moolenaar
5828ab3c1dcSBram Moolenaarfunc CheckItems(checks)
5832733779aSBram Moolenaar  set noswapfile
5848ab3c1dcSBram Moolenaar  for [ft, names] in items(a:checks)
5850a0217abSBram Moolenaar    for i in range(0, len(names) - 1)
5860a0217abSBram Moolenaar      new
5870a0217abSBram Moolenaar      try
588c2734051SBram Moolenaar        exe 'edit ' . fnameescape(names[i])
5890a0217abSBram Moolenaar      catch
590eee9f65bSBram Moolenaar	call assert_report('cannot edit "' . names[i] . '": ' . v:exception)
5910a0217abSBram Moolenaar      endtry
592ddd33087SBram Moolenaar      if &filetype == '' && &readonly
593ddd33087SBram Moolenaar	" File exists but not able to edit it (permission denied)
594ddd33087SBram Moolenaar      else
5950a0217abSBram Moolenaar	call assert_equal(ft, &filetype, 'with file name: ' . names[i])
596ddd33087SBram Moolenaar      endif
5970a0217abSBram Moolenaar      bwipe!
5980a0217abSBram Moolenaar    endfor
5990a0217abSBram Moolenaar  endfor
6002733779aSBram Moolenaar  set swapfile&
6010a0217abSBram Moolenaarendfunc
6028ab3c1dcSBram Moolenaar
6038ab3c1dcSBram Moolenaarfunc Test_filetype_detection()
6048ab3c1dcSBram Moolenaar  filetype on
6058ab3c1dcSBram Moolenaar  call CheckItems(s:filename_checks)
6068ab3c1dcSBram Moolenaar  if has('fname_case')
6078ab3c1dcSBram Moolenaar    call CheckItems(s:filename_case_checks)
6088ab3c1dcSBram Moolenaar  endif
609cbe69449SBram Moolenaar  filetype off
6108ab3c1dcSBram Moolenaarendfunc
611cbe69449SBram Moolenaar
612cbe69449SBram Moolenaar" Filetypes detected from the file contents by scripts.vim
613cbe69449SBram Moolenaarlet s:script_checks = {
614cbe69449SBram Moolenaar      \ 'virata': [['% Virata'],
615cbe69449SBram Moolenaar      \		['', '% Virata'],
616cbe69449SBram Moolenaar      \		['', '', '% Virata'],
617cbe69449SBram Moolenaar      \		['', '', '', '% Virata'],
618cbe69449SBram Moolenaar      \		['', '', '', '', '% Virata']],
619cbe69449SBram Moolenaar      \ 'strace': [['execve("/usr/bin/pstree", ["pstree"], 0x7ff0 /* 63 vars */) = 0'],
620cbe69449SBram Moolenaar      \		['15:17:47 execve("/usr/bin/pstree", ["pstree"], ... "_=/usr/bin/strace"]) = 0'],
621cbe69449SBram Moolenaar      \		['__libc_start_main and something']],
622ddb34936SBram Moolenaar      \ 'clojure': [['#!/path/clojure']],
623ddb34936SBram Moolenaar      \ 'scala': [['#!/path/scala']],
624ddb34936SBram Moolenaar      \ 'tcsh': [['#!/path/tcsh']],
625ddb34936SBram Moolenaar      \ 'zsh': [['#!/path/zsh']],
626ddb34936SBram Moolenaar      \ 'tcl': [['#!/path/tclsh'],
627ddb34936SBram Moolenaar      \         ['#!/path/wish'],
628ddb34936SBram Moolenaar      \         ['#!/path/expectk'],
629ddb34936SBram Moolenaar      \         ['#!/path/itclsh'],
630ddb34936SBram Moolenaar      \         ['#!/path/itkwish']],
631ddb34936SBram Moolenaar      \ 'expect': [['#!/path/expect']],
632ddb34936SBram Moolenaar      \ 'gnuplot': [['#!/path/gnuplot']],
633ddb34936SBram Moolenaar      \ 'make': [['#!/path/make']],
634ddb34936SBram Moolenaar      \ 'pike': [['#!/path/pike'],
635ddb34936SBram Moolenaar      \          ['#!/path/pike0'],
636ddb34936SBram Moolenaar      \          ['#!/path/pike9']],
637ddb34936SBram Moolenaar      \ 'lua': [['#!/path/lua']],
6383f88e71fSBram Moolenaar      \ 'raku': [['#!/path/raku']],
639ddb34936SBram Moolenaar      \ 'perl': [['#!/path/perl']],
640ddb34936SBram Moolenaar      \ 'php': [['#!/path/php']],
6414bc0bed5SBram Moolenaar      \ 'python': [['#!/path/python'],
6424bc0bed5SBram Moolenaar      \            ['#!/path/python2'],
6434bc0bed5SBram Moolenaar      \            ['#!/path/python3']],
644ddb34936SBram Moolenaar      \ 'groovy': [['#!/path/groovy']],
645ddb34936SBram Moolenaar      \ 'ruby': [['#!/path/ruby']],
646ddb34936SBram Moolenaar      \ 'javascript': [['#!/path/node'],
6474bc0bed5SBram Moolenaar      \                ['#!/path/js'],
648ddb34936SBram Moolenaar      \                ['#!/path/nodejs'],
649ddb34936SBram Moolenaar      \                ['#!/path/rhino']],
650ddb34936SBram Moolenaar      \ 'bc': [['#!/path/bc']],
651ddb34936SBram Moolenaar      \ 'sed': [['#!/path/sed']],
652ddb34936SBram Moolenaar      \ 'ocaml': [['#!/path/ocaml']],
6539a5c553fSBram Moolenaar      \ 'awk': [['#!/path/awk'],
6549a5c553fSBram Moolenaar      \         ['#!/path/gawk']],
655ddb34936SBram Moolenaar      \ 'wml': [['#!/path/wml']],
656ddb34936SBram Moolenaar      \ 'scheme': [['#!/path/scheme']],
657ddb34936SBram Moolenaar      \ 'cfengine': [['#!/path/cfengine']],
658ddb34936SBram Moolenaar      \ 'erlang': [['#!/path/escript']],
659ddb34936SBram Moolenaar      \ 'haskell': [['#!/path/haskell']],
6606a7af8e2SBram Moolenaar      \ 'cpp': [['// Standard iostream objects -*- C++ -*-'],
6616a7af8e2SBram Moolenaar      \         ['// -*- C++ -*-']],
6628eab7313SBram Moolenaar      \ 'yaml': [['%YAML 1.2']],
663a0122dcdSBram Moolenaar      \ 'pascal': [['#!/path/instantfpc']],
664402115f1SBram Moolenaar      \ 'fennel': [['#!/path/fennel']],
6650818ab82Szainin      \ 'routeros': [['#!/path/rsc']],
666b1b163efSBram Moolenaar      \ 'fish': [['#!/path/fish']],
667cbe69449SBram Moolenaar      \ }
668cbe69449SBram Moolenaar
669b5e18f29SBram Moolenaar" Various forms of "env" optional arguments.
670b5e18f29SBram Moolenaarlet s:script_env_checks = {
671b5e18f29SBram Moolenaar      \ 'perl': [['#!/usr/bin/env VAR=val perl']],
672b5e18f29SBram Moolenaar      \ 'scala': [['#!/usr/bin/env VAR=val VVAR=vval scala']],
673b5e18f29SBram Moolenaar      \ 'awk': [['#!/usr/bin/env VAR=val -i awk']],
674b5e18f29SBram Moolenaar      \ 'scheme': [['#!/usr/bin/env VAR=val --ignore-environment scheme']],
675b5e18f29SBram Moolenaar      \ 'python': [['#!/usr/bin/env VAR=val -S python -w -T']],
676b5e18f29SBram Moolenaar      \ 'wml': [['#!/usr/bin/env VAR=val --split-string wml']],
677b5e18f29SBram Moolenaar      \ }
678b5e18f29SBram Moolenaar
679b5e18f29SBram Moolenaarfunc Run_script_detection(test_dict)
680cbe69449SBram Moolenaar  filetype on
681b5e18f29SBram Moolenaar  for [ft, files] in items(a:test_dict)
682cbe69449SBram Moolenaar    for file in files
683cbe69449SBram Moolenaar      call writefile(file, 'Xtest')
684cbe69449SBram Moolenaar      split Xtest
685ce11de87SBram Moolenaar      call assert_equal(ft, &filetype, 'for text: ' . string(file))
686cbe69449SBram Moolenaar      bwipe!
687cbe69449SBram Moolenaar    endfor
688cbe69449SBram Moolenaar  endfor
689cbe69449SBram Moolenaar  call delete('Xtest')
690cbe69449SBram Moolenaar  filetype off
691cbe69449SBram Moolenaarendfunc
692cbe69449SBram Moolenaar
693b5e18f29SBram Moolenaarfunc Test_script_detection()
694b5e18f29SBram Moolenaar  call Run_script_detection(s:script_checks)
695b5e18f29SBram Moolenaar  call Run_script_detection(s:script_env_checks)
696b5e18f29SBram Moolenaarendfunc
697b5e18f29SBram Moolenaar
698b513d307SBram Moolenaarfunc Test_setfiletype_completion()
699b513d307SBram Moolenaar  call feedkeys(":setfiletype java\<C-A>\<C-B>\"\<CR>", 'tx')
70092852ceeSBram Moolenaar  call assert_equal('"setfiletype java javacc javascript javascriptreact', @:)
701b513d307SBram Moolenaarendfunc
702bc2b71d4SBram Moolenaar
703bc2b71d4SBram Moolenaar" Test for ':filetype detect' command for a buffer without a file
704bc2b71d4SBram Moolenaarfunc Test_emptybuf_ftdetect()
705bc2b71d4SBram Moolenaar  new
706bc2b71d4SBram Moolenaar  call setline(1, '#!/bin/sh')
707bc2b71d4SBram Moolenaar  call assert_equal('', &filetype)
708bc2b71d4SBram Moolenaar  filetype detect
709bc2b71d4SBram Moolenaar  call assert_equal('sh', &filetype)
710bc2b71d4SBram Moolenaar  close!
711bc2b71d4SBram Moolenaarendfunc
712bc2b71d4SBram Moolenaar
713bc2b71d4SBram Moolenaar" Test for ':filetype indent on' and ':filetype indent off' commands
714bc2b71d4SBram Moolenaarfunc Test_filetype_indent_off()
715bc2b71d4SBram Moolenaar  new Xtest.vim
716bc2b71d4SBram Moolenaar  filetype indent on
717bc2b71d4SBram Moolenaar  call assert_equal(1, g:did_indent_on)
718818fc9adSBram Moolenaar  call assert_equal(['filetype detection:ON  plugin:OFF  indent:ON'],
719818fc9adSBram Moolenaar        \ execute('filetype')->split("\n"))
720bc2b71d4SBram Moolenaar  filetype indent off
721bc2b71d4SBram Moolenaar  call assert_equal(0, exists('g:did_indent_on'))
722818fc9adSBram Moolenaar  call assert_equal(['filetype detection:ON  plugin:OFF  indent:OFF'],
723818fc9adSBram Moolenaar        \ execute('filetype')->split("\n"))
724bc2b71d4SBram Moolenaar  close
725bc2b71d4SBram Moolenaarendfunc
726bc2b71d4SBram Moolenaar
72773b4465bSBram Moolenaarfunc Test_hook_file()
72873b4465bSBram Moolenaar  filetype on
72973b4465bSBram Moolenaar
73073b4465bSBram Moolenaar  call writefile(['[Trigger]', 'this is pacman config'], 'Xfile.hook')
73173b4465bSBram Moolenaar  split Xfile.hook
73273b4465bSBram Moolenaar  call assert_equal('dosini', &filetype)
73373b4465bSBram Moolenaar  bwipe!
73473b4465bSBram Moolenaar
73573b4465bSBram Moolenaar  call writefile(['not pacman'], 'Xfile.hook')
73673b4465bSBram Moolenaar  split Xfile.hook
73773b4465bSBram Moolenaar  call assert_notequal('dosini', &filetype)
73873b4465bSBram Moolenaar  bwipe!
73973b4465bSBram Moolenaar
74073b4465bSBram Moolenaar  call delete('Xfile.hook')
74173b4465bSBram Moolenaar  filetype off
74273b4465bSBram Moolenaarendfunc
74373b4465bSBram Moolenaar
744c0d670ceSBram Moolenaarfunc Test_ts_file()
745c0d670ceSBram Moolenaar  filetype on
746c0d670ceSBram Moolenaar
747c0d670ceSBram Moolenaar  call writefile(['<?xml version="1.0" encoding="utf-8"?>'], 'Xfile.ts')
748c0d670ceSBram Moolenaar  split Xfile.ts
749c0d670ceSBram Moolenaar  call assert_equal('xml', &filetype)
750c0d670ceSBram Moolenaar  bwipe!
751c0d670ceSBram Moolenaar
752c0d670ceSBram Moolenaar  call writefile(['// looks like Typescript'], 'Xfile.ts')
753c0d670ceSBram Moolenaar  split Xfile.ts
754c0d670ceSBram Moolenaar  call assert_equal('typescript', &filetype)
755c0d670ceSBram Moolenaar  bwipe!
756c0d670ceSBram Moolenaar
757ac665c24SBram Moolenaar  call delete('Xfile.ts')
758c0d670ceSBram Moolenaar  filetype off
759c0d670ceSBram Moolenaarendfunc
760c0d670ceSBram Moolenaar
7615e6a7aa2SBram Moolenaarfunc Test_ttl_file()
7625e6a7aa2SBram Moolenaar  filetype on
7635e6a7aa2SBram Moolenaar
7645e6a7aa2SBram Moolenaar  call writefile(['@base <http://example.org/> .'], 'Xfile.ttl')
7655e6a7aa2SBram Moolenaar  split Xfile.ttl
7665e6a7aa2SBram Moolenaar  call assert_equal('turtle', &filetype)
7675e6a7aa2SBram Moolenaar  bwipe!
7685e6a7aa2SBram Moolenaar
7695e6a7aa2SBram Moolenaar  call writefile(['looks like Tera Term Language'], 'Xfile.ttl')
7705e6a7aa2SBram Moolenaar  split Xfile.ttl
7715e6a7aa2SBram Moolenaar  call assert_equal('teraterm', &filetype)
7725e6a7aa2SBram Moolenaar  bwipe!
7735e6a7aa2SBram Moolenaar
7745e6a7aa2SBram Moolenaar  call delete('Xfile.ttl')
7755e6a7aa2SBram Moolenaar  filetype off
7765e6a7aa2SBram Moolenaarendfunc
7775e6a7aa2SBram Moolenaar
778a0122dcdSBram Moolenaarfunc Test_pp_file()
779a0122dcdSBram Moolenaar  filetype on
780a0122dcdSBram Moolenaar
781a0122dcdSBram Moolenaar  call writefile(['looks like puppet'], 'Xfile.pp')
782a0122dcdSBram Moolenaar  split Xfile.pp
783a0122dcdSBram Moolenaar  call assert_equal('puppet', &filetype)
784a0122dcdSBram Moolenaar  bwipe!
785a0122dcdSBram Moolenaar
786a0122dcdSBram Moolenaar  let g:filetype_pp = 'pascal'
787a0122dcdSBram Moolenaar  split Xfile.pp
788a0122dcdSBram Moolenaar  call assert_equal('pascal', &filetype)
789a0122dcdSBram Moolenaar  bwipe!
7900eec8519SChristian Clason  unlet g:filetype_pp
791a0122dcdSBram Moolenaar
792a0122dcdSBram Moolenaar  " Test dist#ft#FTpp()
793a0122dcdSBram Moolenaar  call writefile(['{ pascal comment'], 'Xfile.pp')
794a0122dcdSBram Moolenaar  split Xfile.pp
795a0122dcdSBram Moolenaar  call assert_equal('pascal', &filetype)
796a0122dcdSBram Moolenaar  bwipe!
797a0122dcdSBram Moolenaar
798a0122dcdSBram Moolenaar  call writefile(['procedure pascal'], 'Xfile.pp')
799a0122dcdSBram Moolenaar  split Xfile.pp
800a0122dcdSBram Moolenaar  call assert_equal('pascal', &filetype)
801a0122dcdSBram Moolenaar  bwipe!
802a0122dcdSBram Moolenaar
803a3b494d6SBram Moolenaar  call delete('Xfile.pp')
804a0122dcdSBram Moolenaar  filetype off
805a0122dcdSBram Moolenaarendfunc
806a0122dcdSBram Moolenaar
807f3caeb63SAustin Gatlinfunc Test_ex_file()
808f3caeb63SAustin Gatlin  filetype on
809f3caeb63SAustin Gatlin
810f3caeb63SAustin Gatlin  call writefile(['arbitrary content'], 'Xfile.ex')
811f3caeb63SAustin Gatlin  split Xfile.ex
812f3caeb63SAustin Gatlin  call assert_equal('elixir', &filetype)
813f3caeb63SAustin Gatlin  bwipe!
814f3caeb63SAustin Gatlin  let g:filetype_euphoria = 'euphoria4'
815f3caeb63SAustin Gatlin  split Xfile.ex
816f3caeb63SAustin Gatlin  call assert_equal('euphoria4', &filetype)
817f3caeb63SAustin Gatlin  bwipe!
818f3caeb63SAustin Gatlin  unlet g:filetype_euphoria
819f3caeb63SAustin Gatlin
820f3caeb63SAustin Gatlin  call writefile(['-- filetype euphoria comment'], 'Xfile.ex')
821f3caeb63SAustin Gatlin  split Xfile.ex
822f3caeb63SAustin Gatlin  call assert_equal('euphoria3', &filetype)
823f3caeb63SAustin Gatlin  bwipe!
824f3caeb63SAustin Gatlin
825f3caeb63SAustin Gatlin  call writefile(['--filetype euphoria comment'], 'Xfile.ex')
826f3caeb63SAustin Gatlin  split Xfile.ex
827f3caeb63SAustin Gatlin  call assert_equal('euphoria3', &filetype)
828f3caeb63SAustin Gatlin  bwipe!
829f3caeb63SAustin Gatlin
830f3caeb63SAustin Gatlin  call writefile(['ifdef '], 'Xfile.ex')
831f3caeb63SAustin Gatlin  split Xfile.ex
832f3caeb63SAustin Gatlin  call assert_equal('euphoria3', &filetype)
833f3caeb63SAustin Gatlin  bwipe!
834f3caeb63SAustin Gatlin
835f3caeb63SAustin Gatlin  call writefile(['include '], 'Xfile.ex')
836f3caeb63SAustin Gatlin  split Xfile.ex
837f3caeb63SAustin Gatlin  call assert_equal('euphoria3', &filetype)
838f3caeb63SAustin Gatlin  bwipe!
839f3caeb63SAustin Gatlin
840f3caeb63SAustin Gatlin  call delete('Xfile.ex')
841f3caeb63SAustin Gatlin  filetype off
842f3caeb63SAustin Gatlinendfunc
84373b4465bSBram Moolenaar
844dea56111SBastian Venthurfunc Test_dsl_file()
845dea56111SBastian Venthur  filetype on
846dea56111SBastian Venthur
847dea56111SBastian Venthur  call writefile(['  <!doctype dsssl-spec ['], 'dslfile.dsl')
848dea56111SBastian Venthur  split dslfile.dsl
849dea56111SBastian Venthur  call assert_equal('dsl', &filetype)
850dea56111SBastian Venthur  bwipe!
851dea56111SBastian Venthur
852dea56111SBastian Venthur  call writefile(['workspace {'], 'dslfile.dsl')
853dea56111SBastian Venthur  split dslfile.dsl
854dea56111SBastian Venthur  call assert_equal('structurizr', &filetype)
855dea56111SBastian Venthur  bwipe!
856dea56111SBastian Venthur
857dea56111SBastian Venthur  call delete('dslfile.dsl')
858dea56111SBastian Venthur  filetype off
859dea56111SBastian Venthurendfunc
860dea56111SBastian Venthur
861deba5eb1SBram Moolenaarfunc Test_m_file()
862deba5eb1SBram Moolenaar  filetype on
863deba5eb1SBram Moolenaar
864deba5eb1SBram Moolenaar  call writefile(['looks like Matlab'], 'Xfile.m')
865deba5eb1SBram Moolenaar  split Xfile.m
866deba5eb1SBram Moolenaar  call assert_equal('matlab', &filetype)
867deba5eb1SBram Moolenaar  bwipe!
868deba5eb1SBram Moolenaar
869deba5eb1SBram Moolenaar  let g:filetype_m = 'octave'
870deba5eb1SBram Moolenaar  split Xfile.m
871deba5eb1SBram Moolenaar  call assert_equal('octave', &filetype)
872deba5eb1SBram Moolenaar  bwipe!
873deba5eb1SBram Moolenaar  unlet g:filetype_m
874deba5eb1SBram Moolenaar
875deba5eb1SBram Moolenaar  " Test dist#ft#FTm()
876deba5eb1SBram Moolenaar
877deba5eb1SBram Moolenaar  " Objective-C
878deba5eb1SBram Moolenaar
879deba5eb1SBram Moolenaar  call writefile(['// Objective-C line comment'], 'Xfile.m')
880deba5eb1SBram Moolenaar  split Xfile.m
881deba5eb1SBram Moolenaar  call assert_equal('objc', &filetype)
882deba5eb1SBram Moolenaar  bwipe!
883deba5eb1SBram Moolenaar
884deba5eb1SBram Moolenaar  call writefile(['/* Objective-C block comment */'], 'Xfile.m')
885deba5eb1SBram Moolenaar  split Xfile.m
886deba5eb1SBram Moolenaar  call assert_equal('objc', &filetype)
887deba5eb1SBram Moolenaar  bwipe!
888deba5eb1SBram Moolenaar
889deba5eb1SBram Moolenaar  call writefile(['#import "test.m"'], 'Xfile.m')
890deba5eb1SBram Moolenaar  split Xfile.m
891deba5eb1SBram Moolenaar  call assert_equal('objc', &filetype)
892deba5eb1SBram Moolenaar  bwipe!
893deba5eb1SBram Moolenaar
894deba5eb1SBram Moolenaar  " Octave
895deba5eb1SBram Moolenaar
896deba5eb1SBram Moolenaar  call writefile(['# Octave line comment'], 'Xfile.m')
897deba5eb1SBram Moolenaar  split Xfile.m
898deba5eb1SBram Moolenaar  call assert_equal('octave', &filetype)
899deba5eb1SBram Moolenaar  bwipe!
900deba5eb1SBram Moolenaar
901deba5eb1SBram Moolenaar  call writefile(['%!test "Octave test"'], 'Xfile.m')
902deba5eb1SBram Moolenaar  split Xfile.m
903deba5eb1SBram Moolenaar  call assert_equal('octave', &filetype)
904deba5eb1SBram Moolenaar  bwipe!
905deba5eb1SBram Moolenaar
906deba5eb1SBram Moolenaar  call writefile(['unwind_protect'], 'Xfile.m')
907deba5eb1SBram Moolenaar  split Xfile.m
908deba5eb1SBram Moolenaar  call assert_equal('octave', &filetype)
909deba5eb1SBram Moolenaar  bwipe!
910deba5eb1SBram Moolenaar
911ca0627dfSBram Moolenaar  call writefile(['try; 42; end_try_catch'], 'Xfile.m')
912deba5eb1SBram Moolenaar  split Xfile.m
913deba5eb1SBram Moolenaar  call assert_equal('octave', &filetype)
914deba5eb1SBram Moolenaar  bwipe!
915deba5eb1SBram Moolenaar
916deba5eb1SBram Moolenaar  " Mathematica
917deba5eb1SBram Moolenaar
918deba5eb1SBram Moolenaar  call writefile(['(* Mathematica comment'], 'Xfile.m')
919deba5eb1SBram Moolenaar  split Xfile.m
920deba5eb1SBram Moolenaar  call assert_equal('mma', &filetype)
921deba5eb1SBram Moolenaar  bwipe!
922deba5eb1SBram Moolenaar
923ca0627dfSBram Moolenaar  " MATLAB
924ca0627dfSBram Moolenaar
925ca0627dfSBram Moolenaar  call writefile(['% MATLAB line comment'], 'Xfile.m')
926ca0627dfSBram Moolenaar  split Xfile.m
927ca0627dfSBram Moolenaar  call assert_equal('matlab', &filetype)
928ca0627dfSBram Moolenaar  bwipe!
929ca0627dfSBram Moolenaar
930deba5eb1SBram Moolenaar  " Murphi
931deba5eb1SBram Moolenaar
932deba5eb1SBram Moolenaar  call writefile(['-- Murphi comment'], 'Xfile.m')
933deba5eb1SBram Moolenaar  split Xfile.m
934deba5eb1SBram Moolenaar  call assert_equal('murphi', &filetype)
935deba5eb1SBram Moolenaar  bwipe!
936deba5eb1SBram Moolenaar
937deba5eb1SBram Moolenaar  call writefile(['/* Murphi block comment */', 'Type'], 'Xfile.m')
938deba5eb1SBram Moolenaar  split Xfile.m
939deba5eb1SBram Moolenaar  call assert_equal('murphi', &filetype)
940deba5eb1SBram Moolenaar  bwipe!
941deba5eb1SBram Moolenaar
942deba5eb1SBram Moolenaar  call writefile(['Type'], 'Xfile.m')
943deba5eb1SBram Moolenaar  split Xfile.m
944deba5eb1SBram Moolenaar  call assert_equal('murphi', &filetype)
945deba5eb1SBram Moolenaar  bwipe!
946deba5eb1SBram Moolenaar
947deba5eb1SBram Moolenaar  call delete('Xfile.m')
948deba5eb1SBram Moolenaar  filetype off
949deba5eb1SBram Moolenaarendfunc
9506e77b88dSBram Moolenaar
9516e77b88dSBram Moolenaarfunc Test_xpm_file()
9526e77b88dSBram Moolenaar  filetype on
9536e77b88dSBram Moolenaar
9546e77b88dSBram Moolenaar  call writefile(['this is XPM2'], 'file.xpm')
9556e77b88dSBram Moolenaar  split file.xpm
9566e77b88dSBram Moolenaar  call assert_equal('xpm2', &filetype)
9576e77b88dSBram Moolenaar  bwipe!
9586e77b88dSBram Moolenaar
9596e77b88dSBram Moolenaar  call delete('file.xpm')
9606e77b88dSBram Moolenaar  filetype off
9616e77b88dSBram Moolenaarendfunc
9626e77b88dSBram Moolenaar
963bc2b71d4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
964