summaryrefslogtreecommitdiffstats
path: root/runtime/ftplugin
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--runtime/ftplugin.vim35
-rw-r--r--runtime/ftplugin/8th.vim25
-rw-r--r--runtime/ftplugin/README.txt24
-rw-r--r--runtime/ftplugin/a2ps.vim20
-rw-r--r--runtime/ftplugin/aap.vim25
-rw-r--r--runtime/ftplugin/abap.vim29
-rw-r--r--runtime/ftplugin/abaqus.vim97
-rw-r--r--runtime/ftplugin/ada.vim211
-rw-r--r--runtime/ftplugin/alsaconf.vim19
-rw-r--r--runtime/ftplugin/ant.vim44
-rw-r--r--runtime/ftplugin/arch.vim19
-rw-r--r--runtime/ftplugin/art.vim15
-rw-r--r--runtime/ftplugin/asm.vim11
-rw-r--r--runtime/ftplugin/aspvbs.vim60
-rw-r--r--runtime/ftplugin/automake.vim16
-rw-r--r--runtime/ftplugin/awk.vim56
-rw-r--r--runtime/ftplugin/bash.vim20
-rw-r--r--runtime/ftplugin/basic.vim27
-rw-r--r--runtime/ftplugin/bdf.vim20
-rw-r--r--runtime/ftplugin/bst.vim15
-rw-r--r--runtime/ftplugin/btm.vim12
-rw-r--r--runtime/ftplugin/bzl.vim96
-rw-r--r--runtime/ftplugin/c.vim68
-rw-r--r--runtime/ftplugin/calendar.vim20
-rw-r--r--runtime/ftplugin/cdrdaoconf.vim18
-rw-r--r--runtime/ftplugin/cfg.vim19
-rw-r--r--runtime/ftplugin/ch.vim17
-rw-r--r--runtime/ftplugin/changelog.vim301
-rw-r--r--runtime/ftplugin/chicken.vim54
-rw-r--r--runtime/ftplugin/clojure.vim95
-rw-r--r--runtime/ftplugin/cmake.vim34
-rw-r--r--runtime/ftplugin/cobol.vim269
-rw-r--r--runtime/ftplugin/conf.vim19
-rw-r--r--runtime/ftplugin/config.vim42
-rw-r--r--runtime/ftplugin/context.vim102
-rw-r--r--runtime/ftplugin/cpp.vim17
-rw-r--r--runtime/ftplugin/crm.vim19
-rw-r--r--runtime/ftplugin/cs.vim29
-rw-r--r--runtime/ftplugin/csc.vim27
-rw-r--r--runtime/ftplugin/csh.vim48
-rw-r--r--runtime/ftplugin/css.vim25
-rw-r--r--runtime/ftplugin/cucumber.vim150
-rw-r--r--runtime/ftplugin/cvsrc.vim19
-rw-r--r--runtime/ftplugin/debchangelog.vim383
-rw-r--r--runtime/ftplugin/debcontrol.vim70
-rw-r--r--runtime/ftplugin/denyhosts.vim18
-rw-r--r--runtime/ftplugin/dictconf.vim19
-rw-r--r--runtime/ftplugin/dictdconf.vim19
-rw-r--r--runtime/ftplugin/diff.vim18
-rw-r--r--runtime/ftplugin/dircolors.vim19
-rw-r--r--runtime/ftplugin/docbk.vim24
-rw-r--r--runtime/ftplugin/dockerfile.vim16
-rw-r--r--runtime/ftplugin/dosbatch.vim40
-rw-r--r--runtime/ftplugin/dosini.vim19
-rw-r--r--runtime/ftplugin/dtd.vim40
-rw-r--r--runtime/ftplugin/dtrace.vim40
-rw-r--r--runtime/ftplugin/dune.vim20
-rw-r--r--runtime/ftplugin/eiffel.vim96
-rw-r--r--runtime/ftplugin/elinks.vim19
-rw-r--r--runtime/ftplugin/elm.vim18
-rw-r--r--runtime/ftplugin/erlang.vim83
-rw-r--r--runtime/ftplugin/eruby.vim132
-rw-r--r--runtime/ftplugin/eterm.vim20
-rw-r--r--runtime/ftplugin/falcon.vim49
-rw-r--r--runtime/ftplugin/fetchmail.vim19
-rw-r--r--runtime/ftplugin/flexwiki.vim59
-rw-r--r--runtime/ftplugin/fortran.vim133
-rw-r--r--runtime/ftplugin/framescript.vim30
-rw-r--r--runtime/ftplugin/freebasic.vim13
-rw-r--r--runtime/ftplugin/fstab.vim19
-rw-r--r--runtime/ftplugin/fvwm.vim14
-rw-r--r--runtime/ftplugin/gdb.vim12
-rw-r--r--runtime/ftplugin/git.vim41
-rw-r--r--runtime/ftplugin/gitcommit.vim66
-rw-r--r--runtime/ftplugin/gitconfig.vim15
-rw-r--r--runtime/ftplugin/gitrebase.vim48
-rw-r--r--runtime/ftplugin/gitsendemail.vim6
-rw-r--r--runtime/ftplugin/go.vim18
-rw-r--r--runtime/ftplugin/gpg.vim19
-rw-r--r--runtime/ftplugin/gprof.vim32
-rw-r--r--runtime/ftplugin/groovy.vim19
-rw-r--r--runtime/ftplugin/group.vim19
-rw-r--r--runtime/ftplugin/grub.vim19
-rw-r--r--runtime/ftplugin/haml.vim71
-rw-r--r--runtime/ftplugin/hamster.vim65
-rw-r--r--runtime/ftplugin/haskell.vim22
-rw-r--r--runtime/ftplugin/help.vim22
-rw-r--r--runtime/ftplugin/hgcommit.vim16
-rw-r--r--runtime/ftplugin/hog.vim39
-rw-r--r--runtime/ftplugin/hostconf.vim18
-rw-r--r--runtime/ftplugin/hostsaccess.vim19
-rw-r--r--runtime/ftplugin/html.vim51
-rw-r--r--runtime/ftplugin/htmldjango.vim13
-rw-r--r--runtime/ftplugin/indent.vim20
-rw-r--r--runtime/ftplugin/initex.vim39
-rw-r--r--runtime/ftplugin/ishd.vim33
-rw-r--r--runtime/ftplugin/j.vim81
-rw-r--r--runtime/ftplugin/java.vim51
-rw-r--r--runtime/ftplugin/javascript.vim75
-rw-r--r--runtime/ftplugin/javascriptreact.vim7
-rw-r--r--runtime/ftplugin/jproperties.vim15
-rw-r--r--runtime/ftplugin/json.vim17
-rw-r--r--runtime/ftplugin/jsp.vim67
-rw-r--r--runtime/ftplugin/kconfig.vim27
-rw-r--r--runtime/ftplugin/kwt.vim32
-rw-r--r--runtime/ftplugin/ld.vim20
-rw-r--r--runtime/ftplugin/less.vim20
-rw-r--r--runtime/ftplugin/lftp.vim19
-rw-r--r--runtime/ftplugin/libao.vim19
-rw-r--r--runtime/ftplugin/limits.vim19
-rw-r--r--runtime/ftplugin/liquid.vim61
-rw-r--r--runtime/ftplugin/lisp.vim26
-rw-r--r--runtime/ftplugin/logcheck.vim17
-rw-r--r--runtime/ftplugin/loginaccess.vim19
-rw-r--r--runtime/ftplugin/logindefs.vim19
-rw-r--r--runtime/ftplugin/logtalk.dict262
-rw-r--r--runtime/ftplugin/logtalk.vim19
-rw-r--r--runtime/ftplugin/lprolog.vim37
-rw-r--r--runtime/ftplugin/lua.vim42
-rw-r--r--runtime/ftplugin/m4.vim20
-rw-r--r--runtime/ftplugin/mail.vim38
-rw-r--r--runtime/ftplugin/mailaliases.vim18
-rw-r--r--runtime/ftplugin/mailcap.vim19
-rw-r--r--runtime/ftplugin/make.vim33
-rw-r--r--runtime/ftplugin/man.vim253
-rw-r--r--runtime/ftplugin/manconf.vim19
-rw-r--r--runtime/ftplugin/markdown.vim74
-rw-r--r--runtime/ftplugin/masm.vim19
-rw-r--r--runtime/ftplugin/matlab.vim33
-rw-r--r--runtime/ftplugin/meson.vim19
-rw-r--r--runtime/ftplugin/mf.vim70
-rw-r--r--runtime/ftplugin/mma.vim16
-rw-r--r--runtime/ftplugin/modconf.vim20
-rw-r--r--runtime/ftplugin/mp.vim82
-rw-r--r--runtime/ftplugin/mplayerconf.vim20
-rw-r--r--runtime/ftplugin/mrxvtrc.vim22
-rw-r--r--runtime/ftplugin/msmessages.vim40
-rw-r--r--runtime/ftplugin/muttrc.vim22
-rw-r--r--runtime/ftplugin/nanorc.vim19
-rw-r--r--runtime/ftplugin/neomuttrc.vim23
-rw-r--r--runtime/ftplugin/netrc.vim19
-rw-r--r--runtime/ftplugin/nroff.vim17
-rw-r--r--runtime/ftplugin/nsis.vim43
-rw-r--r--runtime/ftplugin/objc.vim12
-rw-r--r--runtime/ftplugin/ocaml.vim643
-rw-r--r--runtime/ftplugin/occam.vim49
-rw-r--r--runtime/ftplugin/pamconf.vim19
-rw-r--r--runtime/ftplugin/pascal.vim20
-rw-r--r--runtime/ftplugin/passwd.vim19
-rw-r--r--runtime/ftplugin/pbtxt.vim21
-rw-r--r--runtime/ftplugin/pdf.vim89
-rw-r--r--runtime/ftplugin/perl.vim89
-rw-r--r--runtime/ftplugin/perl6.vim77
-rw-r--r--runtime/ftplugin/php.vim83
-rw-r--r--runtime/ftplugin/pinfo.vim19
-rw-r--r--runtime/ftplugin/plaintex.vim37
-rw-r--r--runtime/ftplugin/postscr.vim38
-rw-r--r--runtime/ftplugin/procmail.vim21
-rw-r--r--runtime/ftplugin/prolog.vim20
-rw-r--r--runtime/ftplugin/protocols.vim19
-rw-r--r--runtime/ftplugin/pyrex.vim27
-rw-r--r--runtime/ftplugin/python.vim189
-rw-r--r--runtime/ftplugin/qf.vim18
-rw-r--r--runtime/ftplugin/quake.vim19
-rw-r--r--runtime/ftplugin/r.vim32
-rw-r--r--runtime/ftplugin/racc.vim20
-rw-r--r--runtime/ftplugin/readline.vim19
-rw-r--r--runtime/ftplugin/registry.vim36
-rw-r--r--runtime/ftplugin/reva.vim25
-rw-r--r--runtime/ftplugin/rhelp.vim30
-rw-r--r--runtime/ftplugin/rmd.vim63
-rw-r--r--runtime/ftplugin/rnc.vim19
-rw-r--r--runtime/ftplugin/rnoweb.vim41
-rw-r--r--runtime/ftplugin/rpl.vim22
-rw-r--r--runtime/ftplugin/rrst.vim54
-rw-r--r--runtime/ftplugin/rst.vim47
-rw-r--r--runtime/ftplugin/ruby.vim437
-rw-r--r--runtime/ftplugin/rust.vim197
-rw-r--r--runtime/ftplugin/sass.vim37
-rw-r--r--runtime/ftplugin/sbt.vim15
-rw-r--r--runtime/ftplugin/scala.vim35
-rw-r--r--runtime/ftplugin/scheme.vim57
-rw-r--r--runtime/ftplugin/screen.vim19
-rw-r--r--runtime/ftplugin/scss.vim13
-rw-r--r--runtime/ftplugin/sensors.vim19
-rw-r--r--runtime/ftplugin/services.vim19
-rw-r--r--runtime/ftplugin/setserial.vim19
-rw-r--r--runtime/ftplugin/sexplib.vim15
-rw-r--r--runtime/ftplugin/sgml.vim40
-rw-r--r--runtime/ftplugin/sh.vim39
-rw-r--r--runtime/ftplugin/sieve.vim20
-rw-r--r--runtime/ftplugin/slpconf.vim20
-rw-r--r--runtime/ftplugin/slpreg.vim20
-rw-r--r--runtime/ftplugin/slpspi.vim20
-rw-r--r--runtime/ftplugin/spec.vim208
-rw-r--r--runtime/ftplugin/sql.vim548
-rw-r--r--runtime/ftplugin/sshconfig.vim19
-rw-r--r--runtime/ftplugin/sudoers.vim19
-rw-r--r--runtime/ftplugin/svg.vim40
-rw-r--r--runtime/ftplugin/swift.vim23
-rw-r--r--runtime/ftplugin/swiftgyb.vim11
-rw-r--r--runtime/ftplugin/sysctl.vim20
-rw-r--r--runtime/ftplugin/systemd.vim41
-rw-r--r--runtime/ftplugin/systemverilog.vim11
-rw-r--r--runtime/ftplugin/tcl.vim37
-rw-r--r--runtime/ftplugin/tcsh.vim40
-rw-r--r--runtime/ftplugin/terminfo.vim19
-rw-r--r--runtime/ftplugin/tex.vim46
-rw-r--r--runtime/ftplugin/text.vim18
-rw-r--r--runtime/ftplugin/tidy.vim32
-rw-r--r--runtime/ftplugin/tmux.vim12
-rw-r--r--runtime/ftplugin/treetop.vim19
-rw-r--r--runtime/ftplugin/tt2html.vim13
-rw-r--r--runtime/ftplugin/typescript.vim39
-rw-r--r--runtime/ftplugin/typescriptreact.vim33
-rw-r--r--runtime/ftplugin/udevconf.vim19
-rw-r--r--runtime/ftplugin/udevperm.vim19
-rw-r--r--runtime/ftplugin/udevrules.vim19
-rw-r--r--runtime/ftplugin/updatedb.vim19
-rw-r--r--runtime/ftplugin/vb.vim45
-rw-r--r--runtime/ftplugin/verilog.vim66
-rw-r--r--runtime/ftplugin/vhdl.vim88
-rw-r--r--runtime/ftplugin/vim.vim115
-rw-r--r--runtime/ftplugin/vroom.vim35
-rw-r--r--runtime/ftplugin/wast.vim17
-rw-r--r--runtime/ftplugin/xdefaults.vim20
-rw-r--r--runtime/ftplugin/xf86conf.vim19
-rw-r--r--runtime/ftplugin/xhtml.vim67
-rw-r--r--runtime/ftplugin/xinetd.vim20
-rw-r--r--runtime/ftplugin/xml.vim65
-rw-r--r--runtime/ftplugin/xmodmap.vim19
-rw-r--r--runtime/ftplugin/xs.vim14
-rw-r--r--runtime/ftplugin/xsd.vim39
-rw-r--r--runtime/ftplugin/xslt.vim16
-rw-r--r--runtime/ftplugin/yaml.vim25
-rw-r--r--runtime/ftplugin/zimbu.vim153
-rw-r--r--runtime/ftplugin/zsh.vim42
237 files changed, 11574 insertions, 0 deletions
diff --git a/runtime/ftplugin.vim b/runtime/ftplugin.vim
new file mode 100644
index 0000000..a434b93
--- /dev/null
+++ b/runtime/ftplugin.vim
@@ -0,0 +1,35 @@
+" Vim support file to switch on loading plugins for file types
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2006 Apr 30
+
+if exists("did_load_ftplugin")
+ finish
+endif
+let did_load_ftplugin = 1
+
+augroup filetypeplugin
+ au FileType * call s:LoadFTPlugin()
+
+ func! s:LoadFTPlugin()
+ if exists("b:undo_ftplugin")
+ exe b:undo_ftplugin
+ unlet! b:undo_ftplugin b:did_ftplugin
+ endif
+
+ let s = expand("<amatch>")
+ if s != ""
+ if &cpo =~# "S" && exists("b:did_ftplugin")
+ " In compatible mode options are reset to the global values, need to
+ " set the local values also when a plugin was already used.
+ unlet b:did_ftplugin
+ endif
+
+ " When there is a dot it is used to separate filetype names. Thus for
+ " "aaa.bbb" load "aaa" and then "bbb".
+ for name in split(s, '\.')
+ exe 'runtime! ftplugin/' . name . '.vim ftplugin/' . name . '_*.vim ftplugin/' . name . '/*.vim'
+ endfor
+ endif
+ endfunc
+augroup END
diff --git a/runtime/ftplugin/8th.vim b/runtime/ftplugin/8th.vim
new file mode 100644
index 0000000..1430118
--- /dev/null
+++ b/runtime/ftplugin/8th.vim
@@ -0,0 +1,25 @@
+" Vim ftplugin file
+" Language: 8th
+" Version: any
+" Last Change: 2015/11/08
+" Maintainer: Ron Aaron <ron@aaron-tech.com>
+" URL: https://8th-dev.com/
+" Filetypes: *.8th
+" NOTE: 8th allows any non-whitespace in a name, so you need to do:
+" setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
+" This goes with the syntax/8th.vim file.
+
+" Only do this when not done yet for this buffer
+if exists("b:did_8thplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_8thplugin = 1
+
+setlocal ts=2 sts=2 sw=2 et
+setlocal com=s1:/*,mb:*,ex:*/,:\|,:\\
+setlocal fo=tcrqol
+setlocal matchpairs+=\::;
+setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
+setlocal suffixesadd=.8th
diff --git a/runtime/ftplugin/README.txt b/runtime/ftplugin/README.txt
new file mode 100644
index 0000000..19ad58b
--- /dev/null
+++ b/runtime/ftplugin/README.txt
@@ -0,0 +1,24 @@
+The ftplugin directory is for Vim plugin scripts that are only used for a
+specific filetype.
+
+All files ending in .vim in this directory and subdirectories will be sourced
+by Vim when it detects the filetype that matches the name of the file or
+subdirectory.
+For example, these are all loaded for the "c" filetype:
+
+ c.vim
+ c_extra.vim
+ c/settings.vim
+
+Note that the "_" in "c_extra.vim" is required to separate the filetype name
+from the following arbitrary name.
+
+The filetype plugins are only loaded when the ":filetype plugin" command has
+been used.
+
+The default filetype plugin files contain settings that 95% of the users will
+want to use. They do not contain personal preferences, like the value of
+'shiftwidth'.
+
+If you want to do additional settings, or overrule the default filetype
+plugin, you can create your own plugin file. See ":help ftplugin" in Vim.
diff --git a/runtime/ftplugin/a2ps.vim b/runtime/ftplugin/a2ps.vim
new file mode 100644
index 0000000..0e24e30
--- /dev/null
+++ b/runtime/ftplugin/a2ps.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: a2ps(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s include=^\\s*Include:
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/aap.vim b/runtime/ftplugin/aap.vim
new file mode 100644
index 0000000..9b20ec4
--- /dev/null
+++ b/runtime/ftplugin/aap.vim
@@ -0,0 +1,25 @@
+" Vim filetype plugin file
+" Language: Aap recipe
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2013 Apr 05
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Reset 'formatoptions', 'comments' and 'expandtab' to undo this plugin.
+let b:undo_ftplugin = "setl fo< com< et<"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=s:#\ -,m:#\ \ ,e:#,n:#,fb:-
+
+" Expand tabs to spaces to avoid trouble.
+setlocal expandtab
diff --git a/runtime/ftplugin/abap.vim b/runtime/ftplugin/abap.vim
new file mode 100644
index 0000000..956b002
--- /dev/null
+++ b/runtime/ftplugin/abap.vim
@@ -0,0 +1,29 @@
+" Vim filetype plugin file
+" Language: ABAP
+" Author: Steven Oliver <oliver.steven@gmail.com>
+" Copyright: Copyright (c) 2013 Steven Oliver
+" License: You may redistribute this under the same terms as Vim itself
+" --------------------------------------------------------------------------
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal softtabstop=2 shiftwidth=2
+setlocal suffixesadd=.abap
+
+" Windows allows you to filter the open file dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "ABAP Source Files (*.abap)\t*.abap\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
diff --git a/runtime/ftplugin/abaqus.vim b/runtime/ftplugin/abaqus.vim
new file mode 100644
index 0000000..b263d0c
--- /dev/null
+++ b/runtime/ftplugin/abaqus.vim
@@ -0,0 +1,97 @@
+" Vim filetype plugin file
+" Language: Abaqus finite element input file (www.abaqus.com)
+" Maintainer: Carl Osterwisch <osterwischc@asme.org>
+" Last Change: 2012 Apr 30
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin") | finish | endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Save the compatibility options and temporarily switch to vim defaults
+let s:cpo_save = &cpoptions
+set cpoptions&vim
+
+" Set the format of the include file specification for Abaqus
+" Used in :check gf ^wf [i and other commands
+setlocal include=\\<\\cINPUT\\s*=
+
+" Remove characters up to the first = when evaluating filenames
+setlocal includeexpr=substitute(v:fname,'.\\{-}=','','')
+
+" Remove comma from valid filename characters since it is used to
+" separate keyword parameters
+setlocal isfname-=,
+
+" Define format of comment lines (see 'formatoptions' for uses)
+setlocal comments=:**
+setlocal commentstring=**%s
+
+" Definitions start with a * and assign a NAME, NSET, or ELSET
+" Used in [d ^wd and other commands
+setlocal define=^\\*\\a.*\\c\\(NAME\\\|NSET\\\|ELSET\\)\\s*=
+
+" Abaqus keywords and identifiers may include a - character
+setlocal iskeyword+=-
+
+let b:undo_ftplugin = "setlocal include< includeexpr< isfname<"
+ \ . " comments< commentstring< define< iskeyword<"
+
+if has("folding")
+ " Fold all lines that do not begin with *
+ setlocal foldexpr=getline(v:lnum)[0]!=\"\*\"
+ setlocal foldmethod=expr
+ let b:undo_ftplugin .= " foldexpr< foldmethod<"
+endif
+
+" Set the file browse filter (currently only supported under Win32 gui)
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Abaqus Input Files (*.inp *.inc)\t*.inp;*.inc\n" .
+ \ "Abaqus Results (*.dat)\t*.dat\n" .
+ \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
+ \ "All Files (*.*)\t*.*\n"
+ let b:undo_ftplugin .= "|unlet! b:browsefilter"
+endif
+
+" Define patterns for the matchit plugin
+if exists("loaded_matchit") && !exists("b:match_words")
+ let b:match_ignorecase = 1
+ let b:match_words =
+ \ '\*part:\*end\s*part,' .
+ \ '\*assembly:\*end\s*assembly,' .
+ \ '\*instance:\*end\s*instance,' .
+ \ '\*step:\*end\s*step'
+ let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words"
+endif
+
+" Define keys used to move [count] keywords backward or forward.
+noremap <silent><buffer> [[ ?^\*\a<CR>:nohlsearch<CR>
+noremap <silent><buffer> ]] /^\*\a<CR>:nohlsearch<CR>
+
+" Define key to toggle commenting of the current line or range
+noremap <silent><buffer> <LocalLeader><LocalLeader>
+ \ :call <SID>Abaqus_ToggleComment()<CR>j
+function! <SID>Abaqus_ToggleComment() range
+ if strpart(getline(a:firstline), 0, 2) == "**"
+ " Un-comment all lines in range
+ silent execute a:firstline . ',' . a:lastline . 's/^\*\*//'
+ else
+ " Comment all lines in range
+ silent execute a:firstline . ',' . a:lastline . 's/^/**/'
+ endif
+endfunction
+
+let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]"
+ \ . "|unmap <buffer> <LocalLeader><LocalLeader>"
+
+" Undo must be done in nocompatible mode for <LocalLeader>.
+let b:undo_ftplugin = "let s:cpo_save = &cpoptions|"
+ \ . "set cpoptions&vim|"
+ \ . b:undo_ftplugin
+ \ . "|let &cpoptions = s:cpo_save"
+ \ . "|unlet s:cpo_save"
+
+" Restore saved compatibility options
+let &cpoptions = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/ada.vim b/runtime/ftplugin/ada.vim
new file mode 100644
index 0000000..a0621e1
--- /dev/null
+++ b/runtime/ftplugin/ada.vim
@@ -0,0 +1,211 @@
+"------------------------------------------------------------------------------
+" Description: Perform Ada specific completion & tagging.
+" Language: Ada (2005)
+" $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
+" Maintainer: Martin Krischik <krischik@users.sourceforge.net>
+" Taylor Venable <taylor@metasyntax.net>
+" Neil Bird <neil@fnxweb.com>
+" $Author: krischik $
+" $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
+" Version: 4.6 with patch from David Bürgin
+" $Revision: 887 $
+" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $
+" History: 24.05.2006 MK Unified Headers
+" 26.05.2006 MK ' should not be in iskeyword.
+" 16.07.2006 MK Ada-Mode as vim-ball
+" 02.10.2006 MK Better folding.
+" 15.10.2006 MK Bram's suggestion for runtime integration
+" 05.11.2006 MK Bram suggested not to use include protection for
+" autoload
+" 05.11.2006 MK Bram suggested to save on spaces
+" 08.07.2007 TV fix default compiler problems.
+" Help Page: ft-ada-plugin
+"------------------------------------------------------------------------------
+" Provides mapping overrides for tag jumping that figure out the current
+" Ada object and tag jump to that, not the 'simple' vim word.
+" Similarly allows <Ctrl-N> matching of full-length ada entities from tags.
+"------------------------------------------------------------------------------
+
+" Only do this when not done yet for this buffer
+if exists ("b:did_ftplugin") || version < 700
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 45
+
+"
+" Temporarily set cpoptions to ensure the script loads OK
+"
+let s:cpoptions = &cpoptions
+set cpoptions-=C
+
+" Section: Comments {{{1
+"
+setlocal comments=O:--,:--\ \
+setlocal commentstring=--\ \ %s
+setlocal complete=.,w,b,u,t,i
+
+" Section: case {{{1
+"
+setlocal nosmartcase
+setlocal ignorecase
+
+" Section: formatoptions {{{1
+"
+setlocal formatoptions+=ron
+
+" Section: Tagging {{{1
+"
+if exists ("g:ada_extended_tagging")
+ " Make local tag mappings for this buffer (if not already set)
+ if g:ada_extended_tagging == 'jump'
+ if mapcheck('<C-]>','n') == ''
+ nnoremap <unique> <buffer> <C-]> :call ada#Jump_Tag ('', 'tjump')<cr>
+ endif
+ if mapcheck('g<C-]>','n') == ''
+ nnoremap <unique> <buffer> g<C-]> :call ada#Jump_Tag ('','stjump')<cr>
+ endif
+ elseif g:ada_extended_tagging == 'list'
+ if mapcheck('<C-]>','n') == ''
+ nnoremap <unique> <buffer> <C-]> :call ada#List_Tag ()<cr>
+ endif
+ if mapcheck('g<C-]>','n') == ''
+ nnoremap <unique> <buffer> g<C-]> :call ada#List_Tag ()<cr>
+ endif
+ endif
+endif
+
+" Section: Completion {{{1
+"
+setlocal completefunc=ada#User_Complete
+setlocal omnifunc=adacomplete#Complete
+
+if exists ("g:ada_extended_completion")
+ if mapcheck ('<C-N>','i') == ''
+ inoremap <unique> <buffer> <C-N> <C-R>=ada#Completion("\<lt>C-N>")<cr>
+ endif
+ if mapcheck ('<C-P>','i') == ''
+ inoremap <unique> <buffer> <C-P> <C-R>=ada#Completion("\<lt>C-P>")<cr>
+ endif
+ if mapcheck ('<C-X><C-]>','i') == ''
+ inoremap <unique> <buffer> <C-X><C-]> <C-R>=<SID>ada#Completion("\<lt>C-X>\<lt>C-]>")<cr>
+ endif
+ if mapcheck ('<bs>','i') == ''
+ inoremap <silent> <unique> <buffer> <bs> <C-R>=ada#Insert_Backspace ()<cr>
+ endif
+endif
+
+" Section: Matchit {{{1
+"
+" Only do this when not done yet for this buffer & matchit is used
+"
+if !exists ("b:match_words") &&
+ \ exists ("loaded_matchit")
+ "
+ " The following lines enable the macros/matchit.vim plugin for
+ " Ada-specific extended matching with the % key.
+ "
+ let s:notend = '\%(\<end\s\+\)\@<!'
+ let b:match_words =
+ \ s:notend . '\<if\>:\<elsif\>:\<else\>:\<end\>\s\+\<if\>,' .
+ \ s:notend . '\<case\>:\<when\>:\<end\>\s\+\<case\>,' .
+ \ '\%(\<while\>.*\|\<for\>.*\|'.s:notend.'\)\<loop\>:\<end\>\s\+\<loop\>,' .
+ \ '\%(\<do\>\|\<begin\>\):\<exception\>:\<end\>\s*\%($\|[;A-Z]\),' .
+ \ s:notend . '\<record\>:\<end\>\s\+\<record\>'
+endif
+
+
+" Section: Compiler {{{1
+"
+if ! exists("g:ada_default_compiler")
+ if has("vms")
+ let g:ada_default_compiler = 'decada'
+ else
+ let g:ada_default_compiler = 'gnat'
+ endif
+endif
+
+if ! exists("current_compiler") ||
+ \ current_compiler != g:ada_default_compiler
+ execute "compiler " . g:ada_default_compiler
+endif
+
+" Section: Folding {{{1
+"
+if exists("g:ada_folding")
+ if g:ada_folding[0] == 'i'
+ setlocal foldmethod=indent
+ setlocal foldignore=--
+ setlocal foldnestmax=5
+ elseif g:ada_folding[0] == 'g'
+ setlocal foldmethod=expr
+ setlocal foldexpr=ada#Pretty_Print_Folding(v:lnum)
+ elseif g:ada_folding[0] == 's'
+ setlocal foldmethod=syntax
+ endif
+ setlocal tabstop=8
+ setlocal softtabstop=3
+ setlocal shiftwidth=3
+endif
+
+" Section: Abbrev {{{1
+"
+if exists("g:ada_abbrev")
+ iabbrev ret return
+ iabbrev proc procedure
+ iabbrev pack package
+ iabbrev func function
+endif
+
+" Section: Commands, Mapping, Menus {{{1
+if !exists(':AdaTagFile')
+ call ada#Map_Popup (
+ \ 'Tag.List',
+ \ 'l',
+ \ 'call ada#List_Tag ()')
+ call ada#Map_Popup (
+ \'Tag.Jump',
+ \'j',
+ \'call ada#Jump_Tag ()')
+ call ada#Map_Menu (
+ \'Tag.Create File',
+ \':AdaTagFile',
+ \'call ada#Create_Tags (''file'')')
+ call ada#Map_Menu (
+ \'Tag.Create Dir',
+ \':AdaTagDir',
+ \'call ada#Create_Tags (''dir'')')
+
+ call ada#Map_Menu (
+ \'Highlight.Toggle Space Errors',
+ \ ':AdaSpaces',
+ \'call ada#Switch_Syntax_Option (''space_errors'')')
+ call ada#Map_Menu (
+ \'Highlight.Toggle Lines Errors',
+ \ ':AdaLines',
+ \'call ada#Switch_Syntax_Option (''line_errors'')')
+ call ada#Map_Menu (
+ \'Highlight.Toggle Rainbow Color',
+ \ ':AdaRainbow',
+ \'call ada#Switch_Syntax_Option (''rainbow_color'')')
+ call ada#Map_Menu (
+ \'Highlight.Toggle Standard Types',
+ \ ':AdaTypes',
+ \'call ada#Switch_Syntax_Option (''standard_types'')')
+endif
+
+" 1}}}
+" Reset cpoptions
+let &cpoptions = s:cpoptions
+unlet s:cpoptions
+
+finish " 1}}}
+
+"------------------------------------------------------------------------------
+" Copyright (C) 2006 Martin Krischik
+"
+" Vim is Charityware - see ":help license" or uganda.txt for licence details.
+"------------------------------------------------------------------------------
+" vim: textwidth=78 nowrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
+" vim: foldmethod=marker
diff --git a/runtime/ftplugin/alsaconf.vim b/runtime/ftplugin/alsaconf.vim
new file mode 100644
index 0000000..6d9d80a
--- /dev/null
+++ b/runtime/ftplugin/alsaconf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: alsaconf(8) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/ant.vim b/runtime/ftplugin/ant.vim
new file mode 100644
index 0000000..5905858
--- /dev/null
+++ b/runtime/ftplugin/ant.vim
@@ -0,0 +1,44 @@
+" Vim filetype plugin file
+" Language: ant
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show Ant-related files.
+if has("gui_win32")
+ let b:browsefilter = "Build Files (build.xml)\tbuild.xml\n" .
+ \ "Java Files (*.java)\t*.java\n" .
+ \ "Properties Files (*.prop*)\t*.prop*\n" .
+ \ "Manifest Files (*.mf)\t*.mf\n" .
+ \ s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/arch.vim b/runtime/ftplugin/arch.vim
new file mode 100644
index 0000000..1c697b8
--- /dev/null
+++ b/runtime/ftplugin/arch.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: GNU Arch inventory file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/art.vim b/runtime/ftplugin/art.vim
new file mode 100644
index 0000000..c501a99
--- /dev/null
+++ b/runtime/ftplugin/art.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin
+" Language: ART-IM and ART*Enterprise
+" Maintainer: Dorai Sitaram <ds26@gte.com>
+" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: Apr 2, 2003
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+run ftplugin/lisp.vim
+
+setl lw-=if
+setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,for,schema,while
diff --git a/runtime/ftplugin/asm.vim b/runtime/ftplugin/asm.vim
new file mode 100644
index 0000000..0914bf6
--- /dev/null
+++ b/runtime/ftplugin/asm.vim
@@ -0,0 +1,11 @@
+" Vim filetype plugin file
+" Language: asm
+" Maintainer: Colin Caine <cmcaine at the common googlemail domain>
+" Last Changed: 23 May 2020
+
+if exists("b:did_ftplugin") | finish | endif
+
+setl comments=:;,s1:/*,mb:*,ex:*/,://
+setl commentstring=;%s
+
+let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/aspvbs.vim b/runtime/ftplugin/aspvbs.vim
new file mode 100644
index 0000000..660dab4
--- /dev/null
+++ b/runtime/ftplugin/aspvbs.vim
@@ -0,0 +1,60 @@
+" Vim filetype plugin file
+" Language: aspvbs
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "HTML Files (*.html, *.htm)\t*.htm*\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+endif
+
+" ASP: Active Server Pages (with Visual Basic Script)
+" thanks to Gontran BAERTS
+if exists("loaded_matchit")
+ let s:notend = '\%(\<end\s\+\)\@<!'
+ let b:match_ignorecase = 1
+ let b:match_words =
+ \ s:notend . '\<if\>\%(.\{-}then\s\+\w\)\@!:\<elseif\>:^\s*\<else\>:\<end\s\+\<if\>,' .
+ \ s:notend . '\<select\s\+case\>:\<case\>:\<case\s\+else\>:\<end\s\+select\>,' .
+ \ '^\s*\<sub\>:\<end\s\+sub\>,' .
+ \ '^\s*\<function\>:\<end\s\+function\>,' .
+ \ '\<class\>:\<end\s\+class\>,' .
+ \ '^\s*\<do\>:\<loop\>,' .
+ \ '^\s*\<for\>:\<next\>,' .
+ \ '\<while\>:\<wend\>,' .
+ \ s:match_words
+endif
+
+" Change the :browse e filter to primarily show ASP-related files.
+if has("gui_win32")
+ let b:browsefilter="ASP Files (*.asp)\t*.asp\n" . s:browsefilter
+endif
+
+let b:undo_ftplugin = "unlet! b:match_words b:match_ignorecase b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/automake.vim b/runtime/ftplugin/automake.vim
new file mode 100644
index 0000000..9f981a7
--- /dev/null
+++ b/runtime/ftplugin/automake.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: Automake
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+runtime! ftplugin/make.vim ftplugin/make_*.vim ftplugin/make/*.vim
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/awk.vim b/runtime/ftplugin/awk.vim
new file mode 100644
index 0000000..1bca3ad
--- /dev/null
+++ b/runtime/ftplugin/awk.vim
@@ -0,0 +1,56 @@
+" Vim filetype plugin
+" Language: awk, nawk, gawk, mawk
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer: Antonio Colombo <azc100@gmail.com>
+" Last Change: 2020 Sep 28
+
+" This plugin was prepared by Mark Sikora
+" This plugin was updated as proposed by Doug Kearns
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:#
+setlocal commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+setlocal define=function
+setlocal suffixesadd+=.awk
+
+let b:undo_ftplugin = "setl fo< com< cms< def< sua<" .
+ \ " | unlet! b:browsefilter"
+
+" TODO: set this in scripts.vim?
+if exists("g:awk_is_gawk")
+ setlocal include=@include
+ setlocal suffixesadd+=.gawk
+ if has("unix") || has("win32unix")
+ setlocal formatprg=gawk\ -f-\ -o/dev/stdout
+ let b:undo_ftplugin .= " | setl fp<"
+ endif
+
+ let path = system("gawk 'BEGIN { printf ENVIRON[\"AWKPATH\"] }'")
+ let path = substitute(path, '^\.\=:\|:\.\=$\|:\.\=:', ',,', 'g') " POSIX cwd
+ let path = substitute(path, ':', ',', 'g')
+
+ let &l:path = path
+ let b:undo_ftplugin .= " | setl inc< path<"
+endif
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "Awk Source Files (*.awk,*.gawk)\t*.awk;*.gawk\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8
diff --git a/runtime/ftplugin/bash.vim b/runtime/ftplugin/bash.vim
new file mode 100644
index 0000000..7bd9787
--- /dev/null
+++ b/runtime/ftplugin/bash.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: bash
+" Maintainer: Bram Moolenaar
+" Last Changed: 2019 Jan 12
+"
+" This is not a real filetype plugin. It allows for someone to set 'filetype'
+" to "bash" in the modeline, and gets the effect of filetype "sh" with
+" b:is_bash set. Idea from Mahmode Al-Qudsi.
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+unlet! b:is_sh
+unlet! b:is_kornshell
+let b:is_bash = 1
+
+runtime! ftplugin/sh.vim ftplugin/sh_*.vim ftplugin/sh/*.vim
+
+" vim: ts=8
diff --git a/runtime/ftplugin/basic.vim b/runtime/ftplugin/basic.vim
new file mode 100644
index 0000000..c6ec254
--- /dev/null
+++ b/runtime/ftplugin/basic.vim
@@ -0,0 +1,27 @@
+" Vim filetype plugin file
+" Language: BASIC
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2015 Jan 10
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:REM,:'
+setlocal commentstring='\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl fo< com< cms< sua<" .
+ \ " | unlet! b:browsefilter"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/bdf.vim b/runtime/ftplugin/bdf.vim
new file mode 100644
index 0000000..85b7b40
--- /dev/null
+++ b/runtime/ftplugin/bdf.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: BDF font definition
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=b:COMMENT commentstring=COMMENT\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/bst.vim b/runtime/ftplugin/bst.vim
new file mode 100644
index 0000000..5e65aac
--- /dev/null
+++ b/runtime/ftplugin/bst.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin file
+" Language: bst
+" Author: Tim Pope <vimNOSPAM@tpope.info>
+" $Id: bst.vim,v 1.1 2007/05/05 17:37:57 vimboss Exp $
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=%\ %s
+setlocal comments=:%
+setlocal fo-=t fo+=croql
+
+let b:undo_ftplugin = "setlocal com< cms< fo<"
diff --git a/runtime/ftplugin/btm.vim b/runtime/ftplugin/btm.vim
new file mode 100644
index 0000000..d3dc5b7
--- /dev/null
+++ b/runtime/ftplugin/btm.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: BTM
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Jul 06
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like dosbatch
+runtime! ftplugin/dosbatch.vim ftplugin/dosbatch_*.vim ftplugin/dosbatch/*.vim
diff --git a/runtime/ftplugin/bzl.vim b/runtime/ftplugin/bzl.vim
new file mode 100644
index 0000000..8ab876e
--- /dev/null
+++ b/runtime/ftplugin/bzl.vim
@@ -0,0 +1,96 @@
+" Vim filetype plugin file
+" Language: Bazel (http://bazel.io)
+" Maintainer: David Barnett (https://github.com/google/vim-ft-bzl)
+" Last Change: 2021 Jan 19
+
+""
+" @section Introduction, intro
+" Core settings for the bzl filetype, used for BUILD and *.bzl files for the
+" Bazel build system (http://bazel.io/).
+
+if exists('b:did_ftplugin')
+ finish
+endif
+
+
+" Vim 7.4.051 has opinionated settings in ftplugin/python.vim that try to force
+" PEP8 conventions on every python file, but these conflict with Google's
+" indentation guidelines. As a workaround, we explicitly source the system
+" ftplugin, but save indentation settings beforehand and restore them after.
+let s:save_expandtab = &l:expandtab
+let s:save_shiftwidth = &l:shiftwidth
+let s:save_softtabstop = &l:softtabstop
+let s:save_tabstop = &l:tabstop
+
+" NOTE: Vim versions before 7.3.511 had a ftplugin/python.vim that was broken
+" for compatible mode.
+let s:save_cpo = &cpo
+set cpo&vim
+
+" Load base python ftplugin (also defines b:did_ftplugin).
+source $VIMRUNTIME/ftplugin/python.vim
+
+" NOTE: Vim versions before 7.4.104 and later set this in ftplugin/python.vim.
+setlocal comments=b:#,fb:-
+
+" Restore pre-existing indentation settings.
+let &l:expandtab = s:save_expandtab
+let &l:shiftwidth = s:save_shiftwidth
+let &l:softtabstop = s:save_softtabstop
+let &l:tabstop = s:save_tabstop
+
+setlocal formatoptions-=t
+
+" Make gf work with imports in BUILD files.
+setlocal includeexpr=substitute(v:fname,'//','','')
+
+" Enable syntax-based folding, if specified.
+if get(g:, 'ft_bzl_fold', 0)
+ setlocal foldmethod=syntax
+ setlocal foldtext=BzlFoldText()
+endif
+
+if exists('*BzlFoldText')
+ let &cpo = s:save_cpo
+ unlet s:save_cpo
+ finish
+endif
+
+function BzlFoldText() abort
+ let l:start_num = nextnonblank(v:foldstart)
+ let l:end_num = prevnonblank(v:foldend)
+
+ if l:end_num <= l:start_num + 1
+ " If the fold is empty, don't print anything for the contents.
+ let l:content = ''
+ else
+ " Otherwise look for something matching the content regex.
+ " And if nothing matches, print an ellipsis.
+ let l:content = '...'
+ for l:line in getline(l:start_num + 1, l:end_num - 1)
+ let l:content_match = matchstr(l:line, '\m\C^\s*name = \zs.*\ze,$')
+ if !empty(l:content_match)
+ let l:content = l:content_match
+ break
+ endif
+ endfor
+ endif
+
+ " Enclose content with start and end
+ let l:start_text = getline(l:start_num)
+ let l:end_text = substitute(getline(l:end_num), '^\s*', '', '')
+ let l:text = l:start_text . ' ' . l:content . ' ' . l:end_text
+
+ " Compute the available width for the displayed text.
+ let l:width = winwidth(0) - &foldcolumn - (&number ? &numberwidth : 0)
+ let l:lines_folded = ' ' . string(1 + v:foldend - v:foldstart) . ' lines'
+
+ " Expand tabs, truncate, pad, and concatenate
+ let l:text = substitute(l:text, '\t', repeat(' ', &tabstop), 'g')
+ let l:text = strpart(l:text, 0, l:width - len(l:lines_folded))
+ let l:padding = repeat(' ', l:width - len(l:lines_folded) - len(l:text))
+ return l:text . l:padding . l:lines_folded
+endfunction
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/c.vim b/runtime/ftplugin/c.vim
new file mode 100644
index 0000000..70e54b3
--- /dev/null
+++ b/runtime/ftplugin/c.vim
@@ -0,0 +1,68 @@
+" Vim filetype plugin file
+" Language: C
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2020 Feb 01
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Using line continuation here.
+let s:cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< com< ofu< cms< def< inc< | if has('vms') | setl isk< | endif"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" These options have the right value as default, but the user may have
+" overruled that.
+setlocal commentstring& define& include&
+
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&ofu')
+ setlocal ofu=ccomplete#Complete
+endif
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" In VMS C keywords contain '$' characters.
+if has("vms")
+ setlocal iskeyword+=$
+endif
+
+" When the matchit plugin is loaded, this makes the % command skip parens and
+" braces in comments properly.
+let b:match_words = '^\s*#\s*if\(\|def\|ndef\)\>:^\s*#\s*elif\>:^\s*#\s*else\>:^\s*#\s*endif\>'
+let b:match_skip = 's:comment\|string\|character\|special'
+
+" Win32 can filter files in the browse dialog
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ if &ft == "cpp"
+ let b:browsefilter = "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
+ \ "C Header Files (*.h)\t*.h\n" .
+ \ "C Source Files (*.c)\t*.c\n" .
+ \ "All Files (*.*)\t*.*\n"
+ elseif &ft == "ch"
+ let b:browsefilter = "Ch Source Files (*.ch *.chf)\t*.ch;*.chf\n" .
+ \ "C Header Files (*.h)\t*.h\n" .
+ \ "C Source Files (*.c)\t*.c\n" .
+ \ "All Files (*.*)\t*.*\n"
+ else
+ let b:browsefilter = "C Source Files (*.c)\t*.c\n" .
+ \ "C Header Files (*.h)\t*.h\n" .
+ \ "Ch Source Files (*.ch *.chf)\t*.ch;*.chf\n" .
+ \ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
+ \ "All Files (*.*)\t*.*\n"
+ endif
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/calendar.vim b/runtime/ftplugin/calendar.vim
new file mode 100644
index 0000000..f454ba1
--- /dev/null
+++ b/runtime/ftplugin/calendar.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: calendar(1) input file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=s1:/*,mb:*,ex:*/ commentstring& include&
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/cdrdaoconf.vim b/runtime/ftplugin/cdrdaoconf.vim
new file mode 100644
index 0000000..563bb8f
--- /dev/null
+++ b/runtime/ftplugin/cdrdaoconf.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2007-12-04
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/cfg.vim b/runtime/ftplugin/cfg.vim
new file mode 100644
index 0000000..b5835ba
--- /dev/null
+++ b/runtime/ftplugin/cfg.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: Configuration File
+" Maintainer: Christian Brabandt <cb@256bit.org>
+" Latest Revision: 2018-12-24
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl cms< fo<"
+
+setlocal commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/ch.vim b/runtime/ftplugin/ch.vim
new file mode 100644
index 0000000..ed09003
--- /dev/null
+++ b/runtime/ftplugin/ch.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin file
+" Language: Ch
+" Maintainer: SoftIntegration, Inc. <info@softintegration.com>
+" URL: http://www.softintegration.com/download/vim/ftplugin/ch.vim
+" Last change: 2004 May 16
+" Created based on cpp.vim
+"
+" Ch is a C/C++ interpreter with many high level extensions
+"
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like C
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
diff --git a/runtime/ftplugin/changelog.vim b/runtime/ftplugin/changelog.vim
new file mode 100644
index 0000000..257e9cd
--- /dev/null
+++ b/runtime/ftplugin/changelog.vim
@@ -0,0 +1,301 @@
+" Vim filetype plugin file
+" Language: generic Changelog file
+" Maintainer: Martin Florian <marfl@posteo.de>
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2015-10-25
+" Variables:
+" g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
+" description: the timeformat used in ChangeLog entries.
+" default: "%Y-%m-%d".
+" g:changelog_dateformat -
+" description: the format sent to strftime() to generate a date string.
+" default: "%Y-%m-%d".
+" g:changelog_username -
+" description: the username to use in ChangeLog entries
+" default: try to deduce it from environment variables and system files.
+" Local Mappings:
+" <Leader>o -
+" adds a new changelog entry for the current user for the current date.
+" Global Mappings:
+" <Leader>o -
+" switches to the ChangeLog buffer opened for the current directory, or
+" opens it in a new buffer if it exists in the current directory. Then
+" it does the same as the local <Leader>o described above.
+" Notes:
+" run 'runtime ftplugin/changelog.vim' to enable the global mapping for
+" changelog files.
+" TODO:
+" should we perhaps open the ChangeLog file even if it doesn't exist already?
+" Problem is that you might end up with ChangeLog files all over the place.
+
+" If 'filetype' isn't "changelog", we must have been to add ChangeLog opener
+if &filetype == 'changelog'
+ if exists('b:did_ftplugin')
+ finish
+ endif
+ let b:did_ftplugin = 1
+
+ let s:cpo_save = &cpo
+ set cpo&vim
+
+ " Set up the format used for dates.
+ if !exists('g:changelog_dateformat')
+ if exists('g:changelog_timeformat')
+ let g:changelog_dateformat = g:changelog_timeformat
+ else
+ let g:changelog_dateformat = "%Y-%m-%d"
+ endif
+ endif
+
+ function! s:username()
+ if exists('g:changelog_username')
+ return g:changelog_username
+ elseif $EMAIL != ""
+ return $EMAIL
+ elseif $EMAIL_ADDRESS != ""
+ return $EMAIL_ADDRESS
+ endif
+
+ let login = s:login()
+ return printf('%s <%s@%s>', s:name(login), login, s:hostname())
+ endfunction
+
+ function! s:login()
+ return s:trimmed_system_with_default('whoami', 'unknown')
+ endfunction
+
+ function! s:trimmed_system_with_default(command, default)
+ return s:first_line(s:system_with_default(a:command, a:default))
+ endfunction
+
+ function! s:system_with_default(command, default)
+ let output = system(a:command)
+ if v:shell_error
+ return default
+ endif
+ return output
+ endfunction
+
+ function! s:first_line(string)
+ return substitute(a:string, '\n.*$', "", "")
+ endfunction
+
+ function! s:name(login)
+ for name in [s:gecos_name(a:login), $NAME, s:capitalize(a:login)]
+ if name != ""
+ return name
+ endif
+ endfor
+ endfunction
+
+ function! s:gecos_name(login)
+ for line in s:try_reading_file('/etc/passwd')
+ if line =~ '^' . a:login . ':'
+ return substitute(s:passwd_field(line, 5), '&', s:capitalize(a:login), "")
+ endif
+ endfor
+ return ""
+ endfunction
+
+ function! s:try_reading_file(path)
+ try
+ return readfile(a:path)
+ catch
+ return []
+ endtry
+ endfunction
+
+ function! s:passwd_field(line, field)
+ let fields = split(a:line, ':', 1)
+ if len(fields) < a:field
+ return ""
+ endif
+ return fields[a:field - 1]
+ endfunction
+
+ function! s:capitalize(word)
+ return toupper(a:word[0]) . strpart(a:word, 1)
+ endfunction
+
+ function! s:hostname()
+ return s:trimmed_system_with_default('hostname', 'localhost')
+ endfunction
+
+ " Format used for new date entries.
+ if !exists('g:changelog_new_date_format')
+ let g:changelog_new_date_format = "%d %u\n\n\t* %p%c\n\n"
+ endif
+
+ " Format used for new entries to current date entry.
+ if !exists('g:changelog_new_entry_format')
+ let g:changelog_new_entry_format = "\t* %p%c"
+ endif
+
+ " Regular expression used to find a given date entry.
+ if !exists('g:changelog_date_entry_search')
+ let g:changelog_date_entry_search = '^\s*%d\_s*%u'
+ endif
+
+ " Regular expression used to find the end of a date entry
+ if !exists('g:changelog_date_end_entry_search')
+ let g:changelog_date_end_entry_search = '^\s*$'
+ endif
+
+
+ " Substitutes specific items in new date-entry formats and search strings.
+ " Can be done with substitute of course, but unclean, and need \@! then.
+ function! s:substitute_items(str, date, user, prefix)
+ let str = a:str
+ let middles = {'%': '%', 'd': a:date, 'u': a:user, 'p': a:prefix, 'c': '{cursor}'}
+ let i = stridx(str, '%')
+ while i != -1
+ let inc = 0
+ if has_key(middles, str[i + 1])
+ let mid = middles[str[i + 1]]
+ let str = strpart(str, 0, i) . mid . strpart(str, i + 2)
+ let inc = strlen(mid) - 1
+ endif
+ let i = stridx(str, '%', i + 1 + inc)
+ endwhile
+ return str
+ endfunction
+
+ " Position the cursor once we've done all the funky substitution.
+ function! s:position_cursor()
+ if search('{cursor}') > 0
+ let lnum = line('.')
+ let line = getline(lnum)
+ let cursor = stridx(line, '{cursor}')
+ call setline(lnum, substitute(line, '{cursor}', '', ''))
+ endif
+ startinsert
+ endfunction
+
+ " Internal function to create a new entry in the ChangeLog.
+ function! s:new_changelog_entry(prefix)
+ " Deal with 'paste' option.
+ let save_paste = &paste
+ let &paste = 1
+ call cursor(1, 1)
+ " Look for an entry for today by our user.
+ let date = strftime(g:changelog_dateformat)
+ let search = s:substitute_items(g:changelog_date_entry_search, date,
+ \ s:username(), a:prefix)
+ if search(search) > 0
+ " Ok, now we look for the end of the date entry, and add an entry.
+ call cursor(nextnonblank(line('.') + 1), 1)
+ if search(g:changelog_date_end_entry_search, 'W') > 0
+ let p = (line('.') == line('$')) ? line('.') : line('.') - 1
+ else
+ let p = line('.')
+ endif
+ let ls = split(s:substitute_items(g:changelog_new_entry_format, '', '', a:prefix),
+ \ '\n')
+ call append(p, ls)
+ call cursor(p + 1, 1)
+ else
+ " Flag for removing empty lines at end of new ChangeLogs.
+ let remove_empty = line('$') == 1
+
+ " No entry today, so create a date-user header and insert an entry.
+ let todays_entry = s:substitute_items(g:changelog_new_date_format,
+ \ date, s:username(), a:prefix)
+ " Make sure we have a cursor positioning.
+ if stridx(todays_entry, '{cursor}') == -1
+ let todays_entry = todays_entry . '{cursor}'
+ endif
+
+ " Now do the work.
+ call append(0, split(todays_entry, '\n'))
+
+ " Remove empty lines at end of file.
+ if remove_empty
+ $-/^\s*$/-1,$delete
+ endif
+
+ " Reposition cursor once we're done.
+ call cursor(1, 1)
+ endif
+
+ call s:position_cursor()
+
+ " And reset 'paste' option
+ let &paste = save_paste
+ endfunction
+
+ if exists(":NewChangelogEntry") != 2
+ nnoremap <buffer> <silent> <Leader>o :<C-u>call <SID>new_changelog_entry('')<CR>
+ xnoremap <buffer> <silent> <Leader>o :<C-u>call <SID>new_changelog_entry('')<CR>
+ command! -nargs=0 NewChangelogEntry call s:new_changelog_entry('')
+ endif
+
+ let b:undo_ftplugin = "setl com< fo< et< ai<"
+
+ setlocal comments=
+ setlocal formatoptions+=t
+ setlocal noexpandtab
+ setlocal autoindent
+
+ if &textwidth == 0
+ setlocal textwidth=78
+ let b:undo_ftplugin .= " tw<"
+ endif
+
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
+else
+ let s:cpo_save = &cpo
+ set cpo&vim
+
+ " Add the Changelog opening mapping
+ nnoremap <silent> <Leader>o :call <SID>open_changelog()<CR>
+
+ function! s:open_changelog()
+ let path = expand('%:p:h')
+ if exists('b:changelog_path')
+ let changelog = b:changelog_path
+ else
+ if exists('b:changelog_name')
+ let name = b:changelog_name
+ else
+ let name = 'ChangeLog'
+ endif
+ while isdirectory(path)
+ let changelog = path . '/' . name
+ if filereadable(changelog)
+ break
+ endif
+ let parent = substitute(path, '/\+[^/]*$', "", "")
+ if path == parent
+ break
+ endif
+ let path = parent
+ endwhile
+ endif
+ if !filereadable(changelog)
+ return
+ endif
+
+ if exists('b:changelog_entry_prefix')
+ let prefix = call(b:changelog_entry_prefix, [])
+ else
+ let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "")
+ endif
+
+ let buf = bufnr(changelog)
+ if buf != -1
+ if bufwinnr(buf) != -1
+ execute bufwinnr(buf) . 'wincmd w'
+ else
+ execute 'sbuffer' buf
+ endif
+ else
+ execute 'split' fnameescape(changelog)
+ endif
+
+ call s:new_changelog_entry(prefix)
+ endfunction
+
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
+endif
diff --git a/runtime/ftplugin/chicken.vim b/runtime/ftplugin/chicken.vim
new file mode 100644
index 0000000..4dc1e57
--- /dev/null
+++ b/runtime/ftplugin/chicken.vim
@@ -0,0 +1,54 @@
+" CHICKEN-specific Vim customizations
+" Last Change: 2018-03-05
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
+" URL: https://foldling.org/vim/ftplugin/chicken.vim
+" Notes: These are supplemental settings, to be loaded after the core
+" Scheme ftplugin file (ftplugin/scheme.vim). Enable it by setting
+" b:is_chicken=1 and filetype=scheme.
+
+if !exists('b:did_scheme_ftplugin')
+ finish
+endif
+
+setl keywordprg=chicken-doc
+
+setl lispwords+=and-let*
+setl lispwords+=compiler-typecase
+setl lispwords+=condition-case
+setl lispwords+=define-compiler-syntax
+setl lispwords+=define-constant
+setl lispwords+=define-external
+setl lispwords+=define-for-syntax
+setl lispwords+=define-foreign-type
+setl lispwords+=define-inline
+setl lispwords+=define-location
+setl lispwords+=define-record
+setl lispwords+=define-record-printer
+setl lispwords+=define-specialization
+setl lispwords+=fluid-let
+setl lispwords+=foreign-lambda*
+setl lispwords+=foreign-primitive
+setl lispwords+=foreign-safe-lambda*
+setl lispwords+=functor
+setl lispwords+=handle-exceptions
+setl lispwords+=let-compiler-syntax
+setl lispwords+=let-location
+setl lispwords+=let-optionals
+setl lispwords+=let-optionals*
+setl lispwords+=letrec-values
+setl lispwords+=match
+setl lispwords+=match-let
+setl lispwords+=match-let*
+setl lispwords+=match-letrec
+setl lispwords+=module
+setl lispwords+=receive
+setl lispwords+=set!-values
+setl lispwords+=test-group
+
+let b:undo_ftplugin = b:undo_ftplugin . ' keywordprg<'
+
+if exists('g:loaded_matchit') && !exists('b:match_words')
+ let b:match_words = '#>:<#'
+ let b:undo_ftplugin = b:undo_ftplugin . ' | unlet! b:match_words'
+endif
diff --git a/runtime/ftplugin/clojure.vim b/runtime/ftplugin/clojure.vim
new file mode 100644
index 0000000..217711f
--- /dev/null
+++ b/runtime/ftplugin/clojure.vim
@@ -0,0 +1,95 @@
+" Vim filetype plugin file
+" Language: Clojure
+" Author: Meikel Brandmeyer <mb@kotka.de>
+"
+" Maintainer: Sung Pae <self@sungpae.com>
+" URL: https://github.com/guns/vim-clojure-static
+" License: Same as Vim
+" Last Change: 18 July 2016
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = 'setlocal iskeyword< define< formatoptions< comments< commentstring< lispwords<'
+
+setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
+
+" There will be false positives, but this is better than missing the whole set
+" of user-defined def* definitions.
+setlocal define=\\v[(/]def(ault)@!\\S*
+
+" Remove 't' from 'formatoptions' to avoid auto-wrapping code.
+setlocal formatoptions-=t
+
+" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
+setlocal comments=n:;
+setlocal commentstring=;\ %s
+
+" Specially indented symbols from clojure.core and clojure.test.
+"
+" Clojure symbols are indented in the defn style when they:
+"
+" * Define vars and anonymous functions
+" * Create new lexical scopes or scopes with altered environments
+" * Create conditional branches from a predicate function or value
+"
+" The arglists for these functions are generally in the form of [x & body];
+" Functions that accept a flat list of forms do not treat the first argument
+" specially and hence are not indented specially.
+"
+" -*- LISPWORDS -*-
+" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj
+setlocal lispwords=as->,binding,bound-fn,case,catch,cond->,cond->>,condp,def,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftest,deftest-,deftype,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,if-some,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,when-some,while,with-bindings,with-in-str,with-local-vars,with-open,with-precision,with-redefs,with-redefs-fn,with-test
+
+" Provide insert mode completions for special forms and clojure.core. As
+" 'omnifunc' is set by popular Clojure REPL client plugins, we also set
+" 'completefunc' so that the user has some form of completion available when
+" 'omnifunc' is set and no REPL connection exists.
+for s:setting in ['omnifunc', 'completefunc']
+ if exists('&' . s:setting) && empty(eval('&' . s:setting))
+ execute 'setlocal ' . s:setting . '=clojurecomplete#Complete'
+ let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<'
+ endif
+endfor
+
+" Take all directories of the CLOJURE_SOURCE_DIRS environment variable
+" and add them to the path option.
+"
+" This is a legacy option for VimClojure users.
+if exists('$CLOJURE_SOURCE_DIRS')
+ for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':')
+ let s:dir = fnameescape(s:dir)
+ " Whitespace escaping for Windows
+ let s:dir = substitute(s:dir, '\', '\\\\', 'g')
+ let s:dir = substitute(s:dir, '\ ', '\\ ', 'g')
+ execute "setlocal path+=" . s:dir . "/**"
+ endfor
+ let b:undo_ftplugin .= ' | setlocal path<'
+endif
+
+" Skip brackets in ignored syntax regions when using the % command
+if exists('loaded_matchit')
+ let b:match_words = &matchpairs
+ let b:match_skip = 's:comment\|string\|regex\|character'
+ let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
+endif
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
+ \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
+ \ "Java Source Files (*.java)\t*.java\n" .
+ \ "All Files (*.*)\t*.*\n"
+ let b:undo_ftplugin .= ' | unlet! b:browsefilter'
+endif
+
+let &cpo = s:cpo_save
+
+unlet! s:cpo_save s:setting s:dir
+
+" vim:sts=8:sw=8:ts=8:noet
diff --git a/runtime/ftplugin/cmake.vim b/runtime/ftplugin/cmake.vim
new file mode 100644
index 0000000..94c0076
--- /dev/null
+++ b/runtime/ftplugin/cmake.vim
@@ -0,0 +1,34 @@
+" Vim filetype plugin
+" Language: CMake
+" Maintainer: Keith Smiley <keithbsmiley@gmail.com>
+" Last Change: 2018 Aug 30
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" save 'cpo' for restoration at the end of this file
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl commentstring<"
+
+if exists('loaded_matchit')
+ let b:match_words = '\<if\>:\<elseif\>\|\<else\>:\<endif\>'
+ \ . ',\<foreach\>\|\<while\>:\<break\>:\<endforeach\>\|\<endwhile\>'
+ \ . ',\<macro\>:\<endmacro\>'
+ \ . ',\<function\>:\<endfunction\>'
+ let b:match_ignorecase = 1
+
+ let b:undo_ftplugin .= "| unlet b:match_words"
+endif
+
+setlocal commentstring=#\ %s
+
+" restore 'cpo' and clean up buffer variable
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/cobol.vim b/runtime/ftplugin/cobol.vim
new file mode 100644
index 0000000..ec1e954
--- /dev/null
+++ b/runtime/ftplugin/cobol.vim
@@ -0,0 +1,269 @@
+" Vim filetype plugin file
+" Language: cobol
+" Maintainer: Ankit Jain <ajatkj@yahoo.co.in>
+" (formerly Tim Pope <vimNOSPAM@tpope.info>)
+" Last Update: By Ankit Jain (add gtk support) on 15.08.2020
+
+" Insert mode mappings: <C-T> <C-D> <Tab>
+" Normal mode mappings: < > << >> [[ ]] [] ][
+" Visual mode mappings: < >
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal commentstring=\ \ \ \ \ \ *%s
+setlocal comments=:*
+setlocal fo+=croqlt
+setlocal expandtab
+setlocal textwidth=72
+
+" matchit support
+if exists("loaded_matchit")
+ let s:ordot = '\|\ze\.\%( \@=\|$\)'
+ let b:match_ignorecase=1
+ "let b:match_skip = 'getline(".") =~ "^.\\{6\\}[*/C]"'
+ let b:match_words=
+ \ '\$if\>:$else\>:\$endif\>,' .
+ \ '[$-]\@<!\<if\>:\<\%(then\|else\)\>:\<end-if\>'.s:ordot.',' .
+ \ '-\@<!\<perform\s\+\%(\d\+\s\+times\|until\|varying\|with\s\+test\)\>:\<end-perform\>'.s:ordot . ',' .
+ \ '-\@<!\<\%(search\|evaluate\)\>:\<\%(when\)\>:\<end-\%(search\|evaluate\)\>' .s:ordot . ',' .
+ \ '-\@<!\<\%(add\|compute\|divide\|multiply\|subtract\)\>\%(.*\(\%$\|\%(\n\%(\%(\s*\|.\{6\}\)[*/].*\n\)*\)\=\s*\%(not\s\+\)\=on\s\+size\s\+error\>\)\)\@=:\%(\<not\s\+\)\@<!\<\%(not\s\+\)\=on\s\+size\s\+error\>:\<end-\%(add\|compute\|divide\|multiply\|subtract\)\>' .s:ordot . ',' .
+ \ '-\@<!\<\%(string\|unstring\|accept\|display\|call\)\>\%(.*\(\%$\|\%(\n\%(\%(\s*\|.\{6\}\)[*/].*\n\)*\)\=\s*\%(not\s\+\)\=on\s\+\%(overflow\|exception\)\>\)\)\@=:\%(\<not\s\+\)\@<!\<\%(not\s\+\)\=on\s\+\%(overflow\|exception\)\>:\<end-\%(string\|unstring\|accept\|display\|call\)\>' .s:ordot . ',' .
+ \ '-\@<!\<\%(delete\|rewrite\|start\|write\|read\)\>\%(.*\(\%$\|\%(\n\%(\%(\s*\|.\{6\}\)[*/].*\n\)*\)\=\s*\%(invalid\s\+key\|at\s\+end\|no\s\+data\|at\s\+end-of-page\)\>\)\)\@=:\%(\<not\s\+\)\@<!\<\%(not\s\+\)\=\%(invalid\s\+key\|at\s\+end\|no\s\+data\|at\s\+end-of-page\)\>:\<end-\%(delete\|rewrite\|start\|write\|read\)\>' .s:ordot
+endif
+
+" add gtk support
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "COBOL Source Files (*.cbl, *.cob)\t*.cbl;*.cob;*.lib\n".
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setlocal com< cms< fo< et< tw<" .
+ \ " | unlet! b:browsefilter b:match_words b:match_ignorecase b:match_skip"
+if !exists("g:no_plugin_maps") && !exists("g:no_cobol_maps")
+ let b:undo_ftplugin = b:undo_ftplugin .
+ \ " | sil! exe 'nunmap <buffer> <'" .
+ \ " | sil! exe 'nunmap <buffer> >'" .
+ \ " | sil! exe 'nunmap <buffer> <<'" .
+ \ " | sil! exe 'nunmap <buffer> >>'" .
+ \ " | sil! exe 'vunmap <buffer> <'" .
+ \ " | sil! exe 'vunmap <buffer> >'" .
+ \ " | sil! exe 'iunmap <buffer> <C-D>'" .
+ \ " | sil! exe 'iunmap <buffer> <C-T>'" .
+ \ " | sil! exe 'iunmap <buffer> <Tab>'" .
+ \ " | sil! exe 'nunmap <buffer> <Plug>Traditional'" .
+ \ " | sil! exe 'nunmap <buffer> <Plug>Comment'" .
+ \ " | sil! exe 'nunmap <buffer> <Plug>DeComment'" .
+ \ " | sil! exe 'vunmap <buffer> <Plug>VisualTraditional'" .
+ \ " | sil! exe 'vunmap <buffer> <Plug>VisualComment'" .
+ \ " | sil! exe 'iunmap <buffer> <Plug>VisualDeComment'" .
+ \ " | sil! exe 'unmap <buffer> [['" .
+ \ " | sil! exe 'unmap <buffer> ]]'" .
+ \ " | sil! exe 'unmap <buffer> []'" .
+ \ " | sil! exe 'unmap <buffer> ]['"
+endif
+
+if !exists("g:no_plugin_maps") && !exists("g:no_cobol_maps")
+ if version >= 700
+ nnoremap <silent> <buffer> > :set opfunc=<SID>IncreaseFunc<CR>g@
+ nnoremap <silent> <buffer> < :set opfunc=<SID>DecreaseFunc<CR>g@
+ endif
+ nnoremap <silent> <buffer> >> :call CobolIndentBlock(1)<CR>
+ nnoremap <silent> <buffer> << :call CobolIndentBlock(-1)<CR>
+ vnoremap <silent> <buffer> > :call CobolIndentBlock(v:count1)<CR>
+ vnoremap <silent> <buffer> < :call CobolIndentBlock(-v:count1)<CR>
+ inoremap <silent> <buffer> <C-T> <C-R>=<SID>IncreaseIndent()<CR><C-R>=<SID>RestoreShiftwidth()<CR>
+ inoremap <silent> <buffer> <C-D> <C-R>=<SID>DecreaseIndent()<CR><C-R>=<SID>RestoreShiftwidth()<CR>
+ if !maparg("<Tab>","i")
+ inoremap <silent> <buffer> <Tab> <C-R>=<SID>Tab()<CR><C-R>=<SID>RestoreShiftwidth()<CR>
+ endif
+ noremap <silent> <buffer> [[ m':call search('\c^\%(\s*\<Bar>.\{6\}\s\+\)\zs[A-Za-z0-9-]\+\s\+\%(division\<Bar>section\)\s*\.','bW')<CR>
+ noremap <silent> <buffer> ]] m':call search('\c^\%(\s*\<Bar>.\{6\}\s\+\)\zs[A-Za-z0-9-]\+\s\+\%(division\<Bar>section\)\.','W')<CR>
+ noremap <silent> <buffer> [] m':call <SID>toend('b')<CR>
+ noremap <silent> <buffer> ][ m':call <SID>toend('')<CR>
+ " For EnhancedCommentify
+ noremap <silent> <buffer> <Plug>Traditional :call <SID>Comment('t')<CR>
+ noremap <silent> <buffer> <Plug>Comment :call <SID>Comment('c')<CR>
+ noremap <silent> <buffer> <Plug>DeComment :call <SID>Comment('u')<CR>
+ noremap <silent> <buffer> <Plug>VisualTraditional :'<,'>call <SID>Comment('t')<CR>
+ noremap <silent> <buffer> <Plug>VisualComment :'<,'>call <SID>Comment('c')<CR>
+ noremap <silent> <buffer> <Plug>VisualDeComment :'<,'>call <SID>Comment('u')<CR>
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+if exists("g:did_cobol_ftplugin_functions")
+ finish
+endif
+let g:did_cobol_ftplugin_functions = 1
+
+function! s:repeat(str,count)
+ let i = 0
+ let ret = ""
+ while i < a:count
+ let ret = ret . a:str
+ let i = i + 1
+ endwhile
+ return ret
+endfunction
+
+function! s:increase(...)
+ let lnum = '.'
+ let sw = shiftwidth()
+ let i = a:0 ? a:1 : indent(lnum)
+ if i >= 11
+ return sw - (i - 11) % sw
+ elseif i >= 7
+ return 11-i
+ elseif i == 6
+ return 1
+ else
+ return 6-i
+ endif
+endfunction
+
+function! s:decrease(...)
+ let lnum = '.'
+ let sw = shiftwidth()
+ let i = indent(a:0 ? a:1 : lnum)
+ if i >= 11 + sw
+ return 1 + (i + 12) % sw
+ elseif i > 11
+ return i-11
+ elseif i > 7
+ return i-7
+ elseif i == 7
+ return 1
+ else
+ return i
+ endif
+endfunction
+
+function! CobolIndentBlock(shift)
+ let head = strpart(getline('.'),0,7)
+ let tail = strpart(getline('.'),7)
+ let indent = match(tail,'[^ ]')
+ let sw = shiftwidth()
+ let shift = a:shift
+ if shift > 0
+ if indent < 4
+ let tail = s:repeat(" ",4-indent).tail
+ let shift = shift - 1
+ endif
+ let tail = s:repeat(" ",shift*sw).tail
+ let shift = 0
+ elseif shift < 0
+ if (indent-4) > -shift * sw
+ let tail = strpart(tail,-shift * sw)
+ elseif (indent-4) > (-shift-1) * sw
+ let tail = strpart(tail,indent - 4)
+ else
+ let tail = strpart(tail,indent)
+ endif
+ endif
+ call setline('.',head.tail)
+endfunction
+
+function! s:IncreaseFunc(type)
+ '[,']call CobolIndentBlock(1)
+endfunction
+
+function! s:DecreaseFunc(type)
+ '[,']call CobolIndentBlock(-1)
+endfunction
+
+function! s:IncreaseIndent()
+ let c = "\<C-T>"
+ if exists("*InsertCtrlTWrapper")
+ let key = InsertCtrlTWrapper()
+ if key != c
+ return key
+ endif
+ endif
+ let interval = s:increase()
+ let b:cobol_shiftwidth = &shiftwidth
+ let &shiftwidth = 1
+ let lastchar = strpart(getline('.'),col('.')-2,1)
+ if lastchar == '0' || lastchar == '^'
+ return "\<BS>".lastchar.c
+ else
+ return s:repeat(c,interval)
+ endif
+endfunction
+
+function! s:DecreaseIndent()
+ let c = "\<C-D>"
+ if exists("*InsertCtrlDWrapper")
+ " I hack Ctrl-D to delete when not at the end of the line.
+ let key = InsertCtrlDWrapper()
+ if key != c
+ return key
+ endif
+ endif
+ let interval = s:decrease()
+ let b:cobol_shiftwidth = &shiftwidth
+ let &shiftwidth = 1
+ return s:repeat(c,interval)
+endfunction
+
+function! s:RestoreShiftwidth()
+ if exists("b:cobol_shiftwidth")
+ let &shiftwidth=b:cobol_shiftwidth
+ unlet b:cobol_shiftwidth
+ endif
+ return ""
+endfunction
+
+function! s:Tab()
+ if (strpart(getline('.'),0,col('.')-1) =~ '^\s*$' && &sta)
+ return s:IncreaseIndent()
+ " &softtabstop < 0: &softtabstop follows &shiftwidth
+ elseif (&sts < 0 || &sts == shiftwidth()) && &sts != 8 && &et
+ return s:repeat(" ",s:increase(col('.')-1))
+ else
+ return "\<Tab>"
+ endif
+endfunction
+
+function! s:Comment(arg)
+ " For EnhancedCommentify
+ let line = getline('.')
+ if (line =~ '^.\{6\}[*/C]' || a:arg == 'c') && a:arg != 'u'
+ let line = substitute(line,'^.\{6\}\zs.',' ','')
+ else
+ let line = substitute(line,'^.\{6\}\zs.','*','')
+ endif
+ call setline('.',line)
+endfunction
+
+function! s:toend(direction)
+ let ignore = '^\(\s*\|.\{6\}\)\%([*/]\|\s*$\)'
+ let keep = line('.')
+ keepjumps +
+ while line('.') < line('$') && getline('.') =~ ignore
+ keepjumps +
+ endwhile
+ let res = search('\c^\%(\s*\|.\{6\}\s\+\)\zs[A-Za-z0-9-]\+\s\+\%(division\|section\)\s*\.',a:direction.'W')
+ if a:direction != 'b' && !res
+ let res = line('$')
+ keepjumps $
+ elseif res
+ keepjumps -
+ endif
+ if res
+ while line('.') > 1 && getline('.') =~ ignore
+ keepjumps -
+ endwhile
+ if line('.') == 1 && getline('.') =~ ignore
+ exe "keepjumps ".keep
+ endif
+ else
+ exe "keepjumps ".keep
+ endif
+endfunction
diff --git a/runtime/ftplugin/conf.vim b/runtime/ftplugin/conf.vim
new file mode 100644
index 0000000..ff2add1
--- /dev/null
+++ b/runtime/ftplugin/conf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: generic configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/config.vim b/runtime/ftplugin/config.vim
new file mode 100644
index 0000000..7fde42e
--- /dev/null
+++ b/runtime/ftplugin/config.vim
@@ -0,0 +1,42 @@
+" Vim filetype plugin file
+" Language: config
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "Bourne Shell Files (*.sh)\t*.sh\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/sh.vim ftplugin/sh_*.vim ftplugin/sh/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show configure-related files.
+if has("gui_win32")
+ let b:browsefilter="Configure Scripts (configure.*, config.*)\tconfigure*;config.*\n" .
+ \ s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . b:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/context.vim b/runtime/ftplugin/context.vim
new file mode 100644
index 0000000..10f1ae1
--- /dev/null
+++ b/runtime/ftplugin/context.vim
@@ -0,0 +1,102 @@
+" Vim filetype plugin file
+" Language: ConTeXt typesetting engine
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2016 Oct 30
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !exists('current_compiler')
+ compiler context
+endif
+
+let b:undo_ftplugin = "setl com< cms< def< inc< sua< fo< ofu<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
+
+setlocal comments=b:%D,b:%C,b:%M,:% commentstring=%\ %s formatoptions+=tjcroql2
+if get(b:, 'context_metapost', get(g:, 'context_metapost', 1))
+ setlocal omnifunc=contextcomplete#Complete
+ let g:omni_syntax_group_include_context = 'mf\w\+,mp\w\+'
+ let g:omni_syntax_group_exclude_context = 'mfTodoComment'
+endif
+
+let &l:define='\\\%([egx]\|char\|mathchar\|count\|dimen\|muskip\|skip\|toks\)\='
+ \ . 'def\|\\font\|\\\%(future\)\=let'
+ \ . '\|\\new\%(count\|dimen\|skip\|muskip\|box\|toks\|read\|write'
+ \ . '\|fam\|insert\|if\)'
+
+let &l:include = '^\s*\\\%(input\|component\|product\|project\|environment\)'
+
+setlocal suffixesadd=.tex
+
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_skip = 'r:\\\@<!\%(\\\\\)*%'
+ let b:match_words = '(:),\[:],{:},\\(:\\),\\\[:\\],' .
+ \ '\\start\(\a\+\):\\stop\1'
+endif
+
+let s:context_regex = {
+ \ 'beginsection' : '\\\%(start\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>',
+ \ 'endsection' : '\\\%(stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>',
+ \ 'beginblock' : '\\\%(start\|setup\|define\)',
+ \ 'endblock' : '\\\%(stop\|setup\|define\)'
+ \ }
+
+function! s:move_around(count, what, flags, visual)
+ if a:visual
+ exe "normal! gv"
+ endif
+ call search(s:context_regex[a:what], a:flags.'s') " 's' sets previous context mark
+ call map(range(2, a:count), 'search(s:context_regex[a:what], a:flags)')
+endfunction
+
+" Move around macros.
+nnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:false) <CR>
+vnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:false) <CR>
+vnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:true) <CR>
+
+" Other useful mappings
+if get(g:, 'context_mappings', 1)
+ let s:tp_regex = '?^$\|^\s*\\\(item\|start\|stop\|blank\|\%(sub\)*section\|chapter\|\%(sub\)*subject\|title\|part\)'
+
+ fun! s:tp()
+ call cursor(search(s:tp_regex, 'bcW') + 1, 1)
+ normal! V
+ call cursor(search(s:tp_regex, 'W') - 1, 1)
+ endf
+
+ " Reflow paragraphs with commands like gqtp ("gq TeX paragraph")
+ onoremap <silent><buffer> tp :<c-u>call <sid>tp()<cr>
+ " Select TeX paragraph
+ vnoremap <silent><buffer> tp <esc>:<c-u>call <sid>tp()<cr>
+
+ " $...$ text object
+ onoremap <silent><buffer> i$ :<c-u>normal! T$vt$<cr>
+ onoremap <silent><buffer> a$ :<c-u>normal! F$vf$<cr>
+ vnoremap <buffer> i$ T$ot$
+ vnoremap <buffer> a$ F$of$
+endif
+
+" Commands for asynchronous typesetting
+command! -buffer -nargs=? -complete=file ConTeXt call context#typeset(<q-args>)
+command! -nargs=0 ConTeXtJobStatus call context#job_status()
+command! -nargs=0 ConTeXtStopJobs call context#stop_jobs()
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/cpp.vim b/runtime/ftplugin/cpp.vim
new file mode 100644
index 0000000..f9d31cb
--- /dev/null
+++ b/runtime/ftplugin/cpp.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin file
+" Language: C++
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2020 Jul 26
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves mostly just like C
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
+
+" C++ uses templates with <things>
+" Disabled, because it gives an error for typing an unmatched ">".
+" set matchpairs+=<:>
+" let b:undo_ftplugin ..= ' | setl matchpairs<'
diff --git a/runtime/ftplugin/crm.vim b/runtime/ftplugin/crm.vim
new file mode 100644
index 0000000..06baee8
--- /dev/null
+++ b/runtime/ftplugin/crm.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: CRM114
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/cs.vim b/runtime/ftplugin/cs.vim
new file mode 100644
index 0000000..7c2cbda
--- /dev/null
+++ b/runtime/ftplugin/cs.vim
@@ -0,0 +1,29 @@
+" Vim filetype plugin file
+" Language: C#
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 09 Mar 2004 14:09:33 CET
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "C# Source Files (*.cs)\t*.cs\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/ftplugin/csc.vim b/runtime/ftplugin/csc.vim
new file mode 100644
index 0000000..3a09c3b
--- /dev/null
+++ b/runtime/ftplugin/csc.vim
@@ -0,0 +1,27 @@
+" Vim filetype plugin file
+" Language: csc
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+if exists("loaded_matchit")
+ let b:match_words=
+ \ '\<fix\>:\<endfix\>,' .
+ \ '\<if\>:\<else\%(if\)\=\>:\<endif\>,' .
+ \ '\<!loopondimensions\>\|\<!looponselected\>:\<!endloop\>'
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:match_words"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/csh.vim b/runtime/ftplugin/csh.vim
new file mode 100644
index 0000000..4ae09f9
--- /dev/null
+++ b/runtime/ftplugin/csh.vim
@@ -0,0 +1,48 @@
+" Vim filetype plugin file
+" Language: csh
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=#%s
+setlocal formatoptions-=t
+setlocal formatoptions+=crql
+
+" Csh: thanks to Johannes Zellner
+" - Both foreach and end must appear alone on separate lines.
+" - The words else and endif must appear at the beginning of input lines;
+" the if must appear alone on its input line or after an else.
+" - Each case label and the default label must appear at the start of a
+" line.
+" - while and end must appear alone on their input lines.
+if exists("loaded_matchit")
+ let b:match_words =
+ \ '^\s*\<if\>.*(.*).*\<then\>:'.
+ \ '^\s*\<else\>\s\+\<if\>.*(.*).*\<then\>:^\s*\<else\>:'.
+ \ '^\s*\<endif\>,'.
+ \ '\%(^\s*\<foreach\>\s\+\S\+\|^s*\<while\>\).*(.*):'.
+ \ '\<break\>:\<continue\>:^\s*\<end\>,'.
+ \ '^\s*\<switch\>.*(.*):^\s*\<case\>\s\+:^\s*\<default\>:^\s*\<endsw\>'
+endif
+
+" Change the :browse e filter to primarily show csh-related files.
+if has("gui_win32")
+ let b:browsefilter="csh Scripts (*.csh)\t*.csh\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring< formatoptions<" .
+ \ " | unlet! b:match_words b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/css.vim b/runtime/ftplugin/css.vim
new file mode 100644
index 0000000..ece2def
--- /dev/null
+++ b/runtime/ftplugin/css.vim
@@ -0,0 +1,25 @@
+" Vim filetype plugin file
+" Language: CSS
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Last Change: 2020 Dec 21
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo< ofu< isk<"
+
+setlocal comments=s1:/*,mb:*,ex:*/ commentstring&
+setlocal formatoptions-=t formatoptions+=croql
+setlocal omnifunc=csscomplete#CompleteCSS
+setlocal iskeyword+=-
+
+let &l:include = '^\s*@import\s\+\%(url(\)\='
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/cucumber.vim b/runtime/ftplugin/cucumber.vim
new file mode 100644
index 0000000..f4848d1
--- /dev/null
+++ b/runtime/ftplugin/cucumber.vim
@@ -0,0 +1,150 @@
+" Vim filetype plugin
+" Language: Cucumber
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2016 Aug 29
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:keepcpo= &cpo
+set cpo&vim
+
+setlocal formatoptions-=t formatoptions+=croql
+setlocal comments=:# commentstring=#\ %s
+setlocal omnifunc=CucumberComplete
+
+let b:undo_ftplugin = "setl fo< com< cms< ofu<"
+
+let b:cucumber_root = expand('%:p:h:s?.*[\/]\%(features\|stories\)\zs[\/].*??')
+if !exists("b:cucumber_steps_glob")
+ let b:cucumber_steps_glob = b:cucumber_root.'/**/*.rb'
+endif
+
+if !exists("g:no_plugin_maps") && !exists("g:no_cucumber_maps")
+ cnoremap <SID>foldopen <Bar>if &foldopen =~# 'tag'<Bar>exe 'norm! zv'<Bar>endif
+ nnoremap <silent> <script> <buffer> [<C-D> :<C-U>exe <SID>jump('edit',v:count)<SID>foldopen<CR>
+ nnoremap <silent> <script> <buffer> ]<C-D> :<C-U>exe <SID>jump('edit',v:count)<SID>foldopen<CR>
+ nnoremap <silent> <script> <buffer> <C-W>d :<C-U>exe <SID>jump('split',v:count)<SID>foldopen<CR>
+ nnoremap <silent> <script> <buffer> <C-W><C-D> :<C-U>exe <SID>jump('split',v:count)<SID>foldopen<CR>
+ nnoremap <silent> <script> <buffer> [d :<C-U>exe <SID>jump('pedit',v:count)<CR>
+ nnoremap <silent> <script> <buffer> ]d :<C-U>exe <SID>jump('pedit',v:count)<CR>
+ let b:undo_ftplugin .=
+ \ "|sil! nunmap <buffer> [<C-D>" .
+ \ "|sil! nunmap <buffer> ]<C-D>" .
+ \ "|sil! nunmap <buffer> <C-W>d" .
+ \ "|sil! nunmap <buffer> <C-W><C-D>" .
+ \ "|sil! nunmap <buffer> [d" .
+ \ "|sil! nunmap <buffer> ]d"
+endif
+
+function! s:jump(command,count)
+ let steps = s:steps('.')
+ if len(steps) == 0 || len(steps) < a:count
+ return 'echoerr "No matching step found"'
+ elseif len(steps) > 1 && !a:count
+ return 'echoerr "Multiple matching steps found"'
+ else
+ let c = a:count ? a:count-1 : 0
+ return a:command.' +'.steps[c][1].' '.escape(steps[c][0],' %#')
+ endif
+endfunction
+
+function! s:allsteps()
+ let step_pattern = '\C^\s*\K\k*\>\s*(\=\s*\zs\S.\{-\}\ze\s*)\=\s*\%(do\|{\)\s*\%(|[^|]*|\s*\)\=\%($\|#\)'
+ let steps = []
+ for file in split(glob(b:cucumber_steps_glob),"\n")
+ let lines = readfile(file)
+ let num = 0
+ for line in lines
+ let num += 1
+ if line =~ step_pattern
+ let type = matchstr(line,'\w\+')
+ let steps += [[file,num,type,matchstr(line,step_pattern)]]
+ endif
+ endfor
+ endfor
+ return steps
+endfunction
+
+function! s:steps(lnum)
+ let c = match(getline(a:lnum), '\S') + 1
+ while synIDattr(synID(a:lnum,c,1),'name') !~# '^$\|Region$'
+ let c = c + 1
+ endwhile
+ let step = matchstr(getline(a:lnum)[c-1 : -1],'^\s*\zs.\{-\}\ze\s*$')
+ return filter(s:allsteps(),'s:stepmatch(v:val[3],step)')
+endfunction
+
+function! s:stepmatch(receiver,target)
+ if a:receiver =~ '^[''"].*[''"]$'
+ let pattern = '^'.escape(substitute(a:receiver[1:-2],'$\w\+','(.*)','g'),'/').'$'
+ elseif a:receiver =~ '^/.*/$'
+ let pattern = a:receiver[1:-2]
+ elseif a:receiver =~ '^%r..*.$'
+ let pattern = escape(a:receiver[3:-2],'/')
+ else
+ return 0
+ endif
+ try
+ let vimpattern = substitute(substitute(pattern,'\\\@<!(?:','%(','g'),'\\\@<!\*?','{-}','g')
+ if a:target =~# '\v'.vimpattern
+ return 1
+ endif
+ catch
+ endtry
+ if has("ruby") && pattern !~ '\\\@<!#{'
+ ruby VIM.command("return #{if (begin; Kernel.eval('/'+VIM.evaluate('pattern')+'/'); rescue SyntaxError; end) === VIM.evaluate('a:target') then 1 else 0 end}")
+ else
+ return 0
+ endif
+endfunction
+
+function! s:bsub(target,pattern,replacement)
+ return substitute(a:target,'\C\\\@<!'.a:pattern,a:replacement,'g')
+endfunction
+
+function! CucumberComplete(findstart,base) abort
+ let indent = indent('.')
+ let group = synIDattr(synID(line('.'),indent+1,1),'name')
+ let type = matchstr(group,'\Ccucumber\zs\%(Given\|When\|Then\)')
+ let e = matchend(getline('.'),'^\s*\S\+\s')
+ if type == '' || col('.') < col('$') || e < 0
+ return -1
+ endif
+ if a:findstart
+ return e
+ endif
+ let steps = []
+ for step in s:allsteps()
+ if step[2] ==# type
+ if step[3] =~ '^[''"]'
+ let steps += [step[3][1:-2]]
+ elseif step[3] =~ '^/\^.*\$/$'
+ let pattern = step[3][2:-3]
+ let pattern = substitute(pattern,'\C^(?:|I )','I ','')
+ let pattern = s:bsub(pattern,'\\[Sw]','w')
+ let pattern = s:bsub(pattern,'\\d','1')
+ let pattern = s:bsub(pattern,'\\[sWD]',' ')
+ let pattern = s:bsub(pattern,'\[\^\\\="\]','_')
+ let pattern = s:bsub(pattern,'[[:alnum:]. _-][?*]?\=','')
+ let pattern = s:bsub(pattern,'\[\([^^]\).\{-\}\]','\1')
+ let pattern = s:bsub(pattern,'+?\=','')
+ let pattern = s:bsub(pattern,'(\([[:alnum:]. -]\{-\}\))','\1')
+ let pattern = s:bsub(pattern,'\\\([[:punct:]]\)','\1')
+ if pattern !~ '[\\()*?]'
+ let steps += [pattern]
+ endif
+ endif
+ endif
+ endfor
+ call filter(steps,'strpart(v:val,0,strlen(a:base)) ==# a:base')
+ return sort(steps)
+endfunction
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+" vim:set sts=2 sw=2:
diff --git a/runtime/ftplugin/cvsrc.vim b/runtime/ftplugin/cvsrc.vim
new file mode 100644
index 0000000..34b1484
--- /dev/null
+++ b/runtime/ftplugin/cvsrc.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: cvs(1) RC file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments= commentstring= formatoptions-=tcroql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/debchangelog.vim b/runtime/ftplugin/debchangelog.vim
new file mode 100644
index 0000000..a78f781
--- /dev/null
+++ b/runtime/ftplugin/debchangelog.vim
@@ -0,0 +1,383 @@
+" Vim filetype plugin file (GUI menu, folding and completion)
+" Language: Debian Changelog
+" Maintainer: Debian Vim Maintainers
+" Former Maintainers: Michael Piefel <piefel@informatik.hu-berlin.de>
+" Stefano Zacchiroli <zack@debian.org>
+" Last Change: 2018-01-28
+" License: Vim License
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debchangelog.vim
+
+" Bug completion requires apt-listbugs installed for Debian packages or
+" python-launchpadlib installed for Ubuntu packages
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin=1
+
+" {{{1 Local settings (do on every load)
+if exists('g:debchangelog_fold_enable')
+ setlocal foldmethod=expr
+ setlocal foldexpr=DebGetChangelogFold(v:lnum)
+ setlocal foldtext=DebChangelogFoldText()
+endif
+
+" Debian changelogs are not supposed to have any other text width,
+" so the user cannot override this setting
+setlocal tw=78
+setlocal comments=f:*
+
+" Clean unloading
+let b:undo_ftplugin = 'setlocal tw< comments< foldmethod< foldexpr< foldtext<'
+" }}}1
+
+if exists('g:did_changelog_ftplugin')
+ finish
+endif
+
+" Don't load another plugin (this is global)
+let g:did_changelog_ftplugin = 1
+
+" {{{1 GUI menu
+
+" Helper functions returning various data.
+" Returns full name, either from $DEBFULLNAME or debianfullname.
+" TODO Is there a way to determine name from anywhere else?
+function <SID>FullName()
+ if exists('$DEBFULLNAME')
+ return $DEBFULLNAME
+ elseif exists('g:debianfullname')
+ return g:debianfullname
+ else
+ return 'Your Name'
+ endif
+endfunction
+
+" Returns email address, from $DEBEMAIL, $EMAIL or debianemail.
+function <SID>Email()
+ if exists('$DEBEMAIL')
+ return $DEBEMAIL
+ elseif exists('$EMAIL')
+ return $EMAIL
+ elseif exists('g:debianemail')
+ return g:debianemail
+ else
+ return 'your@email.address'
+ endif
+endfunction
+
+" Returns date in RFC822 format.
+function <SID>Date()
+ let savelang = v:lc_time
+ execute 'language time C'
+ let dateandtime = strftime('%a, %d %b %Y %X %z')
+ execute 'language time ' . savelang
+ return dateandtime
+endfunction
+
+function <SID>WarnIfNotUnfinalised()
+ if match(getline('.'), ' -- [[:alpha:]][[:alnum:].]')!=-1
+ echohl WarningMsg
+ echo 'The entry has not been unfinalised before editing.'
+ echohl None
+ return 1
+ endif
+ return 0
+endfunction
+
+function <SID>Finalised()
+ let savelinenum = line('.')
+ 1
+ call search('^ -- ')
+ if match(getline('.'), ' -- [[:alpha:]][[:alnum:].]')!=-1
+ let returnvalue = 1
+ else
+ let returnvalue = 0
+ endif
+ execute savelinenum
+ return returnvalue
+endfunction
+
+" These functions implement the menus
+function NewVersion()
+ " The new entry is unfinalised and shall be changed
+ amenu disable Changelog.New\ Version
+ amenu enable Changelog.Add\ Entry
+ amenu enable Changelog.Close\ Bug
+ amenu enable Changelog.Set\ Distribution
+ amenu enable Changelog.Set\ Urgency
+ amenu disable Changelog.Unfinalise
+ amenu enable Changelog.Finalise
+ call append(0, substitute(getline(1), '-\([[:digit:]]\+\))', '-$$\1)', ''))
+ call append(1, '')
+ call append(2, '')
+ call append(3, ' -- ')
+ call append(4, '')
+ call Urgency('low')
+ normal! 1G0
+ call search(')')
+ normal! h
+ normal! 
+ call setline(1, substitute(getline(1), '-\$\$', '-', ''))
+ if exists('g:debchangelog_fold_enable')
+ foldopen
+ endif
+ call AddEntry()
+endfunction
+
+function AddEntry()
+ 1
+ call search('^ -- ')
+ .-2
+ call append('.', ' * ')
+ .+3
+ let warn=<SID>WarnIfNotUnfinalised()
+ .-2
+ if warn
+ echohl MoreMsg
+ call input('Hit ENTER')
+ echohl None
+ endif
+ startinsert!
+endfunction
+
+function CloseBug()
+ 1
+ call search('^ -- ')
+ let warn=<SID>WarnIfNotUnfinalised()
+ .-2
+ call append('.', ' * (closes: #' . input('Bug number to close: ') . ')')
+ normal! j^ll
+ startinsert
+endfunction
+
+function Distribution(dist)
+ call setline(1, substitute(getline(1), ') *\%(UNRELEASED\|\l\+\);', ') ' . a:dist . ';', ''))
+endfunction
+
+function Urgency(urg)
+ call setline(1, substitute(getline(1), 'urgency=.*$', 'urgency=' . a:urg, ''))
+endfunction
+
+function <SID>UnfinaliseMenu()
+ " This means the entry shall be changed
+ amenu disable Changelog.New\ Version
+ amenu enable Changelog.Add\ Entry
+ amenu enable Changelog.Close\ Bug
+ amenu enable Changelog.Set\ Distribution
+ amenu enable Changelog.Set\ Urgency
+ amenu disable Changelog.Unfinalise
+ amenu enable Changelog.Finalise
+endfunction
+
+function Unfinalise()
+ call <SID>UnfinaliseMenu()
+ 1
+ call search('^ -- ')
+ call setline('.', ' -- ')
+endfunction
+
+function <SID>FinaliseMenu()
+ " This means the entry should not be changed anymore
+ amenu enable Changelog.New\ Version
+ amenu disable Changelog.Add\ Entry
+ amenu disable Changelog.Close\ Bug
+ amenu disable Changelog.Set\ Distribution
+ amenu disable Changelog.Set\ Urgency
+ amenu enable Changelog.Unfinalise
+ amenu disable Changelog.Finalise
+endfunction
+
+function Finalise()
+ call <SID>FinaliseMenu()
+ 1
+ call search('^ -- ')
+ call setline('.', ' -- ' . <SID>FullName() . ' <' . <SID>Email() . '> ' . <SID>Date())
+endfunction
+
+
+function <SID>MakeMenu()
+ amenu &Changelog.&New\ Version :call NewVersion()<CR>
+ amenu Changelog.&Add\ Entry :call AddEntry()<CR>
+ amenu Changelog.&Close\ Bug :call CloseBug()<CR>
+ menu Changelog.-sep- <nul>
+
+ amenu Changelog.Set\ &Distribution.&unstable :call Distribution("unstable")<CR>
+ amenu Changelog.Set\ Distribution.&frozen :call Distribution("frozen")<CR>
+ amenu Changelog.Set\ Distribution.&stable :call Distribution("stable")<CR>
+ menu Changelog.Set\ Distribution.-sep- <nul>
+ amenu Changelog.Set\ Distribution.frozen\ unstable :call Distribution("frozen unstable")<CR>
+ amenu Changelog.Set\ Distribution.stable\ unstable :call Distribution("stable unstable")<CR>
+ amenu Changelog.Set\ Distribution.stable\ frozen :call Distribution("stable frozen")<CR>
+ amenu Changelog.Set\ Distribution.stable\ frozen\ unstable :call Distribution("stable frozen unstable")<CR>
+
+ amenu Changelog.Set\ &Urgency.&low :call Urgency("low")<CR>
+ amenu Changelog.Set\ Urgency.&medium :call Urgency("medium")<CR>
+ amenu Changelog.Set\ Urgency.&high :call Urgency("high")<CR>
+
+ menu Changelog.-sep- <nul>
+ amenu Changelog.U&nfinalise :call Unfinalise()<CR>
+ amenu Changelog.&Finalise :call Finalise()<CR>
+
+ if <SID>Finalised()
+ call <SID>FinaliseMenu()
+ else
+ call <SID>UnfinaliseMenu()
+ endif
+endfunction
+
+augroup changelogMenu
+au BufEnter * if &filetype == "debchangelog" | call <SID>MakeMenu() | endif
+au BufLeave * if &filetype == "debchangelog" | silent! aunmenu Changelog | endif
+augroup END
+
+" }}}
+" {{{1 folding
+
+" look for an author name in the [zonestart zoneend] lines searching backward
+function! s:getAuthor(zonestart, zoneend)
+ let linepos = a:zoneend
+ while linepos >= a:zonestart
+ let line = getline(linepos)
+ if line =~# '^ --'
+ return substitute(line, '^ --\s*\([^<]\+\)\s*.*', '\1', '')
+ endif
+ let linepos -= 1
+ endwhile
+ return '[unknown]'
+endfunction
+
+" Look for a package source name searching backward from the givenline and
+" returns it. Return the empty string if the package name can't be found
+function! DebGetPkgSrcName(lineno)
+ let lineidx = a:lineno
+ let pkgname = ''
+ while lineidx > 0
+ let curline = getline(lineidx)
+ if curline =~# '^\S'
+ let pkgname = matchlist(curline, '^\(\S\+\).*$')[1]
+ break
+ endif
+ let lineidx = lineidx - 1
+ endwhile
+ return pkgname
+endfunction
+
+function! DebChangelogFoldText()
+ if v:folddashes ==# '-' " changelog entry fold
+ return foldtext() . ' -- ' . s:getAuthor(v:foldstart, v:foldend) . ' '
+ endif
+ return foldtext()
+endfunction
+
+function! DebGetChangelogFold(lnum)
+ let line = getline(a:lnum)
+ if line =~# '^\w\+'
+ return '>1' " beginning of a changelog entry
+ endif
+ if line =~# '^\s\+\[.*\]'
+ return '>2' " beginning of an author-specific chunk
+ endif
+ if line =~# '^ --'
+ return '1'
+ endif
+ return '='
+endfunction
+
+if exists('g:debchangelog_fold_enable')
+ silent! foldopen! " unfold the entry the cursor is on (usually the first one)
+endif
+
+" }}}
+
+" {{{1 omnicompletion for Closes: #
+
+if !exists('g:debchangelog_listbugs_severities')
+ let g:debchangelog_listbugs_severities = 'critical,grave,serious,important,normal,minor,wishlist'
+endif
+
+fun! DebCompleteBugs(findstart, base)
+ if a:findstart
+ let line = getline('.')
+
+ " try to detect whether this is closes: or lp:
+ let g:debchangelog_complete_mode = 'debbugs'
+ let try_colidx = col('.') - 1
+ let colidx = -1 " default to no-completion-possible
+
+ while try_colidx > 0 && line[try_colidx - 1] =~# '\s\|\d\|#\|,\|:'
+ let try_colidx = try_colidx - 1
+ if line[try_colidx] ==# '#' && colidx == -1
+ " found hash, where we complete from:
+ let colidx = try_colidx
+ elseif line[try_colidx] ==# ':'
+ if try_colidx > 1 && strpart(line, try_colidx - 2, 3) =~? '\clp:'
+ let g:debchangelog_complete_mode = 'lp'
+ endif
+ break
+ endif
+ endwhile
+ return colidx
+ else " return matches:
+ let bug_lines = []
+ if g:debchangelog_complete_mode ==? 'lp'
+ if ! has('python')
+ echoerr 'vim must be built with Python support to use LP bug completion'
+ return
+ endif
+ let pkgsrc = DebGetPkgSrcName(line('.'))
+ python << EOF
+import vim
+try:
+ from launchpadlib.launchpad import Launchpad
+ from lazr.restfulclient.errors import HTTPError
+ # login anonymously
+ lp = Launchpad.login_anonymously('debchangelog.vim', 'production')
+ ubuntu = lp.distributions['ubuntu']
+ try:
+ sp = ubuntu.getSourcePackage(name=vim.eval('pkgsrc'))
+ status = ('New', 'Incomplete', 'Confirmed', 'Triaged',
+ 'In Progress', 'Fix Committed')
+ tasklist = sp.searchTasks(status=status, order_by='id')
+ liststr = '['
+ for task in tasklist:
+ bug = task.bug
+ liststr += "'#%d - %s'," % (bug.id, bug.title.replace('\'', '\'\''))
+ liststr += ']'
+ vim.command('silent let bug_lines = %s' % liststr.encode('utf-8'))
+ except HTTPError:
+ pass
+except ImportError:
+ vim.command('echoerr \'python-launchpadlib >= 1.5.4 needs to be installed to use Launchpad bug completion\'')
+EOF
+ else
+ if ! filereadable('/usr/sbin/apt-listbugs')
+ echoerr 'apt-listbugs not found, you should install it to use Closes bug completion'
+ return
+ endif
+ let pkgsrc = DebGetPkgSrcName(line('.'))
+ let listbugs_output = system('/usr/sbin/apt-listbugs -s ' . g:debchangelog_listbugs_severities . ' list ' . pkgsrc . ' | grep "^ #" 2> /dev/null')
+ let bug_lines = split(listbugs_output, '\n')
+ endif
+ let completions = []
+ for line in bug_lines
+ let parts = matchlist(line, '^\s*\(#\S\+\)\s*-\s*\(.*\)$')
+ " filter only those which match a:base:
+ if parts[1] !~ '^' . a:base
+ continue
+ endif
+ let completion = {}
+ let completion['word'] = parts[1]
+ let completion['menu'] = parts[2]
+ let completion['info'] = parts[0]
+ let completions += [completion]
+ endfor
+ return completions
+ endif
+endfun
+
+setlocal omnifunc=DebCompleteBugs
+
+" }}}
+
+" vim: set foldmethod=marker:
diff --git a/runtime/ftplugin/debcontrol.vim b/runtime/ftplugin/debcontrol.vim
new file mode 100644
index 0000000..3a6e39a
--- /dev/null
+++ b/runtime/ftplugin/debcontrol.vim
@@ -0,0 +1,70 @@
+" Vim filetype plugin file (GUI menu and folding)
+" Language: Debian control files
+" Maintainer: Debian Vim Maintainers
+" Former Maintainer: Pierre Habouzit <madcoder@debian.org>
+" Last Change: 2018-01-28
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debcontrol.vim
+
+" Do these settings once per buffer
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin=1
+
+" {{{1 Local settings (do on every load)
+if exists('g:debcontrol_fold_enable')
+ setlocal foldmethod=expr
+ setlocal foldexpr=DebControlFold(v:lnum)
+ setlocal foldtext=DebControlFoldText()
+endif
+setlocal textwidth=0
+
+" Clean unloading
+let b:undo_ftplugin = 'setlocal tw< foldmethod< foldexpr< foldtext<'
+
+" }}}1
+
+" {{{1 folding
+
+function! s:getField(f, lnum)
+ let line = getline(a:lnum)
+ let fwdsteps = 0
+ while line !~ '^'.a:f.':'
+ let fwdsteps += 1
+ let line = getline(a:lnum + fwdsteps)
+ if line ==# ''
+ return 'unknown'
+ endif
+ endwhile
+ return substitute(line, '^'.a:f.': *', '', '')
+endfunction
+
+function! DebControlFoldText()
+ if v:folddashes ==# '-' " debcontrol entry fold
+ let type = substitute(getline(v:foldstart), ':.*', '', '')
+ if type ==# 'Source'
+ let ftext = substitute(foldtext(), ' *Source: *', ' ', '')
+ return ftext . ' -- ' . s:getField('Maintainer', v:foldstart) . ' '
+ endif
+ let arch = s:getField('Architecture', v:foldstart)
+ let ftext = substitute(foldtext(), ' *Package: *', ' [' . arch . '] ', '')
+ return ftext . ': ' . s:getField('Description', v:foldstart) . ' '
+ endif
+ return foldtext()
+endfunction
+
+function! DebControlFold(l)
+
+ " This is for not merging blank lines around folds to them
+ if getline(a:l) =~# '^Source:'
+ return '>1'
+ endif
+
+ if getline(a:l) =~# '^Package:'
+ return '>1'
+ endif
+
+ return '='
+endfunction
+
+" }}}1
diff --git a/runtime/ftplugin/denyhosts.vim b/runtime/ftplugin/denyhosts.vim
new file mode 100644
index 0000000..563bb8f
--- /dev/null
+++ b/runtime/ftplugin/denyhosts.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2007-12-04
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/dictconf.vim b/runtime/ftplugin/dictconf.vim
new file mode 100644
index 0000000..71a2b67
--- /dev/null
+++ b/runtime/ftplugin/dictconf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: dict(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/dictdconf.vim b/runtime/ftplugin/dictdconf.vim
new file mode 100644
index 0000000..0ee4c9d
--- /dev/null
+++ b/runtime/ftplugin/dictdconf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: dictd(8) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/diff.vim b/runtime/ftplugin/diff.vim
new file mode 100644
index 0000000..0464290
--- /dev/null
+++ b/runtime/ftplugin/diff.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Language: Diff
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2020 Jul 18
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl modeline<"
+
+" Don't use modelines in a diff, they apply to the diffed file
+setlocal nomodeline
+
+" If there are comments they start with #
+let &commentstring = "# %s"
diff --git a/runtime/ftplugin/dircolors.vim b/runtime/ftplugin/dircolors.vim
new file mode 100644
index 0000000..d07d1e3
--- /dev/null
+++ b/runtime/ftplugin/dircolors.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: dircolors(1) input file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/docbk.vim b/runtime/ftplugin/docbk.vim
new file mode 100644
index 0000000..cbceb6b
--- /dev/null
+++ b/runtime/ftplugin/docbk.vim
@@ -0,0 +1,24 @@
+" Vim filetype plugin file
+" Language: DocBook
+" Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2012-04-25
+
+if exists('b:did_ftplugin')
+ finish
+endif
+
+if !exists('b:docbk_type')
+ if expand('%:e') == 'sgml'
+ let b:docbk_type = 'sgml'
+ else
+ let b:docbk_type = 'xml'
+ endif
+endif
+
+if b:docbk_type == 'sgml'
+ runtime! ftplugin/sgml.vim ftplugin/sgml_*.vim ftplugin/sgml/*.vim
+else
+ runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+endif
+
+let b:undo_ftplugin = "unlet! b:docbk_type"
diff --git a/runtime/ftplugin/dockerfile.vim b/runtime/ftplugin/dockerfile.vim
new file mode 100644
index 0000000..2e3c447
--- /dev/null
+++ b/runtime/ftplugin/dockerfile.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin
+" Language: Dockerfile
+" Maintainer: Honza Pokorny <http://honza.ca>
+" Last Change: 2014 Aug 29
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl commentstring<"
+
+setlocal commentstring=#\ %s
diff --git a/runtime/ftplugin/dosbatch.vim b/runtime/ftplugin/dosbatch.vim
new file mode 100644
index 0000000..0c5cde2
--- /dev/null
+++ b/runtime/ftplugin/dosbatch.vim
@@ -0,0 +1,40 @@
+" Vim filetype plugin file
+" Language: MS-DOS .bat files
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Last Change: 7th May 2020
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" BAT comment formatting
+setlocal comments=b:rem,b:@rem,b:REM,b:@REM,:::
+setlocal commentstring=::\ %s
+setlocal formatoptions-=t formatoptions+=rol
+
+" Lookup DOS keywords using Windows command help.
+if executable('help.exe')
+ if has('terminal')
+ setlocal keywordprg=:term\ help.exe
+ else
+ setlocal keywordprg=help.exe
+ endif
+endif
+
+" Define patterns for the browse file filter
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\nAll Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setlocal comments< formatoptions< keywordprg<"
+ \ . "| unlet! b:browsefiler"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/dosini.vim b/runtime/ftplugin/dosini.vim
new file mode 100644
index 0000000..0d0f0f8
--- /dev/null
+++ b/runtime/ftplugin/dosini.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: Configuration File (ini file) for MSDOS/MS Windows
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:; commentstring=;\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/dtd.vim b/runtime/ftplugin/dtd.vim
new file mode 100644
index 0000000..6c08f66
--- /dev/null
+++ b/runtime/ftplugin/dtd.vim
@@ -0,0 +1,40 @@
+" Vim filetype plugin file
+" Language: dtd
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=<!--%s-->
+setlocal comments=s:<!--,m:\ \ \ \ \ ,e:-->
+
+setlocal formatoptions-=t
+if !exists("g:ft_dtd_autocomment") || (g:ft_dtd_autocomment == 1)
+ setlocal formatoptions+=croql
+endif
+
+if exists("loaded_matchit")
+ let b:match_words = '<!--:-->,<!:>'
+endif
+
+" Change the :browse e filter to primarily show Java-related files.
+if has("gui_win32")
+ let b:browsefilter="DTD Files (*.dtd)\t*.dtd\n" .
+ \ "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring< comments< formatoptions<" .
+ \ " | unlet! b:matchwords b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/dtrace.vim b/runtime/ftplugin/dtrace.vim
new file mode 100644
index 0000000..9288097
--- /dev/null
+++ b/runtime/ftplugin/dtrace.vim
@@ -0,0 +1,40 @@
+" Language: D script as described in "Solaris Dynamic Tracing Guide",
+" http://docs.sun.com/app/docs/doc/817-6223
+" Last Change: 2008/03/20
+" Version: 1.2
+" Maintainer: Nicolas Weber <nicolasweber@gmx.de>
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Using line continuation here.
+let s:cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< com< cms< isk<"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/
+
+" dtrace uses /* */ comments. Set this explicitly, just in case the user
+" changed this (/*%s*/ is the default)
+setlocal commentstring=/*%s*/
+
+setlocal iskeyword+=@,$
+
+" When the matchit plugin is loaded, this makes the % command skip parens and
+" braces in comments.
+let b:match_words = &matchpairs
+let b:match_skip = 's:comment\|string\|character'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/dune.vim b/runtime/ftplugin/dune.vim
new file mode 100644
index 0000000..86c99c0
--- /dev/null
+++ b/runtime/ftplugin/dune.vim
@@ -0,0 +1,20 @@
+" Language: Dune buildsystem
+" Maintainer: Markus Mottl <markus.mottl@gmail.com>
+" Anton Kochkov <anton.kochkov@gmail.com>
+" URL: https://github.com/ocaml/vim-ocaml
+" Last Change:
+" 2018 Nov 3 - Added commentstring (Markus Mottl)
+" 2017 Sep 6 - Initial version (Etienne Millon)
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin=1
+
+set lisp
+
+" Comment string
+setl commentstring=;\ %s
+setl comments=:;
+
+setl iskeyword+=#,?,.,/
diff --git a/runtime/ftplugin/eiffel.vim b/runtime/ftplugin/eiffel.vim
new file mode 100644
index 0000000..216fdde
--- /dev/null
+++ b/runtime/ftplugin/eiffel.vim
@@ -0,0 +1,96 @@
+" Vim filetype plugin
+" Language: Eiffel
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2010 Aug 29
+
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:--
+setlocal commentstring=--\ %s
+
+setlocal formatoptions-=t formatoptions+=croql
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "Eiffel Source Files (*.e)\t*.e\n" .
+ \ "Eiffel Control Files (*.ecf, *.ace, *.xace)\t*.ecf;*.ace;*.xace\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+if exists("loaded_matchit") && !exists("b:match_words")
+ let b:match_ignorecase = 0
+ " Silly \%^ trick to match note at head of pair and in middle prevents
+ " 'g%' wrapping from 'note' to 'end'
+ let b:match_words = '\%^:' .
+ \ '\<\%(^note\|indexing\|class\|^obsolete\|inherit\|insert\|^create\|convert\|feature\|^invariant\)\>:' .
+ \ '^end\>,' .
+ \ '\<\%(do\|deferred\|external\|once\%(\s\+"\)\@!\|check\|debug\|if\|inspect\|from\|across\)\>:' .
+ \ '\%(\%(^\s\+\)\@<=\%(then\|until\|loop\)\|\%(then\|until\|loop\)\s\+[^ -]\|' .
+ \ '\<\%(ensure\%(\s\+then\)\=\|rescue\|_then\|elseif\|else\|when\|\s\@<=invariant\|_until\|_loop\|variant\|_as\|alias\)\>\):' .
+ \ '\s\@<=end\>'
+ let b:match_skip = 's:\<eiffel\%(Comment\|String\|Operator\)\>'
+ noremap [% <Nop>
+ noremap ]% <Nop>
+ vnoremap a% <Nop>
+endif
+
+let b:undo_ftplugin = "setl fo< com< cms<" .
+ \ "| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
+
+if !exists("g:no_plugin_maps") && !exists("g:no_eiffel_maps")
+ function! s:DoMotion(pattern, count, flags) abort
+ normal! m'
+ for i in range(a:count)
+ call search(a:pattern, a:flags)
+ endfor
+ endfunction
+
+ let sections = '^\%(note\|indexing\|' .
+ \ '\%(\%(deferred\|expanded\|external\|frozen\)\s\+\)*class\|' .
+ \ 'obsolete\|inherit\|insert\|create\|convert\|feature\|' .
+ \ 'invariant\|end\)\>'
+
+ nnoremap <silent> <buffer> ]] :<C-U>call <SID>DoMotion(sections, v:count1, 'W')<CR>
+ xnoremap <silent> <buffer> ]] :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(sections, v:count1, 'W')<CR>
+ nnoremap <silent> <buffer> [[ :<C-U>call <SID>DoMotion(sections, v:count1, 'Wb')<CR>
+ xnoremap <silent> <buffer> [[ :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(sections, v:count1, 'Wb')<CR>
+
+ function! s:DoFeatureMotion(count, flags)
+ let view = winsaveview()
+ call cursor(1, 1)
+ let [features_start, _] = searchpos('^feature\>')
+ call search('^\s\+\a') " find the first feature
+ let spaces = indent(line('.'))
+ let [features_end, _] = searchpos('^\%(invariant\|note\|end\)\>')
+ call winrestview(view)
+ call s:DoMotion('\%>' . features_start . 'l\%<' . features_end . 'l^\s*\%' . (spaces + 1) . 'v\zs\a', a:count, a:flags)
+ endfunction
+
+ nnoremap <silent> <buffer> ]m :<C-U>call <SID>DoFeatureMotion(v:count1, 'W')<CR>
+ xnoremap <silent> <buffer> ]m :<C-U>exe "normal! gv"<Bar>call <SID>DoFeatureMotion(v:count1, 'W')<CR>
+ nnoremap <silent> <buffer> [m :<C-U>call <SID>DoFeatureMotion(v:count1, 'Wb')<CR>
+ xnoremap <silent> <buffer> [m :<C-U>exe "normal! gv"<Bar>call <SID>DoFeatureMotion(v:count1, 'Wb')<CR>
+
+ let comment_block_start = '^\%(\s\+--.*\n\)\@<!\s\+--'
+ let comment_block_end = '^\s\+--.*\n\%(\s\+--\)\@!'
+
+ nnoremap <silent> <buffer> ]- :<C-U>call <SID>DoMotion(comment_block_start, 1, 'W')<CR>
+ xnoremap <silent> <buffer> ]- :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(comment_block_start, 1, 'W')<CR>
+ nnoremap <silent> <buffer> [- :<C-U>call <SID>DoMotion(comment_block_end, 1, 'Wb')<CR>
+ xnoremap <silent> <buffer> [- :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(comment_block_end, 1, 'Wb')<CR>
+
+ let b:undo_ftplugin = b:undo_ftplugin .
+ \ "| silent! execute 'unmap <buffer> [[' | silent! execute 'unmap <buffer> ]]'" .
+ \ "| silent! execute 'unmap <buffer> [m' | silent! execute 'unmap <buffer> ]m'" .
+ \ "| silent! execute 'unmap <buffer> [-' | silent! execute 'unmap <buffer> ]-'"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8
diff --git a/runtime/ftplugin/elinks.vim b/runtime/ftplugin/elinks.vim
new file mode 100644
index 0000000..921f9c2
--- /dev/null
+++ b/runtime/ftplugin/elinks.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: elinks(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/elm.vim b/runtime/ftplugin/elm.vim
new file mode 100644
index 0000000..1e10346
--- /dev/null
+++ b/runtime/ftplugin/elm.vim
@@ -0,0 +1,18 @@
+" Elm filetype plugin file
+" Language: Elm
+" Maintainer: Andreas Scharf <as@99n.de>
+" Latest Revision: 2020-05-29
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=s1fl:{-,mb:\ ,ex:-},:--
+setlocal commentstring=--\ %s
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/erlang.vim b/runtime/ftplugin/erlang.vim
new file mode 100644
index 0000000..c775247
--- /dev/null
+++ b/runtime/ftplugin/erlang.vim
@@ -0,0 +1,83 @@
+" Vim ftplugin file
+" Language: Erlang (http://www.erlang.org)
+" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
+" Author: Oscar Hellström <oscar@oscarh.net>
+" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+" Eduardo Lopez (http://github.com/tapichu)
+" Arvid Bjurklint (http://github.com/slarwise)
+" Last Update: 2021-Jan-08
+" License: Vim license
+" URL: https://github.com/vim-erlang/vim-erlang-runtime
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let &l:keywordprg = get(g:, 'erlang_keywordprg', 'erl -man')
+
+if get(g:, 'erlang_folding', 0)
+ setlocal foldmethod=expr
+ setlocal foldexpr=GetErlangFold(v:lnum)
+ setlocal foldtext=ErlangFoldText()
+endif
+
+setlocal comments=:%%%,:%%,:%
+setlocal commentstring=%%s
+
+setlocal formatoptions+=ro
+
+setlocal suffixesadd=.erl,.hrl
+
+let &l:include = '^\s*-\%(include\|include_lib\)\s*("\zs\f*\ze")'
+let &l:define = '^\s*-\%(define\|record\|type\|opaque\)'
+
+let s:erlang_fun_begin = '^\a\w*(.*$'
+let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
+
+if !exists('*GetErlangFold')
+ function GetErlangFold(lnum)
+ let lnum = a:lnum
+ let line = getline(lnum)
+
+ if line =~ s:erlang_fun_end
+ return '<1'
+ endif
+
+ if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
+ return '1'
+ endif
+
+ if line =~ s:erlang_fun_begin
+ return '>1'
+ endif
+
+ return '='
+ endfunction
+endif
+
+if !exists('*ErlangFoldText')
+ function ErlangFoldText()
+ let line = getline(v:foldstart)
+ let foldlen = v:foldend - v:foldstart + 1
+ let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
+ if foldlen < 10
+ let lines = ' ' . lines
+ endif
+ let retval = '+' . v:folddashes . lines
+
+ return retval
+ endfunction
+endif
+
+let b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<"
+ \ . " comments< commentstring< formatoptions< suffixesadd< include<"
+ \ . " define<"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: sw=2 et
diff --git a/runtime/ftplugin/eruby.vim b/runtime/ftplugin/eruby.vim
new file mode 100644
index 0000000..3c18bad
--- /dev/null
+++ b/runtime/ftplugin/eruby.vim
@@ -0,0 +1,132 @@
+" Vim filetype plugin
+" Language: eRuby
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" URL: https://github.com/vim-ruby/vim-ruby
+" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2019 Jan 06
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+if !exists("g:eruby_default_subtype")
+ let g:eruby_default_subtype = "html"
+endif
+
+if &filetype =~ '^eruby\.'
+ let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
+elseif !exists("b:eruby_subtype")
+ let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
+ let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
+ if b:eruby_subtype == ''
+ let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
+ endif
+ if b:eruby_subtype == 'rhtml'
+ let b:eruby_subtype = 'html'
+ elseif b:eruby_subtype == 'rb'
+ let b:eruby_subtype = 'ruby'
+ elseif b:eruby_subtype == 'yml'
+ let b:eruby_subtype = 'yaml'
+ elseif b:eruby_subtype == 'js'
+ let b:eruby_subtype = 'javascript'
+ elseif b:eruby_subtype == 'txt'
+ " Conventional; not a real file type
+ let b:eruby_subtype = 'text'
+ elseif b:eruby_subtype == ''
+ let b:eruby_subtype = g:eruby_default_subtype
+ endif
+endif
+
+if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
+ exe "runtime! ftplugin/".b:eruby_subtype.".vim ftplugin/".b:eruby_subtype."_*.vim ftplugin/".b:eruby_subtype."/*.vim"
+else
+ runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+endif
+unlet! b:did_ftplugin
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+ unlet b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+ unlet b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+ unlet b:match_words
+endif
+
+let s:cfilemap = v:version >= 704 ? maparg('<Plug><cfile>', 'c', 0, 1) : {}
+if !get(s:cfilemap, 'buffer') || !s:cfilemap.expr || s:cfilemap.rhs =~# 'ErubyAtCursor()'
+ let s:cfilemap = {}
+endif
+if !has_key(s:cfilemap, 'rhs')
+ let s:cfilemap.rhs = "substitute(&l:inex =~# '\\<v:fname\\>' && len(expand('<cfile>')) ? eval(substitute(&l:inex, '\\<v:fname\\>', '\\=string(expand(\"<cfile>\"))', 'g')) : '', '^$', \"\\022\\006\",'')"
+endif
+let s:ctagmap = v:version >= 704 ? maparg('<Plug><ctag>', 'c', 0, 1) : {}
+if !get(s:ctagmap, 'buffer') || !s:ctagmap.expr || s:ctagmap.rhs =~# 'ErubyAtCursor()'
+ let s:ctagmap = {}
+endif
+let s:include = &l:include
+let s:path = &l:path
+let s:suffixesadd = &l:suffixesadd
+
+runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
+let b:did_ftplugin = 1
+
+" Combine the new set of values with those previously included.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
+endif
+if exists ("b:browsefilter")
+ let s:browsefilter = substitute(b:browsefilter,'\cAll Files (\*\.\*)\t\*\.\*\n','','') . s:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words . ',' . s:match_words
+endif
+
+if len(s:include)
+ let &l:include = s:include
+endif
+let &l:path = s:path . (s:path =~# ',$\|^$' ? '' : ',') . &l:path
+let &l:suffixesadd = s:suffixesadd . (s:suffixesadd =~# ',$\|^$' ? '' : ',') . &l:suffixesadd
+exe 'cmap <buffer><script><expr> <Plug><cfile> ErubyAtCursor() ? ' . maparg('<Plug><cfile>', 'c') . ' : ' . s:cfilemap.rhs
+exe 'cmap <buffer><script><expr> <Plug><ctag> ErubyAtCursor() ? ' . maparg('<Plug><ctag>', 'c') . ' : ' . get(s:ctagmap, 'rhs', '"\022\027"')
+unlet s:cfilemap s:ctagmap s:include s:path s:suffixesadd
+
+" Change the browse dialog on Win32 to show mainly eRuby-related files
+if has("gui_win32")
+ let b:browsefilter="eRuby Files (*.erb, *.rhtml)\t*.erb;*.rhtml\n" . s:browsefilter
+endif
+
+" Load the combined list of match_words for matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = s:match_words
+endif
+
+" TODO: comments=
+setlocal commentstring=<%#%s%>
+
+let b:undo_ftplugin = "setl cms< "
+ \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+function! ErubyAtCursor() abort
+ let groups = map(['erubyBlock', 'erubyComment', 'erubyExpression', 'erubyOneLiner'], 'hlID(v:val)')
+ return !empty(filter(synstack(line('.'), col('.')), 'index(groups, v:val) >= 0'))
+endfunction
+
+" vim: nowrap sw=2 sts=2 ts=8:
diff --git a/runtime/ftplugin/eterm.vim b/runtime/ftplugin/eterm.vim
new file mode 100644
index 0000000..e2f88ef
--- /dev/null
+++ b/runtime/ftplugin/eterm.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: eterm(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s include=^\\s*include
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/falcon.vim b/runtime/ftplugin/falcon.vim
new file mode 100644
index 0000000..affca38
--- /dev/null
+++ b/runtime/ftplugin/falcon.vim
@@ -0,0 +1,49 @@
+" Vim filetype plugin file
+" Language: Falcon
+" Author: Steven Oliver <oliver.steven@gmail.com>
+" Copyright: Copyright (c) 2009-2013 Steven Oliver
+" License: You may redistribute this under the same terms as Vim itself
+" Last Update: 2020 Oct 10
+" --------------------------------------------------------------------------
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal softtabstop=4 shiftwidth=4
+setlocal suffixesadd=.fal,.ftd
+
+" Matchit support
+if exists("loaded_matchit") && !exists("b:match_words")
+ let b:match_ignorecase = 0
+
+ let b:match_words =
+ \ '\<\%(if\|case\|while\|until\|for\|do\|class\)\>=\@!' .
+ \ ':' .
+ \ '\<\%(else\|elsif\|when\)\>' .
+ \ ':' .
+ \ '\<end\>' .
+ \ ',{:},\[:\],(:)'
+endif
+
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" Windows allows you to filter the open file dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Falcon Source Files (*.fal *.ftd)\t*.fal;*.ftd\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setlocal tabstop< shiftwidth< expandtab< fileencoding<"
+ \ . " suffixesadd< comments<"
+ \ . "| unlet! b:browsefiler"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
diff --git a/runtime/ftplugin/fetchmail.vim b/runtime/ftplugin/fetchmail.vim
new file mode 100644
index 0000000..33bb417
--- /dev/null
+++ b/runtime/ftplugin/fetchmail.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: fetchmail(1) RC File
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/flexwiki.vim b/runtime/ftplugin/flexwiki.vim
new file mode 100644
index 0000000..7513e66
--- /dev/null
+++ b/runtime/ftplugin/flexwiki.vim
@@ -0,0 +1,59 @@
+" Vim filetype plugin file
+" Language: FlexWiki, http://www.flexwiki.com/
+" Maintainer: George V. Reilly <george@reilly.org>
+" Home: http://www.georgevreilly.com/vim/flexwiki/
+" Other Home: http://www.vim.org/scripts/script.php?script_id=1529
+" Author: George V. Reilly
+" Filenames: *.wiki
+" Last Change: Wed Apr 26 11:00 PM 2006 P
+" Version: 0.3
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let b:did_ftplugin = 1 " Don't load another plugin for this buffer
+
+" Reset the following options to undo this plugin.
+let b:undo_ftplugin = "setl tw< wrap< lbr< et< ts< fenc< bomb< ff<"
+
+" Allow lines of unlimited length. Do NOT want automatic linebreaks,
+" as a newline starts a new paragraph in FlexWiki.
+setlocal textwidth=0
+" Wrap long lines, rather than using horizontal scrolling.
+setlocal wrap
+" Wrap at a character in 'breakat' rather than at last char on screen
+setlocal linebreak
+" Don't transform <TAB> characters into spaces, as they are significant
+" at the beginning of the line for numbered and bulleted lists.
+setlocal noexpandtab
+" 4-char tabstops, per flexwiki.el
+setlocal tabstop=4
+" Save *.wiki files in UTF-8
+setlocal fileencoding=utf-8
+" Add the UTF-8 Byte Order Mark to the beginning of the file
+setlocal bomb
+" Save <EOL>s as \n, not \r\n
+setlocal fileformat=unix
+
+if exists("g:flexwiki_maps")
+ " Move up and down by display lines, to account for screen wrapping
+ " of very long lines
+ nmap <buffer> <Up> gk
+ nmap <buffer> k gk
+ vmap <buffer> <Up> gk
+ vmap <buffer> k gk
+
+ nmap <buffer> <Down> gj
+ nmap <buffer> j gj
+ vmap <buffer> <Down> gj
+ vmap <buffer> j gj
+
+ " for earlier versions - for when 'wrap' is set
+ imap <buffer> <S-Down> <C-o>gj
+ imap <buffer> <S-Up> <C-o>gk
+ if v:version >= 700
+ imap <buffer> <Down> <C-o>gj
+ imap <buffer> <Up> <C-o>gk
+ endif
+endif
diff --git a/runtime/ftplugin/fortran.vim b/runtime/ftplugin/fortran.vim
new file mode 100644
index 0000000..b9ba3c4
--- /dev/null
+++ b/runtime/ftplugin/fortran.vim
@@ -0,0 +1,133 @@
+" Vim settings file
+" Language: Fortran 2008 (and older: Fortran 2003, 95, 90, 77, 66)
+" Version: (v52) 2020 October 07
+" Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/>
+" Usage: For instructions, do :help fortran-plugin from Vim
+" Credits:
+" Version 0.1 was created in September 2000 by Ajit Thakkar.
+" Since then, useful suggestions and contributions have been made, in order, by:
+" Stefano Zacchiroli, Hendrik Merx, Ben Fritz, David Barnett, Eisuke Kawashima,
+" and Doug Kearns.
+
+" Only do these settings when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let s:cposet=&cpoptions
+set cpoptions&vim
+
+" Don't do other file type settings for this buffer
+let b:did_ftplugin = 1
+
+" Determine whether this is a fixed or free format source file
+" if this hasn't been done yet using the priority:
+" buffer-local value
+" > global value
+" > file extension as in Intel ifort, gcc (gfortran), NAG, Pathscale, and Cray compilers
+if !exists("b:fortran_fixed_source")
+ if exists("fortran_free_source")
+ " User guarantees free source form
+ let b:fortran_fixed_source = 0
+ elseif exists("fortran_fixed_source")
+ " User guarantees fixed source form
+ let b:fortran_fixed_source = 1
+ elseif expand("%:e") =~? '^f\%(90\|95\|03\|08\)$'
+ " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers
+ let b:fortran_fixed_source = 0
+ elseif expand("%:e") =~? '^\%(f\|f77\|for\)$'
+ " Fixed-form file extension defaults
+ let b:fortran_fixed_source = 1
+ else
+ " Modern fortran still allows both fixed and free source form
+ " Assume fixed source form unless signs of free source form
+ " are detected in the first five columns of the first s:lmax lines.
+ " Detection becomes more accurate and time-consuming if more lines
+ " are checked. Increase the limit below if you keep lots of comments at
+ " the very top of each file and you have a fast computer.
+ let s:lmax = 500
+ if ( s:lmax > line("$") )
+ let s:lmax = line("$")
+ endif
+ let b:fortran_fixed_source = 1
+ let s:ln=1
+ while s:ln <= s:lmax
+ let s:test = strpart(getline(s:ln),0,5)
+ if s:test !~ '^[Cc*]' && s:test !~ '^ *[!#]' && s:test =~ '[^ 0-9\t]' && s:test !~ '^[ 0-9]*\t'
+ let b:fortran_fixed_source = 0
+ break
+ endif
+ let s:ln = s:ln + 1
+ endwhile
+ unlet! s:lmax s:ln s:test
+ endif
+endif
+
+" Set comments and textwidth according to source type
+if (b:fortran_fixed_source == 1)
+ setlocal comments=:!,:*,:C
+ " Fixed format requires a textwidth of 72 for code
+ setlocal tw=72
+ " If you need to add "&" on continued lines so that the code is
+ " compatible with both free and fixed format, then you should do so
+ " in column 73 and uncomment the next line
+ " setlocal tw=73
+else
+ setlocal comments=:!
+ " Free format allows a textwidth of 132
+ setlocal tw=132
+endif
+
+" Set commentstring for foldmethod=marker
+setlocal cms=!%s
+
+" Tabs are not a good idea in Fortran so the default is to expand tabs
+if !exists("fortran_have_tabs")
+ setlocal expandtab
+endif
+
+" Set 'formatoptions' to break text lines
+setlocal fo+=t
+
+setlocal include=^\\c#\\=\\s*include\\s\\+
+setlocal suffixesadd+=.f08,.f03,.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
+
+" Define patterns for the matchit plugin
+if !exists("b:match_words")
+ let s:notend = '\%(\<end\s\+\)\@<!'
+ let s:notselect = '\%(\<select\s\+\)\@<!'
+ let s:notelse = '\%(\<end\s\+\|\<else\s\+\)\@<!'
+ let s:notprocedure = '\%(\s\+procedure\>\)\@!'
+ let b:match_ignorecase = 1
+ let b:match_words =
+ \ '(:),' .
+ \ '\<select\s*case\>:' . s:notselect. '\<case\>:\<end\s*select\>,' .
+ \ s:notelse . '\<if\s*(.\+)\s*then\>:' .
+ \ '\<else\s*\%(if\s*(.\+)\s*then\)\=\>:\<end\s*if\>,'.
+ \ 'do\s\+\(\d\+\):\%(^\s*\)\@<=\1\s,'.
+ \ s:notend . '\<do\>:\<end\s*do\>,'.
+ \ s:notelse . '\<where\>:\<elsewhere\>:\<end\s*where\>,'.
+ \ s:notend . '\<type\s*[^(]:\<end\s*type\>,'.
+ \ s:notend . '\<forall\>:\<end\s*forall\>,'.
+ \ s:notend . '\<associate\>:\<end\s*associate\>,'.
+ \ s:notend . '\<enum\>:\<end\s*enum\>,'.
+ \ s:notend . '\<interface\>:\<end\s*interface\>,'.
+ \ s:notend . '\<subroutine\>:\<end\s*subroutine\>,'.
+ \ s:notend . '\<function\>:\<end\s*function\>,'.
+ \ s:notend . '\<module\>' . s:notprocedure . ':\<end\s*module\>,'.
+ \ s:notend . '\<program\>:\<end\s*program\>'
+endif
+
+" File filters for :browse e
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "Fortran Files (*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn)\t*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl fo< com< tw< cms< et< inc< sua<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:browsefilter"
+
+let &cpoptions=s:cposet
+unlet s:cposet
+
+" vim:sw=2
diff --git a/runtime/ftplugin/framescript.vim b/runtime/ftplugin/framescript.vim
new file mode 100644
index 0000000..66802ca
--- /dev/null
+++ b/runtime/ftplugin/framescript.vim
@@ -0,0 +1,30 @@
+" Vim ftplugin file
+" Language: FrameScript
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-19
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo< inc< | unlet! b:matchwords"
+
+setlocal comments=s1:/*,mb:*,ex:*/,:// commentstring=/*\ %s\ */
+setlocal formatoptions-=t formatoptions+=croql
+setlocal include=^\\s*<#Include
+
+if exists("loaded_matchit")
+ let s:not_end = '\c\%(\<End\)\@<!'
+ let b:match_words =
+ \ s:not_end . '\<If\>:\c\<ElseIf\>:\c\<Else\>:\c\<EndIf\>,' .
+ \ s:not_end . '\<Loop\>:\c\<EndLoop\>' .
+ \ s:not_end . '\<Sub\>:\c\<EndSub\>'
+ unlet s:not_end
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/freebasic.vim b/runtime/ftplugin/freebasic.vim
new file mode 100644
index 0000000..a2bb459
--- /dev/null
+++ b/runtime/ftplugin/freebasic.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin file
+" Language: FreeBasic
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2015 Jan 10
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+runtime! ftplugin/basic.vim
+
+" vim: ts=8
diff --git a/runtime/ftplugin/fstab.vim b/runtime/ftplugin/fstab.vim
new file mode 100644
index 0000000..9980532
--- /dev/null
+++ b/runtime/ftplugin/fstab.vim
@@ -0,0 +1,19 @@
+" Vim ftplugin file
+" Language: fstab file
+" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
+" URL: https://raw.github.com/rid9/vim-fstab/master/ftplugin/fstab.vim
+" Last Change: 2021 Jan 02
+" Version: 1.0
+"
+" Credits:
+" Subhaditya Nath <sn03.general@gmail.com>
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=#%s
+let b:undo_ftplugin = "setlocal commentstring<"
+
+" vim: ts=8 ft=vim
diff --git a/runtime/ftplugin/fvwm.vim b/runtime/ftplugin/fvwm.vim
new file mode 100644
index 0000000..89e1a83
--- /dev/null
+++ b/runtime/ftplugin/fvwm.vim
@@ -0,0 +1,14 @@
+" Created : Tue 09 May 2006 02:07:31 PM CDT
+" Modified : Tue 09 May 2006 02:07:31 PM CDT
+" Author : Gautam Iyer <gi1242@users.sourceforge.net>
+" Description : ftplugin for fvwm config files
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
diff --git a/runtime/ftplugin/gdb.vim b/runtime/ftplugin/gdb.vim
new file mode 100644
index 0000000..2473b13
--- /dev/null
+++ b/runtime/ftplugin/gdb.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: gdb
+" Maintainer: Michaël Peeters <NOSPAMm.vim@noekeon.org>
+" Last Changed: 26 Oct 2017
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=#%s
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal cms<"
diff --git a/runtime/ftplugin/git.vim b/runtime/ftplugin/git.vim
new file mode 100644
index 0000000..75b20f0
--- /dev/null
+++ b/runtime/ftplugin/git.vim
@@ -0,0 +1,41 @@
+" Vim filetype plugin
+" Language: generic git output
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2019 Dec 05
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+if !exists('b:git_dir')
+ if expand('%:p') =~# '[\/]\.git[\/]modules[\/]\|:[\/][\/]\|^\a\a\+:'
+ " Stay out of the way
+ elseif expand('%:p') =~# '[\/]\.git[\/]worktrees'
+ let b:git_dir = matchstr(expand('%:p'),'.*\.git[\/]worktrees[\/][^\/]\+\>')
+ elseif expand('%:p') =~# '\.git\>'
+ let b:git_dir = matchstr(expand('%:p'),'.*\.git\>')
+ elseif $GIT_DIR != ''
+ let b:git_dir = $GIT_DIR
+ endif
+ if (has('win32') || has('win64')) && exists('b:git_dir')
+ let b:git_dir = substitute(b:git_dir,'\\','/','g')
+ endif
+endif
+
+if exists('*shellescape') && exists('b:git_dir') && b:git_dir != ''
+ if b:git_dir =~# '/\.git$' " Not a bare repository
+ let &l:path = escape(fnamemodify(b:git_dir,':h'),'\, ').','.&l:path
+ endif
+ let &l:path = escape(b:git_dir,'\, ').','.&l:path
+ let &l:keywordprg = 'git --git-dir='.shellescape(b:git_dir).' show'
+else
+ setlocal keywordprg=git\ show
+endif
+if has('gui_running')
+ let &l:keywordprg = substitute(&l:keywordprg,'^git\>','git --no-pager','')
+endif
+
+setlocal includeexpr=substitute(v:fname,'^[^/]\\+/','','')
+let b:undo_ftplugin = "setl keywordprg< path< includeexpr<"
diff --git a/runtime/ftplugin/gitcommit.vim b/runtime/ftplugin/gitcommit.vim
new file mode 100644
index 0000000..9b1998a
--- /dev/null
+++ b/runtime/ftplugin/gitcommit.vim
@@ -0,0 +1,66 @@
+" Vim filetype plugin
+" Language: git commit file
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2019 Dec 05
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+
+runtime! ftplugin/git.vim
+let b:did_ftplugin = 1
+
+setlocal comments=:# commentstring=#\ %s
+setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72
+setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q formatoptions+=n
+setlocal formatlistpat+=\\\|^\\s*[-*+]\\s\\+
+
+let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms< formatlistpat<'
+
+if exists("g:no_gitcommit_commands") || v:version < 700
+ finish
+endif
+
+if !exists("b:git_dir")
+ let b:git_dir = expand("%:p:h")
+endif
+
+command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+
+let b:undo_ftplugin = b:undo_ftplugin . "|delc DiffGitCached"
+
+function! s:diffcomplete(A,L,P)
+ let args = ""
+ if a:P <= match(a:L." -- "," -- ")+3
+ let args = args . "-p\n--stat\n--shortstat\n--summary\n--patch-with-stat\n--no-renames\n-B\n-M\n-C\n"
+ end
+ if exists("b:git_dir") && a:A !~ '^-'
+ let tree = fnamemodify(b:git_dir,':h')
+ if strpart(getcwd(),0,strlen(tree)) == tree
+ let args = args."\n".system("git diff --cached --name-only")
+ endif
+ endif
+ return args
+endfunction
+
+function! s:gitdiffcached(bang,gitdir,...)
+ let tree = fnamemodify(a:gitdir,':h')
+ let name = tempname()
+ let git = "git"
+ if strpart(getcwd(),0,strlen(tree)) != tree
+ let git .= " --git-dir=".(exists("*shellescape") ? shellescape(a:gitdir) : '"'.a:gitdir.'"')
+ endif
+ if a:0
+ let extra = join(map(copy(a:000),exists("*shellescape") ? 'shellescape(v:val)' : "'\"'.v:val.'\"'"))
+ else
+ let extra = "-p --stat=".&columns
+ endif
+ call system(git." diff --cached --no-color --no-ext-diff ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
+ exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name)
+ wincmd P
+ let b:git_dir = a:gitdir
+ command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+ nnoremap <buffer> <silent> q :q<CR>
+ setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git
+endfunction
diff --git a/runtime/ftplugin/gitconfig.vim b/runtime/ftplugin/gitconfig.vim
new file mode 100644
index 0000000..833b8b1
--- /dev/null
+++ b/runtime/ftplugin/gitconfig.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin
+" Language: git config file
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2009 Dec 24
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal formatoptions-=t formatoptions+=croql
+setlocal comments=:#,:; commentstring=;\ %s
+
+let b:undo_ftplugin = "setl fo< com< cms<"
diff --git a/runtime/ftplugin/gitrebase.vim b/runtime/ftplugin/gitrebase.vim
new file mode 100644
index 0000000..2fed53c
--- /dev/null
+++ b/runtime/ftplugin/gitrebase.vim
@@ -0,0 +1,48 @@
+" Vim filetype plugin
+" Language: git rebase --interactive
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2019 Dec 05
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+
+runtime! ftplugin/git.vim
+let b:did_ftplugin = 1
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t
+setlocal nomodeline
+if !exists("b:undo_ftplugin")
+ let b:undo_ftplugin = ""
+endif
+let b:undo_ftplugin = b:undo_ftplugin."|setl com< cms< fo< ml<"
+
+function! s:choose(word) abort
+ s/^\(\w\+\>\)\=\(\s*\)\ze\x\{4,40\}\>/\=(strlen(submatch(1)) == 1 ? a:word[0] : a:word) . substitute(submatch(2),'^$',' ','')/e
+endfunction
+
+function! s:cycle(count) abort
+ let words = ['pick', 'edit', 'fixup', 'squash', 'reword', 'drop']
+ let index = index(map(copy(words), 'v:val[0]'), getline('.')[0])
+ let index = ((index < 0 ? 0 : index) + 10000 * len(words) + a:count) % len(words)
+ call s:choose(words[index])
+endfunction
+
+command! -buffer -bar -range Pick :<line1>,<line2>call s:choose('pick')
+command! -buffer -bar -range Squash :<line1>,<line2>call s:choose('squash')
+command! -buffer -bar -range Edit :<line1>,<line2>call s:choose('edit')
+command! -buffer -bar -range Reword :<line1>,<line2>call s:choose('reword')
+command! -buffer -bar -range Fixup :<line1>,<line2>call s:choose('fixup')
+command! -buffer -bar -range Drop :<line1>,<line2>call s:choose('drop')
+command! -buffer -count=1 -bar -bang Cycle call s:cycle(<bang>0 ? -<count> : <count>)
+
+if exists("g:no_plugin_maps") || exists("g:no_gitrebase_maps")
+ finish
+endif
+
+nnoremap <buffer> <expr> K col('.') < 7 && expand('<Lt>cword>') =~ '\X' && getline('.') =~ '^\w\+\s\+\x\+\>' ? 'wK' : 'K'
+nnoremap <buffer> <silent> <C-A> :<C-U><C-R>=v:count1<CR>Cycle<CR>
+nnoremap <buffer> <silent> <C-X> :<C-U><C-R>=v:count1<CR>Cycle!<CR>
+
+let b:undo_ftplugin = b:undo_ftplugin . "|exe 'nunmap <buffer> K'|exe 'nunmap <buffer> <C-A>'|exe 'nunmap <buffer> <C-X>'"
diff --git a/runtime/ftplugin/gitsendemail.vim b/runtime/ftplugin/gitsendemail.vim
new file mode 100644
index 0000000..8fb436e
--- /dev/null
+++ b/runtime/ftplugin/gitsendemail.vim
@@ -0,0 +1,6 @@
+" Vim filetype plugin
+" Language: git send-email message
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2009 Dec 24
+
+runtime! ftplugin/mail.vim
diff --git a/runtime/ftplugin/go.vim b/runtime/ftplugin/go.vim
new file mode 100644
index 0000000..61dc1a1
--- /dev/null
+++ b/runtime/ftplugin/go.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Language: Go
+" Maintainer: David Barnett (https://github.com/google/vim-ft-go)
+" Last Change: 2014 Aug 16
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal formatoptions-=t
+
+setlocal comments=s1:/*,mb:*,ex:*/,://
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl fo< com< cms<'
+
+" vim: sw=2 sts=2 et
diff --git a/runtime/ftplugin/gpg.vim b/runtime/ftplugin/gpg.vim
new file mode 100644
index 0000000..3f890e5
--- /dev/null
+++ b/runtime/ftplugin/gpg.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: gpg(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/gprof.vim b/runtime/ftplugin/gprof.vim
new file mode 100644
index 0000000..750751c
--- /dev/null
+++ b/runtime/ftplugin/gprof.vim
@@ -0,0 +1,32 @@
+" Language: gprof
+" Maintainer: Dominique Pelle <dominique.pelle@gmail.com>
+" Last Change: 2013 Jun 09
+
+" When cursor is on one line of the gprof call graph,
+" calling this function jumps to this function in the call graph.
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin=1
+
+fun! <SID>GprofJumpToFunctionIndex()
+ let l:line = getline('.')
+ if l:line =~ '[\d\+\]$'
+ " We're in a line in the call graph.
+ norm! $y%
+ call search('^' . escape(@", '[]'), 'sw')
+ norm! zz
+ elseif l:line =~ '^\(\s\+[0-9\.]\+\)\{3}\s\+'
+ " We're in line in the flat profile.
+ norm! 55|eby$
+ call search('^\[\d\+\].*\d\s\+' . escape(@", '[]*.') . '\>', 'sW')
+ norm! zz
+ endif
+endfun
+
+" Pressing <C-]> on a line in the gprof flat profile or in
+" the call graph, jumps to the corresponding function inside
+" the flat profile.
+map <buffer> <silent> <C-]> :call <SID>GprofJumpToFunctionIndex()<CR>
+
+" vim:sw=2 fdm=indent
diff --git a/runtime/ftplugin/groovy.vim b/runtime/ftplugin/groovy.vim
new file mode 100644
index 0000000..cc7d6e3
--- /dev/null
+++ b/runtime/ftplugin/groovy.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: groovy
+" Maintainer: Justin M. Keyes <justinkz@gmail.com>
+" Last Change: 2016 May 22
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = 'setlocal commentstring<'
+
+setlocal commentstring=//%s
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/group.vim b/runtime/ftplugin/group.vim
new file mode 100644
index 0000000..e6b76ba
--- /dev/null
+++ b/runtime/ftplugin/group.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: group(5) user group file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments= commentstring= formatoptions-=tcroq formatoptions+=l
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/grub.vim b/runtime/ftplugin/grub.vim
new file mode 100644
index 0000000..cd6e113
--- /dev/null
+++ b/runtime/ftplugin/grub.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: grub(8) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/haml.vim b/runtime/ftplugin/haml.vim
new file mode 100644
index 0000000..6f30169
--- /dev/null
+++ b/runtime/ftplugin/haml.vim
@@ -0,0 +1,71 @@
+" Vim filetype plugin
+" Language: Haml
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2019 Dec 05
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+unlet! b:did_ftplugin
+set matchpairs-=<:>
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+ unlet b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+ unlet b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+ unlet b:match_words
+endif
+
+runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
+let b:did_ftplugin = 1
+
+let &l:define .= empty(&l:define ? '' : '\|') . '^\s*\%(%\w*\)\=\%(\.[[:alnum:]_-]\+\)*#'
+
+" Combine the new set of values with those previously included.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
+endif
+if exists ("b:browsefilter")
+ let s:browsefilter = substitute(b:browsefilter,'\cAll Files (\*\.\*)\t\*\.\*\n','','') . s:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words . ',' . s:match_words
+endif
+
+" Change the browse dialog on Win32 to show mainly Haml-related files
+if has("gui_win32")
+ let b:browsefilter="Haml Files (*.haml)\t*.haml\nSass Files (*.sass)\t*.sass\n" . s:browsefilter
+endif
+
+" Load the combined list of match_words for matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = s:match_words
+endif
+
+setlocal comments= commentstring=-#\ %s
+
+let b:undo_ftplugin = "setl def< cms< com< "
+ \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim:set sw=2:
diff --git a/runtime/ftplugin/hamster.vim b/runtime/ftplugin/hamster.vim
new file mode 100644
index 0000000..5446e72
--- /dev/null
+++ b/runtime/ftplugin/hamster.vim
@@ -0,0 +1,65 @@
+" Vim filetype plugin
+" Language: Hamster Script
+" Version: 2.0.6.0
+" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2021 Jan 19
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl fo< com< tw< commentstring<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Use the # sign for comments
+setlocal comments=:#
+
+" Format comments to be up to 78 characters long
+if &tw == 0
+ setlocal tw=78
+endif
+
+" Comments start with a double quote
+setlocal commentstring=#%s
+
+" Move around functions.
+noremap <silent><buffer> [[ :call search('^\s*sub\>', "bW")<CR>
+noremap <silent><buffer> ]] :call search('^\s*sub\>', "W")<CR>
+noremap <silent><buffer> [] :call search('^\s*endsub\>', "bW")<CR>
+noremap <silent><buffer> ][ :call search('^\s*endsub\>', "W")<CR>
+
+" Move around comments
+noremap <silent><buffer> ]# :call search('^\s*#\@!', "W")<CR>
+noremap <silent><buffer> [# :call search('^\s*#\@!', "bW")<CR>
+
+" Let the matchit plugin know what items can be matched.
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<sub\>:\<return\>:\<endsub\>,' .
+ \ '\<do\|while\|repeat\|for\>:\<break\>:\<continue\>:\<loop\|endwhile\|until\|endfor\>,' .
+ \ '\<if\>:\<else\%[if]\>:\<endif\>'
+
+ " Ignore ":syntax region" commands, the 'end' argument clobbers if-endif
+ " let b:match_skip = 'getline(".") =~ "^\\s*sy\\%[ntax]\\s\\+region" ||
+ " \ synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string"'
+endif
+
+setlocal ignorecase
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" Disabled, 'cpo' is a global option.
+" setlocal cpo+=M " makes \%( match \)
diff --git a/runtime/ftplugin/haskell.vim b/runtime/ftplugin/haskell.vim
new file mode 100644
index 0000000..84f4d05
--- /dev/null
+++ b/runtime/ftplugin/haskell.vim
@@ -0,0 +1,22 @@
+" Vim filetype plugin file
+" Language: Haskell
+" Maintainer: Daniel Campoverde <alx@sillybytes.net>
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2018-08-27
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=s1fl:{-,mb:-,ex:-},:-- commentstring=--\ %s
+setlocal formatoptions-=t formatoptions+=croql
+setlocal omnifunc=haskellcomplete#Complete
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/help.vim b/runtime/ftplugin/help.vim
new file mode 100644
index 0000000..b619a75
--- /dev/null
+++ b/runtime/ftplugin/help.vim
@@ -0,0 +1,22 @@
+" Vim filetype plugin file
+" Language: Vim help file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2018-12-29
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl fo< tw< cole< cocu< keywordprg<"
+
+setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help
+if has("conceal")
+ setlocal cole=2 cocu=nc
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/hgcommit.vim b/runtime/ftplugin/hgcommit.vim
new file mode 100644
index 0000000..d5a6c0a
--- /dev/null
+++ b/runtime/ftplugin/hgcommit.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: hg (Mercurial) commit file
+" Maintainer: Ken Takata <kentkt at csc dot jp>
+" Last Change: 2016 Jan 6
+" Filenames: hg-editor-*.txt
+" License: VIM License
+" URL: https://github.com/k-takata/hg-vim
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal nomodeline
+
+let b:undo_ftplugin = 'setl modeline<'
diff --git a/runtime/ftplugin/hog.vim b/runtime/ftplugin/hog.vim
new file mode 100644
index 0000000..4ee0a9f
--- /dev/null
+++ b/runtime/ftplugin/hog.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin
+" Language: hog (snort.conf)
+" Maintainer: . Victor Roemer, <vroemer@badsec.org>.
+" Last Change: Mar 1, 2013
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:undo_ftplugin = "setl fo< com< cms< def< inc<"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal formatoptions=croq
+setlocal comments=:#
+setlocal commentstring=\c#\ %s
+setlocal define=\c^\s\{-}var
+setlocal include=\c^\s\{-}include
+
+" Move around configurations
+let s:hog_keyword_match = '\c^\s*\<\(preprocessor\\|config\\|output\\|include\\|ipvar\\|portvar\\|var\\|dynamicpreprocessor\\|' .
+ \ 'dynamicengine\\|dynamicdetection\\|activate\\|alert\\|drop\\|block\\|dynamic\\|log\\|pass\\|reject\\|sdrop\\|sblock\)\>'
+
+exec "nnoremap <buffer><silent> ]] :call search('" . s:hog_keyword_match . "', 'W' )<CR>"
+exec "nnoremap <buffer><silent> [[ :call search('" . s:hog_keyword_match . "', 'bW' )<CR>"
+
+if exists("loaded_matchit")
+ let b:match_words =
+ \ '^\s*\<\%(preprocessor\|config\|output\|include\|ipvar\|portvar' .
+ \ '\|var\|dynamicpreprocessor\|dynamicengine\|dynamicdetection' .
+ \ '\|activate\|alert\|drop\|block\|dynamic\|log\|pass\|reject' .
+ \ '\|sdrop\|sblock\>\):$,\::\,:;'
+ let b:match_skip = 'r:\\.\{-}$\|^\s*#.\{-}$\|^\s*$'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/hostconf.vim b/runtime/ftplugin/hostconf.vim
new file mode 100644
index 0000000..563bb8f
--- /dev/null
+++ b/runtime/ftplugin/hostconf.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2007-12-04
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/hostsaccess.vim b/runtime/ftplugin/hostsaccess.vim
new file mode 100644
index 0000000..d32485f
--- /dev/null
+++ b/runtime/ftplugin/hostsaccess.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: hosts_access(5) control file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/html.vim b/runtime/ftplugin/html.vim
new file mode 100644
index 0000000..7579080
--- /dev/null
+++ b/runtime/ftplugin/html.vim
@@ -0,0 +1,51 @@
+" Vim filetype plugin file
+" Language: html
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal matchpairs+=<:>
+setlocal commentstring=<!--%s-->
+setlocal comments=s:<!--,m:\ \ \ \ ,e:-->
+
+if exists("g:ft_html_autocomment") && (g:ft_html_autocomment == 1)
+ setlocal formatoptions-=t formatoptions+=croql
+endif
+
+if exists('&omnifunc')
+ setlocal omnifunc=htmlcomplete#CompleteTags
+ call htmlcomplete#DetectOmniFlavor()
+endif
+
+" HTML: thanks to Johannes Zellner and Benji Fisher.
+if exists("loaded_matchit")
+ let b:match_ignorecase = 1
+ let b:match_words = '<:>,' .
+ \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
+ \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
+ \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
+endif
+
+" Change the :browse e filter to primarily show HTML-related files.
+if has("gui_win32")
+ let b:browsefilter="HTML Files (*.html,*.htm)\t*.htm;*.html\n" .
+ \ "JavaScript Files (*.js)\t*.js\n" .
+ \ "Cascading StyleSheets (*.css)\t*.css\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring< matchpairs< omnifunc< comments< formatoptions<" .
+ \ " | unlet! b:match_ignorecase b:match_skip b:match_words b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/htmldjango.vim b/runtime/ftplugin/htmldjango.vim
new file mode 100644
index 0000000..40e9429
--- /dev/null
+++ b/runtime/ftplugin/htmldjango.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin file
+" Language: Django HTML template
+" Maintainer: Dave Hodder <dmh@dmh.org.uk>
+" Last Change: 2007 Jan 25
+
+" Only use this filetype plugin when no other was loaded.
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Use HTML and Django template ftplugins.
+runtime! ftplugin/html.vim
+runtime! ftplugin/django.vim
diff --git a/runtime/ftplugin/indent.vim b/runtime/ftplugin/indent.vim
new file mode 100644
index 0000000..e6d928a
--- /dev/null
+++ b/runtime/ftplugin/indent.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: indent(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=s1:/*,mb:*,ex:*/ commentstring&
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/initex.vim b/runtime/ftplugin/initex.vim
new file mode 100644
index 0000000..0ee3e8d
--- /dev/null
+++ b/runtime/ftplugin/initex.vim
@@ -0,0 +1,39 @@
+" filetype plugin for TeX and variants
+" Language: TeX (ft=initex)
+" Maintainer: Benji Fisher, Ph.D. <benji@member.AMS.org>
+" Version: 1.0
+" Last Change: Wed 19 Apr 2006
+
+" Only do this when not done yet for this buffer.
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer.
+let b:did_ftplugin = 1
+
+" Avoid problems if running in 'compatible' mode.
+let s:save_cpo = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< define< include< sua<"
+
+" Set 'comments' to format dashed lists in comments
+setlocal com=sO:%\ -,mO:%\ \ ,eO:%%,:%
+
+" Set 'commentstring' to recognize the % comment character:
+" (Thanks to Ajit Thakkar.)
+setlocal cms=%%s
+
+" Allow "[d" to be used to find a macro definition:
+let &l:define='\\\([egx]\|char\|mathchar\|count\|dimen\|muskip\|skip\|toks\)\='
+ \ . 'def\|\\font\|\\\(future\)\=let'
+
+" Tell Vim to recognize \input bar :
+let &l:include = '\\input'
+setlocal suffixesadd=.tex
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim:sts=2:sw=2:
diff --git a/runtime/ftplugin/ishd.vim b/runtime/ftplugin/ishd.vim
new file mode 100644
index 0000000..33ef151
--- /dev/null
+++ b/runtime/ftplugin/ishd.vim
@@ -0,0 +1,33 @@
+" Vim filetype plugin file
+" Language: InstallShield (ft=ishd)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Sat, 24 May 2003 11:55:36 CEST
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal foldmethod=syntax
+
+" Using line continuation here.
+let s:cpo_save = &cpo
+set cpo-=C
+
+" matchit support
+if exists("loaded_matchit")
+ let b:match_ignorecase=0
+ let b:match_words=
+ \ '\%(^\s*\)\@<=\<function\>\s\+[^()]\+\s*(:\%(^\s*\)\@<=\<begin\>\s*$:\%(^\s*\)\@<=\<return\>:\%(^\s*\)\@<=\<end\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<repeat\>\s*$:\%(^\s*\)\@<=\<until\>\s\+.\{-}\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<switch\>\s*(.\{-}):\%(^\s*\)\@<=\<\%(case\|default\)\>:\%(^\s*\)\@<=\<endswitch\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<while\>\s*(.\{-}):\%(^\s*\)\@<=\<endwhile\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<for\>.\{-}\<\%(to\|downto\)\>:\%(^\s*\)\@<=\<endfor\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<if\>\s*(.\{-})\s*then:\%(^\s*\)\@<=\<else\s*if\>\s*([^)]*)\s*then:\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<endif\>\s*;\s*$'
+endif
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "InstallShield Files (*.rul)\t*.rul\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/j.vim b/runtime/ftplugin/j.vim
new file mode 100644
index 0000000..3cd0cb8
--- /dev/null
+++ b/runtime/ftplugin/j.vim
@@ -0,0 +1,81 @@
+" Vim filetype plugin
+" Language: J
+" Maintainer: David Bürgin <dbuergin@gluet.ch>
+" URL: https://gitlab.com/glts/vim-j
+" Last Change: 2015-10-27
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+setlocal iskeyword=48-57,A-Z,a-z,_
+setlocal comments=:NB.
+setlocal commentstring=NB.\ %s
+setlocal formatoptions-=t
+setlocal matchpairs=(:)
+setlocal path-=/usr/include
+
+" Includes. To make the shorthand form "require 'web/cgi'" work, double the
+" last path component. Also strip off leading folder names like "~addons/".
+setlocal include=\\v^\\s*(load\|require)\\s*'\\zs\\f+\\ze'
+setlocal includeexpr=substitute(substitute(tr(v:fname,'\\','/'),'\\v^[^~][^/.]*(/[^/.]+)$','&\\1',''),'\\v^\\~[^/]+/','','')
+setlocal suffixesadd=.ijs
+
+let b:undo_ftplugin = 'setlocal suffixesadd< includeexpr< include< path< matchpairs< formatoptions< commentstring< comments< iskeyword<'
+
+" Section movement with ]] ][ [[ []. The start/end patterns below are amended
+" inside the function in order to avoid matching on the current cursor line.
+let s:sectionstart = '\%(\s*Note\|.\{-}\<\%([0-4]\|13\|noun\|adverb\|conjunction\|verb\|monad\|dyad\)\s\+\%(:\s*0\|def\s\+0\|define\)\)\>.*'
+let s:sectionend = '\s*)\s*'
+
+function! s:SearchSection(end, backwards, visualmode) abort
+ if a:visualmode !=# ''
+ normal! gv
+ endif
+ let l:flags = a:backwards ? 'bsW' : 'sW'
+ if a:end
+ call search('^' . s:sectionend . (a:backwards ? '\n\_.\{-}\%#' : '$'), l:flags)
+ else
+ call search('^' . s:sectionstart . (a:backwards ? '\n\_.\{-}\%#' : '$'), l:flags)
+ endif
+endfunction
+
+noremap <buffer> <silent> ]] :<C-U>call <SID>SearchSection(0, 0, '')<CR>
+xnoremap <buffer> <silent> ]] :<C-U>call <SID>SearchSection(0, 0, visualmode())<CR>
+sunmap <buffer> ]]
+noremap <buffer> <silent> ][ :<C-U>call <SID>SearchSection(1, 0, '')<CR>
+xnoremap <buffer> <silent> ][ :<C-U>call <SID>SearchSection(1, 0, visualmode())<CR>
+sunmap <buffer> ][
+noremap <buffer> <silent> [[ :<C-U>call <SID>SearchSection(0, 1, '')<CR>
+xnoremap <buffer> <silent> [[ :<C-U>call <SID>SearchSection(0, 1, visualmode())<CR>
+sunmap <buffer> [[
+noremap <buffer> <silent> [] :<C-U>call <SID>SearchSection(1, 1, '')<CR>
+xnoremap <buffer> <silent> [] :<C-U>call <SID>SearchSection(1, 1, visualmode())<CR>
+sunmap <buffer> []
+
+let b:undo_ftplugin .= ' | silent! execute "unmap <buffer> ]]"'
+ \ . ' | silent! execute "unmap <buffer> ]["'
+ \ . ' | silent! execute "unmap <buffer> [["'
+ \ . ' | silent! execute "unmap <buffer> []"'
+
+" Browse dialog filter on Windows (see ":help browsefilter")
+if has('gui_win32') && !exists('b:browsefilter')
+ let b:browsefilter = "J Script Files (*.ijs)\t*.ijs\n"
+ \ . "All Files (*.*)\t*.*\n"
+ let b:undo_ftplugin .= ' | unlet! b:browsefilter'
+endif
+
+" Enhanced "%" matching (see ":help matchit")
+if exists('loaded_matchit') && !exists('b:match_words')
+ let b:match_ignorecase = 0
+ let b:match_words = '^\%(\s*Note\|.\{-}\<\%([0-4]\|13\|noun\|adverb\|conjunction\|verb\|monad\|dyad\)\s\+\%(\:\s*0\|def\s\+0\|define\)\)\>:^\s*\:\s*$:^\s*)\s*$'
+ \ . ',\<\%(for\%(_\a\k*\)\=\|if\|select\|try\|whil\%(e\|st\)\)\.:\<\%(case\|catch[dt]\=\|else\%(if\)\=\|fcase\)\.:\<end\.'
+ let b:undo_ftplugin .= ' | unlet! b:match_ignorecase b:match_words'
+endif
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim
new file mode 100644
index 0000000..292cb6b
--- /dev/null
+++ b/runtime/ftplugin/java.vim
@@ -0,0 +1,51 @@
+" Vim filetype plugin file
+" Language: Java
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Change: 2012 Mar 11
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" For filename completion, prefer the .java extension over the .class
+" extension.
+set suffixes+=.class
+
+" Enable gf on import statements. Convert . in the package
+" name to / and append .java to the name, then search the path.
+setlocal includeexpr=substitute(v:fname,'\\.','/','g')
+setlocal suffixesadd=.java
+if exists("g:ftplugin_java_source_path")
+ let &l:path=g:ftplugin_java_source_path . ',' . &l:path
+endif
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal formatoptions-=t formatoptions+=croql
+
+" Set 'comments' to format dashed lists in comments. Behaves just like C.
+setlocal comments& comments^=sO:*\ -,mO:*\ \ ,exO:*/
+
+setlocal commentstring=//%s
+
+" Change the :browse e filter to primarily show Java-related files.
+if has("gui_win32")
+ let b:browsefilter="Java Files (*.java)\t*.java\n" .
+ \ "Properties Files (*.prop*)\t*.prop*\n" .
+ \ "Manifest Files (*.mf)\t*.mf\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal suffixes< suffixesadd<" .
+ \ " formatoptions< comments< commentstring< path< includeexpr<" .
+ \ " | unlet! b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/javascript.vim b/runtime/ftplugin/javascript.vim
new file mode 100644
index 0000000..9a0b29e
--- /dev/null
+++ b/runtime/ftplugin/javascript.vim
@@ -0,0 +1,75 @@
+" Vim filetype plugin file
+" Language: Javascript
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2020 Jun 23
+" Contributor: Romain Lafourcade <romainlafourcade@gmail.com>
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal formatoptions-=t formatoptions+=croql
+
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&ofu')
+ setlocal omnifunc=javascriptcomplete#CompleteJS
+endif
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+setlocal commentstring=//%s
+
+" Change the :browse e filter to primarily show JavaScript-related files.
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter =
+ \ "JavaScript Files (*.js)\t*.js\n"
+ \ .. "JSX Files (*.jsx)\t*.jsx\n"
+ \ .. "JavaScript Modules (*.es, *.es6, *.cjs, *.mjs, *.jsm)\t*.es;*.es6;*.cjs;*.mjs;*.jsm\n"
+ \ .. "Vue Templates (*.vue)\t*.vue\n"
+ \ .. "JSON Files (*.json)\t*.json\n"
+ \ .. "All Files (*.*)\t*.*\n"
+endif
+
+" The following suffixes should be implied when resolving filenames
+setlocal suffixesadd+=.js,.jsx,.es,.es6,.cjs,.mjs,.jsm,.vue,.json
+
+" The following suffixes should have low priority
+" .snap jest snapshot
+setlocal suffixes+=.snap
+
+" Remove irrelevant part of 'path'.
+" User is expected to augment it with contextually-relevant paths
+setlocal path-=/usr/include
+
+" Matchit configuration
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<do\>:\<while\>,'
+ \ .. '<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,'
+ \ .. '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>'
+endif
+
+" Set 'define' to a comprehensive value
+let &l:define =
+ \ '\(^\s*(*async\s\+function\|(*function\)'
+ \ .. '\|^\s*\(\*\|static\|async\|get\|set\|\i\+\.\)'
+ \ .. '\|^\s*\(\ze\i\+\)\(([^)]*).*{$\|\s*[:=,]\)'
+ \ .. '\|^\s*\(export\s\+\|export\s\+default\s\+\)*\(var\|let\|const\|function\|class\)'
+ \ .. '\|\<as\>'
+
+let b:undo_ftplugin =
+ \ "setl fo< ofu< com< cms< sua< su< def< pa<"
+ \ .. "| unlet! b:browsefilter b:match_ignorecase b:match_words"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: textwidth=78 tabstop=8 shiftwidth=4 softtabstop=4 expandtab
diff --git a/runtime/ftplugin/javascriptreact.vim b/runtime/ftplugin/javascriptreact.vim
new file mode 100644
index 0000000..b9c39d5
--- /dev/null
+++ b/runtime/ftplugin/javascriptreact.vim
@@ -0,0 +1,7 @@
+" Vim filetype plugin file
+" Language: JavaScript React
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2020 Aug 19
+
+" Placeholder for backwards compatilibity: .jsx used to stand for JavaScript.
+runtime! ftplugin/javascript.vim
diff --git a/runtime/ftplugin/jproperties.vim b/runtime/ftplugin/jproperties.vim
new file mode 100644
index 0000000..c0e7800
--- /dev/null
+++ b/runtime/ftplugin/jproperties.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin
+" Language: Java properties file
+" Maintainer: None
+" Last Change: 2019 Dec 01
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal formatoptions-=t
+setlocal comments=:#,:!
+setlocal commentstring=#\ %s
+
+let b:undo_ftplugin = "setl cms< com< fo<"
diff --git a/runtime/ftplugin/json.vim b/runtime/ftplugin/json.vim
new file mode 100644
index 0000000..c79b13f
--- /dev/null
+++ b/runtime/ftplugin/json.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin
+" Language: JSON
+" Maintainer: David Barnett <daviebdawg+vim@gmail.com>
+" Last Change: 2014 Jul 16
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = 'setlocal formatoptions< comments< commentstring<'
+
+setlocal formatoptions-=t
+
+" JSON has no comments.
+setlocal comments=
+setlocal commentstring=
diff --git a/runtime/ftplugin/jsp.vim b/runtime/ftplugin/jsp.vim
new file mode 100644
index 0000000..fbba863
--- /dev/null
+++ b/runtime/ftplugin/jsp.vim
@@ -0,0 +1,67 @@
+" Vim filetype plugin file
+" Language: jsp
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "Java Files (*.java)\t*.java\n" .
+ \ "HTML Files (*.html, *.htm)\t*.html;*.htm\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+unlet b:did_ftplugin
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+ unlet b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+ unlet b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+ unlet b:match_words
+endif
+
+runtime! ftplugin/java.vim ftplugin/java_*.vim ftplugin/java/*.vim
+let b:did_ftplugin = 1
+
+" Combine the new set of values with those previously included.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
+endif
+if exists ("b:browsefilter")
+ let s:browsefilter = b:browsefilter . s:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words . ',' . s:match_words
+endif
+
+" Load the combined list of match_words for matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = s:match_words
+endif
+
+" Change the :browse e filter to primarily show JSP-related files.
+if has("gui_win32")
+ let b:browsefilter="JSP Files (*.jsp)\t*.jsp\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/kconfig.vim b/runtime/ftplugin/kconfig.vim
new file mode 100644
index 0000000..940ba74
--- /dev/null
+++ b/runtime/ftplugin/kconfig.vim
@@ -0,0 +1,27 @@
+" Vim filetype plugin file
+" Vim syntax file
+" Maintainer: Christian Brabandt <cb@256bit.org>
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2015-05-29
+" License: Vim (see :h license)
+" Repository: https://github.com/chrisbra/vim-kconfig
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+" For matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = '^\<menu\>:\<endmenu\>,^\<if\>:\<endif\>,^\<choice\>:\<endchoice\>'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/kwt.vim b/runtime/ftplugin/kwt.vim
new file mode 100644
index 0000000..05b40d4
--- /dev/null
+++ b/runtime/ftplugin/kwt.vim
@@ -0,0 +1,32 @@
+" Vim filetype plugin file
+" Language: Kimwitu++
+" Maintainer: Michael Piefel <entwurf@piefel.de>
+" Last Change: 10 March 2012
+
+" Behaves almost like C++
+runtime! ftplugin/cpp.vim ftplugin/cpp_*.vim ftplugin/cpp/*.vim
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Limit the browser to related files
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Kimwitu/Kimwitu++ Files (*.k)\t*.k\n" .
+ \ "Lex/Flex Files (*.l)\t*.l\n" .
+ \ "Yacc/Bison Files (*.y)\t*.y\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Set the errorformat for the Kimwitu++ compiler
+set efm+=kc%.%#:\ error\ at\ %f:%l:\ %m
+
+if exists("b:undo_ftplugin")
+ let b:undo_ftplugin = b:undo_ftplugin . " | setlocal efm<"
+ \ . "| unlet! b:browsefiler"
+else
+ let b:undo_ftplugin = "setlocal efm<"
+ \ . "| unlet! b:browsefiler"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/ld.vim b/runtime/ftplugin/ld.vim
new file mode 100644
index 0000000..1ab80d5
--- /dev/null
+++ b/runtime/ftplugin/ld.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: ld(1) script
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=s1:/*,mb:*,ex:*/ commentstring=/*%s*/ include=^\\s*INCLUDE
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/less.vim b/runtime/ftplugin/less.vim
new file mode 100644
index 0000000..637e9d2
--- /dev/null
+++ b/runtime/ftplugin/less.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin
+" Language: less
+" Maintainer: Alessandro Vioni <jenoma@gmail.com>
+" URL: https://github.com/genoma/vim-less
+" Last Change: 2014 November 24
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl cms< def< inc< inex< ofu< sua<"
+
+setlocal formatoptions-=t formatoptions+=croql
+
+setlocal comments=:// commentstring=//\ %s
+
+setlocal omnifunc=csscomplete#CompleteCSS
+setlocal suffixesadd=.less
diff --git a/runtime/ftplugin/lftp.vim b/runtime/ftplugin/lftp.vim
new file mode 100644
index 0000000..5bc496c
--- /dev/null
+++ b/runtime/ftplugin/lftp.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: lftp(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/libao.vim b/runtime/ftplugin/libao.vim
new file mode 100644
index 0000000..0ce5831
--- /dev/null
+++ b/runtime/ftplugin/libao.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: libao.conf(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/limits.vim b/runtime/ftplugin/limits.vim
new file mode 100644
index 0000000..90a10a6
--- /dev/null
+++ b/runtime/ftplugin/limits.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: limits(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/liquid.vim b/runtime/ftplugin/liquid.vim
new file mode 100644
index 0000000..b211a88
--- /dev/null
+++ b/runtime/ftplugin/liquid.vim
@@ -0,0 +1,61 @@
+" Vim filetype plugin
+" Language: Liquid
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2010 May 21
+
+if exists('b:did_ftplugin')
+ finish
+endif
+
+if !exists('g:liquid_default_subtype')
+ let g:liquid_default_subtype = 'html'
+endif
+
+if !exists('b:liquid_subtype')
+ let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
+ let b:liquid_subtype = matchstr(s:lines,'liquid_subtype=\zs\w\+')
+ if b:liquid_subtype == ''
+ let b:liquid_subtype = matchstr(&filetype,'^liquid\.\zs\w\+')
+ endif
+ if b:liquid_subtype == ''
+ let b:liquid_subtype = matchstr(substitute(expand('%:t'),'\c\%(\.liquid\)\+$','',''),'\.\zs\w\+$')
+ endif
+ if b:liquid_subtype == ''
+ let b:liquid_subtype = g:liquid_default_subtype
+ endif
+endif
+
+if exists('b:liquid_subtype') && b:liquid_subtype != ''
+ exe 'runtime! ftplugin/'.b:liquid_subtype.'.vim ftplugin/'.b:liquid_subtype.'_*.vim ftplugin/'.b:liquid_subtype.'/*.vim'
+else
+ runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+endif
+let b:did_ftplugin = 1
+
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin .= '|'
+else
+ let b:undo_ftplugin = ''
+endif
+if exists('b:browsefilter')
+ let b:browsefilter = "\n".b:browsefilter
+else
+ let b:browsefilter = ''
+endif
+if exists('b:match_words')
+ let b:match_words .= ','
+elseif exists('loaded_matchit')
+ let b:match_words = ''
+endif
+
+if has('gui_win32')
+ let b:browsefilter="Liquid Files (*.liquid)\t*.liquid" . b:browsefilter
+endif
+
+if exists('loaded_matchit')
+ let b:match_words .= '\<\%(if\w*\|unless\|case\)\>:\<\%(elsif\|else\|when\)\>:\<end\%(if\w*\|unless\|case\)\>,\<\%(for\|tablerow\)\>:\%({%\s*\)\@<=empty\>:\<end\%(for\|tablerow\)\>,<\(capture\|comment\|highlight\)\>:\<end\1\>'
+endif
+
+setlocal commentstring={%\ comment\ %}%s{%\ endcomment\ %}
+
+let b:undo_ftplugin .= 'setl cms< | unlet! b:browsefilter b:match_words'
diff --git a/runtime/ftplugin/lisp.vim b/runtime/ftplugin/lisp.vim
new file mode 100644
index 0000000..130f30b
--- /dev/null
+++ b/runtime/ftplugin/lisp.vim
@@ -0,0 +1,26 @@
+" Vim filetype plugin
+" Language: Lisp
+" Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
+" URL: http://sites.google.com/site/khorser/opensource/vim
+" Original author: Dorai Sitaram <ds26@gte.com>
+" Original URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: Oct 23, 2013
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+setl comments=:;
+setl define=^\\s*(def\\k*
+setl formatoptions-=t
+setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
+setl lisp
+setl commentstring=;%s
+
+setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|#
+
+let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp< commentstring<"
diff --git a/runtime/ftplugin/logcheck.vim b/runtime/ftplugin/logcheck.vim
new file mode 100644
index 0000000..9d664b2
--- /dev/null
+++ b/runtime/ftplugin/logcheck.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin file
+" Language: Logcheck
+" Maintainer: Debian Vim Maintainers
+" Last Change: 2018 Dec 27
+" License: Vim License
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/logcheck.vim
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = 'setl fo<'
+
+" Do not hard-wrap non-comment lines since each line is a self-contained
+" regular expression
+setlocal formatoptions-=t
diff --git a/runtime/ftplugin/loginaccess.vim b/runtime/ftplugin/loginaccess.vim
new file mode 100644
index 0000000..d27114a
--- /dev/null
+++ b/runtime/ftplugin/loginaccess.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: login.access(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/logindefs.vim b/runtime/ftplugin/logindefs.vim
new file mode 100644
index 0000000..7873396
--- /dev/null
+++ b/runtime/ftplugin/logindefs.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: login.defs(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/logtalk.dict b/runtime/ftplugin/logtalk.dict
new file mode 100644
index 0000000..3fcdfc6
--- /dev/null
+++ b/runtime/ftplugin/logtalk.dict
@@ -0,0 +1,262 @@
+abolish
+abolish_category
+abolish_events
+abolish_object
+abolish_protocol
+abs
+acos
+acyclic_term
+after
+alias
+always_true_or_false_goals
+arg
+asin
+asserta
+assertz
+atan
+atan2
+atom
+atomic
+atom_chars
+atom_chars
+atom_codes
+atom_codes
+atom_concat
+atom_concat
+atom_length
+at_end_of_stream
+bagof
+before
+built_in
+call
+callable
+calls
+catch
+category
+category_property
+ceiling
+char_code
+char_conversion
+clause
+clean
+close
+code_prefix
+coinduction
+coinductive
+compare
+complements
+complements
+complements_object
+compound
+conforms_to_protocol
+context
+context_switching_calls
+copy_term
+cos
+create_category
+create_logtalk_flag
+create_object
+create_protocol
+current_category
+current_char_conversion
+current_event
+current_input
+current_logtalk_flag
+current_object
+current_op
+current_output
+current_predicate
+current_prolog_flag
+current_protocol
+debug
+define_events
+deprecated
+discontiguous
+div
+domain_error
+duplicated_directives
+dynamic
+dynamic_declarations
+elif
+else
+encoding
+encoding_directive
+endif
+end_category
+end_object
+end_protocol
+engines
+ensure_loaded
+evaluation_error
+events
+existence_error
+exp
+expand_goal
+expand_term
+export
+extends
+extends_category
+extends_object
+extends_protocol
+fail
+false
+findall
+float
+float_fractional_part
+float_integer_part
+floor
+flush_output
+forall
+forward
+functor
+get_byte
+get_char
+get_code
+goal_expansion
+ground
+halt
+hook
+if
+ignore
+implements
+implements_protocol
+imports
+imports_category
+include
+info
+initialization
+instantiates
+instantiates_class
+instantiation_error
+integer
+keysort
+lambda_variables
+log
+logtalk_compile
+logtalk_library_path
+logtalk_load
+logtalk_load_context
+logtalk_make
+logtalk_make_target_action
+max
+meta_non_terminal
+meta_predicate
+min
+missing_directives
+mod
+mode
+modules
+multifile
+nl
+nonvar
+number
+numbervars
+number_chars
+number_chars
+number_codes
+number_codes
+object
+object_property
+once
+op
+open
+optimize
+parameter
+peek_byte
+peek_char
+peek_code
+permission_error
+phrase
+portability
+predicate_property
+private
+prolog_compatible_version
+prolog_compiler
+prolog_dialect
+prolog_loader
+prolog_version
+protected
+protocol
+protocol_property
+public
+put_byte
+put_char
+put_code
+read
+read_term
+redefined_built_ins
+reexport
+reload
+rem
+repeat
+report
+representation_error
+resource_error
+retract
+retractall
+round
+scratch_directory
+self
+sender
+setof
+set_input
+set_logtalk_flag
+set_output
+set_prolog_flag
+set_stream_position
+sign
+sin
+singleton_variables
+sort
+source_data
+specializes
+specializes_class
+sqrt
+stream_property
+subsumes_term
+sub_atom
+suspicious_calls
+synchronized
+syntax_error
+system_error
+tabling
+tan
+term_expansion
+term_variables
+this
+threaded
+threaded_call
+threaded_engine
+threaded_engine_create
+threaded_engine_destroy
+threaded_engine_fetch
+threaded_engine_next
+threaded_engine_next_reified
+threaded_engine_post
+threaded_engine_self
+threaded_engine_yield
+threaded_exit
+threaded_ignore
+threaded_notify
+threaded_once
+threaded_peek
+threaded_wait
+threads
+throw
+trivial_goal_fails
+true
+truncate
+type_error
+undefined_predicates
+underscore_variables
+unify_with_occurs_check
+unknown_entities
+unknown_predicates
+uses
+use_module
+var
+version
+write
+writeq
+write_canonical
+xor
diff --git a/runtime/ftplugin/logtalk.vim b/runtime/ftplugin/logtalk.vim
new file mode 100644
index 0000000..667907c
--- /dev/null
+++ b/runtime/ftplugin/logtalk.vim
@@ -0,0 +1,19 @@
+" Logtalk filetype plugin file
+" Language: Logtalk
+" Maintainer: Paulo Moura <pmoura@logtalk.org>
+" Latest Revision: 2018-08-03
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl ts< sw< fdm< fdc< ai< dict<"
+
+setlocal ts=4
+setlocal sw=4
+setlocal fdm=syntax
+setlocal fdn=10
+setlocal fdc=2
+setlocal autoindent
+setlocal dict=$VIMRUNTIME/ftplugin/logtalk.dict
diff --git a/runtime/ftplugin/lprolog.vim b/runtime/ftplugin/lprolog.vim
new file mode 100644
index 0000000..a8a3c61
--- /dev/null
+++ b/runtime/ftplugin/lprolog.vim
@@ -0,0 +1,37 @@
+" Vim settings file
+" Language: LambdaProlog (Teyjus)
+" Maintainer: Markus Mottl <markus.mottl@gmail.com>
+" URL: http://www.ocaml.info/vim/ftplugin/lprolog.vim
+" Last Change: 2006 Feb 05
+" 2001 Sep 16 - fixed 'no_mail_maps'-bug (MM)
+" 2001 Sep 02 - initial release (MM)
+
+" Only do these settings when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't do other file type settings for this buffer
+let b:did_ftplugin = 1
+
+" Error format
+setlocal efm=%+A./%f:%l.%c:\ %m formatprg=fmt\ -w75\ -p\\%
+
+" Formatting of comments
+setlocal formatprg=fmt\ -w75\ -p\\%
+
+" Add mappings, unless the user didn't want this.
+if !exists("no_plugin_maps") && !exists("no_lprolog_maps")
+ " Uncommenting
+ if !hasmapto('<Plug>Comment')
+ nmap <buffer> <LocalLeader>c <Plug>LUncomOn
+ vmap <buffer> <LocalLeader>c <Plug>BUncomOn
+ nmap <buffer> <LocalLeader>C <Plug>LUncomOff
+ vmap <buffer> <LocalLeader>C <Plug>BUncomOff
+ endif
+
+ nnoremap <buffer> <Plug>LUncomOn mz0i/* <ESC>$A */<ESC>`z
+ nnoremap <buffer> <Plug>LUncomOff <ESC>:s/^\/\* \(.*\) \*\//\1/<CR>
+ vnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i/*<ESC>`>o<ESC>0i*/<ESC>`<
+ vnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
+endif
diff --git a/runtime/ftplugin/lua.vim b/runtime/ftplugin/lua.vim
new file mode 100644
index 0000000..3454a4d
--- /dev/null
+++ b/runtime/ftplugin/lua.vim
@@ -0,0 +1,42 @@
+" Vim filetype plugin file.
+" Language: Lua 4.0+
+" Maintainer: Max Ischenko <mfi@ukr.net>
+" Last Change: 2012 Mar 07
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Set 'formatoptions' to break comment lines but not other lines, and insert
+" the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+setlocal com=:--
+setlocal cms=--%s
+setlocal suffixesadd=.lua
+
+
+" The following lines enable the macros/matchit.vim plugin for
+" extended matching with the % key.
+if exists("loaded_matchit")
+
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<\%(do\|function\|if\)\>:' .
+ \ '\<\%(return\|else\|elseif\)\>:' .
+ \ '\<end\>,' .
+ \ '\<repeat\>:\<until\>'
+
+endif " exists("loaded_matchit")
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+let b:undo_ftplugin = "setlocal fo< com< cms< suffixesadd<"
diff --git a/runtime/ftplugin/m4.vim b/runtime/ftplugin/m4.vim
new file mode 100644
index 0000000..3745507
--- /dev/null
+++ b/runtime/ftplugin/m4.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: m4
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:#,:dnl commentstring=dnl\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/mail.vim b/runtime/ftplugin/mail.vim
new file mode 100644
index 0000000..2a6bf4c
--- /dev/null
+++ b/runtime/ftplugin/mail.vim
@@ -0,0 +1,38 @@
+" Vim filetype plugin file
+" Language: Mail
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2012 Nov 20
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl modeline< tw< fo< comments<"
+
+" Don't use modelines in e-mail messages, avoid trojan horses and nasty
+" "jokes" (e.g., setting 'textwidth' to 5).
+setlocal nomodeline
+
+" many people recommend keeping e-mail messages 72 chars wide
+if &tw == 0
+ setlocal tw=72
+endif
+
+" Set 'formatoptions' to break text lines and keep the comment leader ">".
+setlocal fo+=tcql
+
+" Add n:> to 'comments, in case it was removed elsewhere
+setlocal comments+=n:>
+
+" Add mappings, unless the user doesn't want this.
+if !exists("no_plugin_maps") && !exists("no_mail_maps")
+ " Quote text by inserting "> "
+ if !hasmapto('<Plug>MailQuote')
+ vmap <buffer> <LocalLeader>q <Plug>MailQuote
+ nmap <buffer> <LocalLeader>q <Plug>MailQuote
+ endif
+ vnoremap <buffer> <Plug>MailQuote :s/^/> /<CR>:noh<CR>``
+ nnoremap <buffer> <Plug>MailQuote :.,$s/^/> /<CR>:noh<CR>``
+endif
diff --git a/runtime/ftplugin/mailaliases.vim b/runtime/ftplugin/mailaliases.vim
new file mode 100644
index 0000000..0ae4b45
--- /dev/null
+++ b/runtime/ftplugin/mailaliases.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/mailcap.vim b/runtime/ftplugin/mailcap.vim
new file mode 100644
index 0000000..ba8573c
--- /dev/null
+++ b/runtime/ftplugin/mailcap.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: Mailcap configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/make.vim b/runtime/ftplugin/make.vim
new file mode 100644
index 0000000..168bc38
--- /dev/null
+++ b/runtime/ftplugin/make.vim
@@ -0,0 +1,33 @@
+" Vim filetype plugin file
+" Language: Make
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2020 Oct 16
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl et< sts< sw< fo< com< cms< inc<"
+
+" Make sure a hard tab is used, required for most make programs
+setlocal noexpandtab softtabstop=0 shiftwidth=0
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set 'comments' to format dashed lists in comments
+setlocal com=sO:#\ -,mO:#\ \ ,b:#
+
+" Set 'commentstring' to put the marker after a #.
+setlocal commentstring=#\ %s
+
+" Including files.
+let &l:include = '^\s*include'
+
+" For matchit.vim, suggested by Albert Netymk and Ken Takata.
+if exists("loaded_matchit")
+ let b:match_words = '^ *ifn\=\(eq\|def\)\>:^ *else\(\s\+ifn\=\(eq\|def\)\)\=\>:^ *endif\>,\<define\>:\<endef\>,^!\s*if\(n\=def\)\=\>:^!\s*else\(if\(n\=def\)\=\)\=\>:^!\s*endif\>'
+endif
diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim
new file mode 100644
index 0000000..e62637a
--- /dev/null
+++ b/runtime/ftplugin/man.vim
@@ -0,0 +1,253 @@
+" Vim filetype plugin file
+" Language: man
+" Maintainer: Jason Franklin <vim@justemail.net>
+" Maintainer: SungHyun Nam <goweol@gmail.com>
+" Last Change: 2020 Oct 09
+
+" To make the ":Man" command available before editing a manual page, source
+" this script from your startup vimrc file.
+
+" If 'filetype' isn't "man", we must have been called to only define ":Man".
+if &filetype == "man"
+
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+ finish
+ endif
+ let b:did_ftplugin = 1
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+if &filetype == "man"
+ " allow dot and dash in manual page name.
+ setlocal iskeyword+=\.,-
+ let b:undo_ftplugin = "setlocal iskeyword<"
+
+ " Add mappings, unless the user didn't want this.
+ if !exists("no_plugin_maps") && !exists("no_man_maps")
+ if !hasmapto('<Plug>ManBS')
+ nmap <buffer> <LocalLeader>h <Plug>ManBS
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|silent! nunmap <buffer> <LocalLeader>h'
+ endif
+ nnoremap <buffer> <Plug>ManBS :%s/.\b//g<CR>:setl nomod<CR>''
+
+ nnoremap <buffer> <silent> <c-]> :call <SID>PreGetPage(v:count)<CR>
+ nnoremap <buffer> <silent> <c-t> :call <SID>PopPage()<CR>
+ nnoremap <buffer> <silent> q :q<CR>
+
+ " Add undo commands for the maps
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|silent! nunmap <buffer> <Plug>ManBS'
+ \ . '|silent! nunmap <buffer> <c-]>'
+ \ . '|silent! nunmap <buffer> <c-t>'
+ \ . '|silent! nunmap <buffer> q'
+ endif
+
+ if exists('g:ft_man_folding_enable') && (g:ft_man_folding_enable == 1)
+ setlocal foldmethod=indent foldnestmax=1 foldenable
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|silent! setl fdm< fdn< fen<'
+ endif
+
+endif
+
+if exists(":Man") != 2
+ com -nargs=+ -complete=shellcmd Man call s:GetPage(<q-mods>, <f-args>)
+ nmap <Leader>K :call <SID>PreGetPage(0)<CR>
+ nmap <Plug>ManPreGetPage :call <SID>PreGetPage(0)<CR>
+endif
+
+" Define functions only once.
+if !exists("s:man_tag_depth")
+
+let s:man_tag_depth = 0
+
+let s:man_sect_arg = ""
+let s:man_find_arg = "-w"
+try
+ if !has("win32") && $OSTYPE !~ 'cygwin\|linux' && system('uname -s') =~ "SunOS" && system('uname -r') =~ "^5"
+ let s:man_sect_arg = "-s"
+ let s:man_find_arg = "-l"
+ endif
+catch /E145:/
+ " Ignore the error in restricted mode
+endtry
+
+func s:PreGetPage(cnt)
+ if a:cnt == 0
+ let old_isk = &iskeyword
+ if &ft == 'man'
+ setl iskeyword+=(,)
+ endif
+ let str = expand("<cword>")
+ let &l:iskeyword = old_isk
+ let page = substitute(str, '(*\(\k\+\).*', '\1', '')
+ let sect = substitute(str, '\(\k\+\)(\([^()]*\)).*', '\2', '')
+ if match(sect, '^[0-9 ]\+$') == -1
+ let sect = ""
+ endif
+ if sect == page
+ let sect = ""
+ endif
+ else
+ let sect = a:cnt
+ let page = expand("<cword>")
+ endif
+ call s:GetPage('', sect, page)
+endfunc
+
+func s:GetCmdArg(sect, page)
+
+ if empty(a:sect)
+ return shellescape(a:page)
+ endif
+
+ return s:man_sect_arg . ' ' . shellescape(a:sect) . ' ' . shellescape(a:page)
+endfunc
+
+func s:FindPage(sect, page)
+ let l:cmd = printf('man %s %s', s:man_find_arg, s:GetCmdArg(a:sect, a:page))
+ call system(l:cmd)
+
+ if v:shell_error
+ return 0
+ endif
+
+ return 1
+endfunc
+
+func s:GetPage(cmdmods, ...)
+ if a:0 >= 2
+ let sect = a:1
+ let page = a:2
+ elseif a:0 >= 1
+ let sect = ""
+ let page = a:1
+ else
+ return
+ endif
+
+ " To support: nmap K :Man <cword>
+ if page == '<cword>'
+ let page = expand('<cword>')
+ endif
+
+ if !exists('g:ft_man_no_sect_fallback') || (g:ft_man_no_sect_fallback == 0)
+ if sect != "" && s:FindPage(sect, page) == 0
+ let sect = ""
+ endif
+ endif
+ if s:FindPage(sect, page) == 0
+ let msg = 'man.vim: no manual entry for "' . page . '"'
+ if !empty(sect)
+ let msg .= ' in section ' . sect
+ endif
+ echomsg msg
+ return
+ endif
+ exec "let s:man_tag_buf_".s:man_tag_depth." = ".bufnr("%")
+ exec "let s:man_tag_lin_".s:man_tag_depth." = ".line(".")
+ exec "let s:man_tag_col_".s:man_tag_depth." = ".col(".")
+ let s:man_tag_depth = s:man_tag_depth + 1
+
+ let open_cmd = 'edit'
+
+ " Use an existing "man" window if it exists, otherwise open a new one.
+ if &filetype != "man"
+ let thiswin = winnr()
+ exe "norm! \<C-W>b"
+ if winnr() > 1
+ exe "norm! " . thiswin . "\<C-W>w"
+ while 1
+ if &filetype == "man"
+ break
+ endif
+ exe "norm! \<C-W>w"
+ if thiswin == winnr()
+ break
+ endif
+ endwhile
+ endif
+ if &filetype != "man"
+ if exists("g:ft_man_open_mode")
+ if g:ft_man_open_mode == 'vert'
+ let open_cmd = 'vsplit'
+ elseif g:ft_man_open_mode == 'tab'
+ let open_cmd = 'tabedit'
+ else
+ let open_cmd = 'split'
+ endif
+ else
+ let open_cmd = a:cmdmods . ' split'
+ endif
+ endif
+ endif
+
+ silent execute open_cmd . " $HOME/" . page . '.' . sect . '~'
+
+ " Avoid warning for editing the dummy file twice
+ setl buftype=nofile noswapfile
+
+ setl fdc=0 ma nofen nonu nornu
+ %delete _
+ let unsetwidth = 0
+ if empty($MANWIDTH)
+ let $MANWIDTH = winwidth(0)
+ let unsetwidth = 1
+ endif
+
+ " Ensure Vim is not recursively invoked (man-db does this) when doing ctrl-[
+ " on a man page reference by unsetting MANPAGER.
+ " Some versions of env(1) do not support the '-u' option, and in such case
+ " we set MANPAGER=cat.
+ if !exists('s:env_has_u')
+ call system('env -u x true')
+ let s:env_has_u = (v:shell_error == 0)
+ endif
+ let env_cmd = s:env_has_u ? 'env -u MANPAGER' : 'env MANPAGER=cat'
+ let env_cmd .= ' GROFF_NO_SGR=1'
+ let man_cmd = env_cmd . ' man ' . s:GetCmdArg(sect, page) . ' | col -b'
+ silent exec "r !" . man_cmd
+
+ if unsetwidth
+ let $MANWIDTH = ''
+ endif
+ " Remove blank lines from top and bottom.
+ while line('$') > 1 && getline(1) =~ '^\s*$'
+ 1delete _
+ endwhile
+ while line('$') > 1 && getline('$') =~ '^\s*$'
+ $delete _
+ endwhile
+ 1
+ setl ft=man nomod
+ setl bufhidden=hide
+ setl nobuflisted
+ setl noma
+endfunc
+
+func s:PopPage()
+ if s:man_tag_depth > 0
+ let s:man_tag_depth = s:man_tag_depth - 1
+ exec "let s:man_tag_buf=s:man_tag_buf_".s:man_tag_depth
+ exec "let s:man_tag_lin=s:man_tag_lin_".s:man_tag_depth
+ exec "let s:man_tag_col=s:man_tag_col_".s:man_tag_depth
+ exec s:man_tag_buf."b"
+ exec s:man_tag_lin
+ exec "norm! ".s:man_tag_col."|"
+ exec "unlet s:man_tag_buf_".s:man_tag_depth
+ exec "unlet s:man_tag_lin_".s:man_tag_depth
+ exec "unlet s:man_tag_col_".s:man_tag_depth
+ unlet s:man_tag_buf s:man_tag_lin s:man_tag_col
+ endif
+endfunc
+
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=2 ts=8 noet:
diff --git a/runtime/ftplugin/manconf.vim b/runtime/ftplugin/manconf.vim
new file mode 100644
index 0000000..aa85408
--- /dev/null
+++ b/runtime/ftplugin/manconf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: man.conf(5) - man configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/markdown.vim b/runtime/ftplugin/markdown.vim
new file mode 100644
index 0000000..fc1d9e0
--- /dev/null
+++ b/runtime/ftplugin/markdown.vim
@@ -0,0 +1,74 @@
+" Vim filetype plugin
+" Language: Markdown
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2019 Dec 05
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+
+setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--%s-->
+setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
+setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:
+
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin .= "|setl cms< com< fo< flp<"
+else
+ let b:undo_ftplugin = "setl cms< com< fo< flp<"
+endif
+
+function! s:NotCodeBlock(lnum) abort
+ return synIDattr(synID(v:lnum, 1, 1), 'name') !=# 'markdownCode'
+endfunction
+
+function! MarkdownFold() abort
+ let line = getline(v:lnum)
+
+ if line =~# '^#\+ ' && s:NotCodeBlock(v:lnum)
+ return ">" . match(line, ' ')
+ endif
+
+ let nextline = getline(v:lnum + 1)
+ if (line =~ '^.\+$') && (nextline =~ '^=\+$') && s:NotCodeBlock(v:lnum + 1)
+ return ">1"
+ endif
+
+ if (line =~ '^.\+$') && (nextline =~ '^-\+$') && s:NotCodeBlock(v:lnum + 1)
+ return ">2"
+ endif
+
+ return "="
+endfunction
+
+function! s:HashIndent(lnum) abort
+ let hash_header = matchstr(getline(a:lnum), '^#\{1,6}')
+ if len(hash_header)
+ return hash_header
+ else
+ let nextline = getline(a:lnum + 1)
+ if nextline =~# '^=\+\s*$'
+ return '#'
+ elseif nextline =~# '^-\+\s*$'
+ return '##'
+ endif
+ endif
+endfunction
+
+function! MarkdownFoldText() abort
+ let hash_indent = s:HashIndent(v:foldstart)
+ let title = substitute(getline(v:foldstart), '^#\+\s*', '', '')
+ let foldsize = (v:foldend - v:foldstart + 1)
+ let linecount = '['.foldsize.' lines]'
+ return hash_indent.' '.title.' '.linecount
+endfunction
+
+if has("folding") && exists("g:markdown_folding")
+ setlocal foldexpr=MarkdownFold()
+ setlocal foldmethod=expr
+ setlocal foldtext=MarkdownFoldText()
+ let b:undo_ftplugin .= " foldexpr< foldmethod< foldtext<"
+endif
+
+" vim:set sw=2:
diff --git a/runtime/ftplugin/masm.vim b/runtime/ftplugin/masm.vim
new file mode 100644
index 0000000..235469a
--- /dev/null
+++ b/runtime/ftplugin/masm.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: Microsoft Macro Assembler (80x86)
+" Maintainer: Wu Yongwei <wuyongwei@gmail.com>
+" Last Change: 2020-05-09 23:02:05 +0800
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl iskeyword<"
+
+setlocal iskeyword=@,48-57,_,36,60,62,63,@-@
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/matlab.vim b/runtime/ftplugin/matlab.vim
new file mode 100644
index 0000000..a1a282f
--- /dev/null
+++ b/runtime/ftplugin/matlab.vim
@@ -0,0 +1,33 @@
+" Vim filetype plugin file
+" Language: matlab
+" Maintainer: Jake Wasserman <jwasserman at gmail dot com>
+" Last Change: 2019 Sep 27
+
+" Contributors:
+" Charles Campbell
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:save_cpo = &cpo
+set cpo-=C
+
+if exists("loaded_matchit")
+ let s:conditionalEnd = '\%(([^()]*\)\@!\<end\>\%([^()]*)\)\@!'
+ let b:match_words=
+ \ '\<\%(if\|switch\|for\|while\)\>:\<\%(elseif\|case\|break\|continue\|else\|otherwise\)\>:'.s:conditionalEnd.','.
+ \ '\<function\>:\<return\>:\<endfunction\>'
+ unlet s:conditionalEnd
+endif
+
+setlocal suffixesadd=.m
+setlocal suffixes+=.asv
+setlocal commentstring=%\ %s
+
+let b:undo_ftplugin = "setlocal suffixesadd< suffixes< commentstring< "
+ \ . "| unlet! b:match_words"
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/meson.vim b/runtime/ftplugin/meson.vim
new file mode 100644
index 0000000..e432ebf
--- /dev/null
+++ b/runtime/ftplugin/meson.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: meson
+" License: VIM License
+" Original Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+" Last Change: 2018 Nov 27
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
+setlocal commentstring=#\ %s
+setlocal comments=:#
+
+setlocal shiftwidth=2
+setlocal softtabstop=2
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/ftplugin/mf.vim b/runtime/ftplugin/mf.vim
new file mode 100644
index 0000000..7c9a8a1
--- /dev/null
+++ b/runtime/ftplugin/mf.vim
@@ -0,0 +1,70 @@
+" Vim filetype plugin file
+" Language: METAFONT
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2016 Oct 2
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo< sua< inc< def< ofu<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
+
+setlocal comments=:% commentstring=%\ %s formatoptions-=t formatoptions+=cjroql2
+setlocal suffixesadd=.mf
+let &l:include = '\<input\>'
+let &l:define = '\<\%(let\|newinternal\|interim\|def\|vardef\)\>\|\<\%(primary\|secondary\|tertiary\)def\>\s*[^ .]\+'
+setlocal omnifunc=syntaxcomplete#Complete
+let g:omni_syntax_group_include_mf = 'mf\w\+'
+let g:omni_syntax_group_exclude_mf = 'mfTodoComment'
+
+let s:mp_regex = {
+ \ 'beginsection' : '^\s*\%(\%(\|var\|primary\|secondary\|tertiary\)def\|beginchar\|beginlogochar\)\>',
+ \ 'endsection' : '^\s*\%(enddef\|endchar\)\>',
+ \ 'beginblock' : '^\s*\%(begingroup\|if\|for\%(\|suffixes\|ever\)\)\>',
+ \ 'endblock' : '^\s*\%(endgroup\|fi\|endfor\)\>'
+ \ }
+
+function! s:move_around(count, what, flags, visual)
+ if a:visual
+ exe "normal! gv"
+ endif
+ call search(s:mp_regex[a:what], a:flags.'s') " 's' sets previous context mark
+ call map(range(2, a:count), 'search(s:mp_regex[a:what], a:flags)')
+endfunction
+
+
+" Move around macros.
+nnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:false) <CR>
+vnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:false) <CR>
+vnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:true) <CR>
+
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<if\>:\<else\%[if]\>:\<fi\>,' .
+ \ '\<for\%(\|suffixes\|ever\)\>:\<exit\%(if\|unless\)\>:\<endfor\>,' .
+ \ '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,' .
+ \ '\<begingroup\>:\<endgroup\>,' .
+ \ '\<begin\%(logo\)\?char\>:\<endchar\>'
+ " Ignore comments and strings
+ let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name")
+ \ =~# "mf\\(Comment\\|String\\)$"'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/mma.vim b/runtime/ftplugin/mma.vim
new file mode 100644
index 0000000..ce4cee1
--- /dev/null
+++ b/runtime/ftplugin/mma.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: Mathematica
+" Maintainer: Ian Ford <ianf@wolfram.com>
+" Last Change: 22 January 2019
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setlocal commentstring<"
+
+setlocal commentstring=\(*%s*\)
diff --git a/runtime/ftplugin/modconf.vim b/runtime/ftplugin/modconf.vim
new file mode 100644
index 0000000..c8e76b5
--- /dev/null
+++ b/runtime/ftplugin/modconf.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: modules.conf(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s include=^\\s*include
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/mp.vim b/runtime/ftplugin/mp.vim
new file mode 100644
index 0000000..3a0a3d0
--- /dev/null
+++ b/runtime/ftplugin/mp.vim
@@ -0,0 +1,82 @@
+" Vim filetype plugin file
+" Language: MetaPost
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2016 Oct 2
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo< sua< inc< def< ofu<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
+
+setlocal comments=:% commentstring=%\ %s formatoptions-=t formatoptions+=cjroql2
+setlocal suffixesadd=.mp,.mpiv
+let &l:include = '\<\%(input\|loadmodule\)\>' " loadmodule is in MetaFun
+let &l:define = '\<\%(let\|newinternal\|interim\|def\|vardef\)\>\|\<\%(primary\|secondary\|tertiary\)def\>\s*[^ .]\+'
+setlocal omnifunc=syntaxcomplete#Complete
+let g:omni_syntax_group_include_mp = 'mf\w\+,mp\w\+'
+let g:omni_syntax_group_exclude_mp = 'mfTodoComment'
+
+if exists(":FixBeginfigs") != 2
+ command -nargs=0 FixBeginfigs call s:fix_beginfigs()
+
+ function! s:fix_beginfigs()
+ let i = 1
+ g/^beginfig(\d*);$/s//\='beginfig('.i.');'/ | let i = i + 1
+ endfunction
+endif
+
+let s:mp_regex = {
+ \ 'beginsection' : '^\s*\%(\%(\|var\|primary\|secondary\|tertiary\)def\|begin\%(fig\|char\|logochar\|glyph\|graph\)\)\>',
+ \ 'endsection' : '^\s*\%(enddef\|end\%(fig\|char\|glyph\|graph\)\)\>',
+ \ 'beginblock' : '^\s*\%(begingroup\|if\|for\%(\|suffixes\|ever\)\)\>',
+ \ 'endblock' : '^\s*\%(endgroup\|fi\|endfor\)\>'
+ \ }
+
+function! s:move_around(count, what, flags, visual)
+ if a:visual
+ exe "normal! gv"
+ endif
+ call search(s:mp_regex[a:what], a:flags.'s') " 's' sets previous context mark
+ call map(range(2, a:count), 'search(s:mp_regex[a:what], a:flags)')
+endfunction
+
+
+" Move around macros.
+nnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:false) <CR>
+vnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:false) <CR>
+vnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:true) <CR>
+
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<if\>:\<else\%[if]\>:\<fi\>,' .
+ \ '\<for\%(\|suffixes\|ever\)\>:\<exit\%(if\|unless\)\>:\<endfor\>,' .
+ \ '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,' .
+ \ '\<beginfig\>:\<endfig\>,' .
+ \ '\<begingroup\>:\<endgroup\>,' .
+ \ '\<begin\%(logo\)\?char\>:\<endchar\>,' .
+ \ '\<beginglyph\>:\<endglyph\>,' .
+ \ '\<begingraph\>:\<endgraph\>'
+ " Ignore comments and strings
+ let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name")
+ \ =~# "^mf\\%(Comment\\|String\\|\\)$\\|^mpTeXinsert$"'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/mplayerconf.vim b/runtime/ftplugin/mplayerconf.vim
new file mode 100644
index 0000000..8654760
--- /dev/null
+++ b/runtime/ftplugin/mplayerconf.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: mplayer(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s include=^\\s*include
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/mrxvtrc.vim b/runtime/ftplugin/mrxvtrc.vim
new file mode 100644
index 0000000..15cc0db
--- /dev/null
+++ b/runtime/ftplugin/mrxvtrc.vim
@@ -0,0 +1,22 @@
+" Created : Wed 26 Apr 2006 01:20:53 AM CDT
+" Modified : Fri 28 Apr 2006 03:24:01 AM CDT
+" Author : Gautam Iyer <gi1242@users.sourceforge.net>
+" Description : ftplugin for mrxvtrc
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+" Really any line that does not match an option is a comment. But use '!' for
+" compatibility with x-defaults files, and "#" (preferred) for compatibility
+" with all other config files.
+"
+" Comments beginning with "#" are preferred because Vim will not flag the
+" first word as a spelling error if it is not capitalised. The '!' used as
+" comment leaders makes Vim think that every comment line is a new sentence.
+
+setlocal comments=:!,:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
diff --git a/runtime/ftplugin/msmessages.vim b/runtime/ftplugin/msmessages.vim
new file mode 100644
index 0000000..791eafe
--- /dev/null
+++ b/runtime/ftplugin/msmessages.vim
@@ -0,0 +1,40 @@
+" Vim filetype plugin file
+" Language: MS Message files (*.mc)
+" Maintainer: Kevin Locke <kwl7@cornell.edu>
+" Last Change: 2008 April 09
+" Location: http://kevinlocke.name/programs/vim/syntax/msmessages.vim
+
+" Based on c.vim
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Using line continuation here.
+let s:cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< com< cms< | unlet! b:browsefilter"
+
+" Set 'formatoptions' to format all lines, including comments
+setlocal fo-=ct fo+=roql
+
+" Comments includes both ";" which describes a "comment" which will be
+" converted to C code and variants on "; //" which will remain comments
+" in the generated C code
+setlocal comments=:;,:;//,:;\ //,s:;\ /*\ ,m:;\ \ *\ ,e:;\ \ */
+setlocal commentstring=;\ //\ %s
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "MS Message Files (*.mc)\t*.mc\n" .
+ \ "Resource Files (*.rc)\t*.rc\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/muttrc.vim b/runtime/ftplugin/muttrc.vim
new file mode 100644
index 0000000..c8ad0f2
--- /dev/null
+++ b/runtime/ftplugin/muttrc.vim
@@ -0,0 +1,22 @@
+" Vim filetype plugin file
+" Language: mutt RC File
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2006-04-19
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &l:include = '^\s*source\>'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/nanorc.vim b/runtime/ftplugin/nanorc.vim
new file mode 100644
index 0000000..e45ebac
--- /dev/null
+++ b/runtime/ftplugin/nanorc.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: nanorc(5) - GNU nano configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/neomuttrc.vim b/runtime/ftplugin/neomuttrc.vim
new file mode 100644
index 0000000..86f1cde
--- /dev/null
+++ b/runtime/ftplugin/neomuttrc.vim
@@ -0,0 +1,23 @@
+" Vim filetype plugin file
+" Language: NeoMutt RC File
+" Previous Maintainer: Guillaume Brogi <gui-gui@netcourrier.com>
+" Latest Revision: 2017-09-17
+" Original version copied from ftplugin/muttrc.vim
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &l:include = '^\s*source\>'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/netrc.vim b/runtime/ftplugin/netrc.vim
new file mode 100644
index 0000000..02ee327
--- /dev/null
+++ b/runtime/ftplugin/netrc.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: netrc(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments= commentstring= formatoptions-=tcroq formatoptions+=l
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/nroff.vim b/runtime/ftplugin/nroff.vim
new file mode 100644
index 0000000..cf62d02
--- /dev/null
+++ b/runtime/ftplugin/nroff.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin
+" Language: roff(7)
+" Maintainer: Aman Verma
+" Homepage: https://github.com/a-vrma/vim-nroff-ftplugin
+" Previous Maintainer: Chris Spiegel <cspiegel@gmail.com>
+" Last Change: 2020 Nov 21
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=.\\\"%s
+setlocal comments=:.\\\"
+setlocal sections+=Sh
+
+let b:undo_ftplugin = 'setlocal commentstring< comments< sections<'
diff --git a/runtime/ftplugin/nsis.vim b/runtime/ftplugin/nsis.vim
new file mode 100644
index 0000000..1a35127
--- /dev/null
+++ b/runtime/ftplugin/nsis.vim
@@ -0,0 +1,43 @@
+" Vim ftplugin file
+" Language: NSIS script
+" Maintainer: Ken Takata
+" URL: https://github.com/k-takata/vim-nsis
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Last Change: 2018-01-26
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl com< cms< fo< def< inc<"
+ \ " | unlet! b:match_ignorecase b:match_words"
+
+setlocal comments=s1:/*,mb:*,ex:*/,b:#,:; commentstring=;\ %s
+setlocal formatoptions-=t formatoptions+=croql
+setlocal define=^\\s*!define\\%(\\%(utc\\)\\=date\\|math\\)\\=
+setlocal include=^\\s*!include\\%(/NONFATAL\\)\\=
+
+if exists("loaded_matchit")
+ let b:match_ignorecase = 1
+ let b:match_words =
+ \ '\${\%(If\|IfNot\|Unless\)}:\${\%(Else\|ElseIf\|ElseIfNot\|ElseUnless\)}:\${\%(EndIf\|EndUnless\)},' .
+ \ '\${Select}:\${EndSelect},' .
+ \ '\${Switch}:\${EndSwitch},' .
+ \ '\${\%(Do\|DoWhile\|DoUntil\)}:\${\%(Loop\|LoopWhile\|LoopUntil\)},' .
+ \ '\${\%(For\|ForEach\)}:\${Next},' .
+ \ '\<Function\>:\<FunctionEnd\>,' .
+ \ '\<Section\>:\<SectionEnd\>,' .
+ \ '\<SectionGroup\>:\<SectionGroupEnd\>,' .
+ \ '\<PageEx\>:\<PageExEnd\>,' .
+ \ '\${MementoSection}:\${MementoSectionEnd},' .
+ \ '!if\%(\%(macro\)\?n\?def\)\?\>:!else\>:!endif\>,' .
+ \ '!macro\>:!macroend\>'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/objc.vim b/runtime/ftplugin/objc.vim
new file mode 100644
index 0000000..e41beb5
--- /dev/null
+++ b/runtime/ftplugin/objc.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: Objective C
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 Jan 15
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like C
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
diff --git a/runtime/ftplugin/ocaml.vim b/runtime/ftplugin/ocaml.vim
new file mode 100644
index 0000000..8a62860
--- /dev/null
+++ b/runtime/ftplugin/ocaml.vim
@@ -0,0 +1,643 @@
+" Language: OCaml
+" Maintainer: David Baelde <firstname.name@ens-lyon.org>
+" Mike Leary <leary@nwlink.com>
+" Markus Mottl <markus.mottl@gmail.com>
+" Pierre Vittet <pierre-vittet@pvittet.com>
+" Stefano Zacchiroli <zack@bononia.it>
+" Vincent Aravantinos <firstname.name@imag.fr>
+" URL: https://github.com/ocaml/vim-ocaml
+" Last Change:
+" 2013 Oct 27 - Added commentstring (MM)
+" 2013 Jul 26 - load default compiler settings (MM)
+" 2013 Jul 24 - removed superfluous efm-setting (MM)
+" 2013 Jul 22 - applied fixes supplied by Hirotaka Hamada (MM)
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin=1
+
+" Use standard compiler settings unless user wants otherwise
+if !exists("current_compiler")
+ :compiler ocaml
+endif
+
+" some macro
+if exists('*fnameescape')
+ function! s:Fnameescape(s)
+ return fnameescape(a:s)
+ endfun
+else
+ function! s:Fnameescape(s)
+ return escape(a:s," \t\n*?[{`$\\%#'\"|!<")
+ endfun
+endif
+
+" Error handling -- helps moving where the compiler wants you to go
+let s:cposet=&cpoptions
+set cpo&vim
+
+" Comment string
+setlocal comments=sr:(*\ ,mb:\ ,ex:*)
+setlocal comments^=sr:(**,mb:\ \ ,ex:*)
+setlocal commentstring=(*%s*)
+
+" Add mappings, unless the user didn't want this.
+if !exists("no_plugin_maps") && !exists("no_ocaml_maps")
+ " (un)commenting
+ if !hasmapto('<Plug>Comment')
+ nmap <buffer> <LocalLeader>c <Plug>LUncomOn
+ xmap <buffer> <LocalLeader>c <Plug>BUncomOn
+ nmap <buffer> <LocalLeader>C <Plug>LUncomOff
+ xmap <buffer> <LocalLeader>C <Plug>BUncomOff
+ endif
+
+ nnoremap <buffer> <Plug>LUncomOn gI(* <End> *)<ESC>
+ nnoremap <buffer> <Plug>LUncomOff :s/^(\* \(.*\) \*)/\1/<CR>:noh<CR>
+ xnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i(*<ESC>`>o<ESC>0i*)<ESC>`<
+ xnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
+
+ nmap <buffer> <LocalLeader>s <Plug>OCamlSwitchEdit
+ nmap <buffer> <LocalLeader>S <Plug>OCamlSwitchNewWin
+
+ nmap <buffer> <LocalLeader>t <Plug>OCamlPrintType
+ xmap <buffer> <LocalLeader>t <Plug>OCamlPrintType
+endif
+
+" Let % jump between structure elements (due to Issac Trotts)
+let b:mw = '\<let\>:\<and\>:\(\<in\>\|;;\)'
+let b:mw = b:mw . ',\<if\>:\<then\>:\<else\>'
+let b:mw = b:mw . ',\<\(for\|while\)\>:\<do\>:\<done\>'
+let b:mw = b:mw . ',\<\(object\|sig\|struct\|begin\)\>:\<end\>'
+let b:mw = b:mw . ',\<\(match\|try\)\>:\<with\>'
+let b:match_words = b:mw
+
+let b:match_ignorecase=0
+
+function! s:OcpGrep(bang,args) abort
+ let grepprg = &l:grepprg
+ let grepformat = &l:grepformat
+ let shellpipe = &shellpipe
+ try
+ let &l:grepprg = "ocp-grep -c never"
+ setlocal grepformat=%f:%l:%m
+ if &shellpipe ==# '2>&1| tee' || &shellpipe ==# '|& tee'
+ let &shellpipe = "| tee"
+ endif
+ execute 'grep! '.a:args
+ if empty(a:bang) && !empty(getqflist())
+ return 'cfirst'
+ else
+ return ''
+ endif
+ finally
+ let &l:grepprg = grepprg
+ let &l:grepformat = grepformat
+ let &shellpipe = shellpipe
+ endtry
+endfunction
+command! -bar -bang -complete=file -nargs=+ Ocpgrep exe s:OcpGrep(<q-bang>, <q-args>)
+
+" switching between interfaces (.mli) and implementations (.ml)
+if !exists("g:did_ocaml_switch")
+ let g:did_ocaml_switch = 1
+ nnoremap <Plug>OCamlSwitchEdit :<C-u>call OCaml_switch(0)<CR>
+ nnoremap <Plug>OCamlSwitchNewWin :<C-u>call OCaml_switch(1)<CR>
+ fun OCaml_switch(newwin)
+ if (match(bufname(""), "\\.mli$") >= 0)
+ let fname = s:Fnameescape(substitute(bufname(""), "\\.mli$", ".ml", ""))
+ if (a:newwin == 1)
+ exec "new " . fname
+ else
+ exec "arge " . fname
+ endif
+ elseif (match(bufname(""), "\\.ml$") >= 0)
+ let fname = s:Fnameescape(bufname("")) . "i"
+ if (a:newwin == 1)
+ exec "new " . fname
+ else
+ exec "arge " . fname
+ endif
+ endif
+ endfun
+endif
+
+" Folding support
+
+" Get the modeline because folding depends on indentation
+let lnum = search('^\s*(\*:o\?caml:', 'n')
+let s:modeline = lnum? getline(lnum): ""
+
+" Get the indentation params
+let s:m = matchstr(s:modeline,'default\s*=\s*\d\+')
+if s:m != ""
+ let s:idef = matchstr(s:m,'\d\+')
+elseif exists("g:omlet_indent")
+ let s:idef = g:omlet_indent
+else
+ let s:idef = 2
+endif
+let s:m = matchstr(s:modeline,'struct\s*=\s*\d\+')
+if s:m != ""
+ let s:i = matchstr(s:m,'\d\+')
+elseif exists("g:omlet_indent_struct")
+ let s:i = g:omlet_indent_struct
+else
+ let s:i = s:idef
+endif
+
+" Set the folding method
+if exists("g:ocaml_folding")
+ setlocal foldmethod=expr
+ setlocal foldexpr=OMLetFoldLevel(v:lnum)
+endif
+
+let b:undo_ftplugin = "setlocal efm< foldmethod< foldexpr<"
+ \ . "| unlet! b:mw b:match_words b:match_ignorecase"
+
+
+" - Only definitions below, executed once -------------------------------------
+
+if exists("*OMLetFoldLevel")
+ let &cpoptions = s:cposet
+ unlet s:cposet
+ finish
+endif
+
+function s:topindent(lnum)
+ let l = a:lnum
+ while l > 0
+ if getline(l) =~ '\s*\%(\<struct\>\|\<sig\>\|\<object\>\)'
+ return indent(l)
+ endif
+ let l = l-1
+ endwhile
+ return -s:i
+endfunction
+
+function OMLetFoldLevel(l)
+
+ " This is for not merging blank lines around folds to them
+ if getline(a:l) !~ '\S'
+ return -1
+ endif
+
+ " We start folds for modules, classes, and every toplevel definition
+ if getline(a:l) =~ '^\s*\%(\<val\>\|\<module\>\|\<class\>\|\<type\>\|\<method\>\|\<initializer\>\|\<inherit\>\|\<exception\>\|\<external\>\)'
+ exe 'return ">' (indent(a:l)/s:i)+1 '"'
+ endif
+
+ " Toplevel let are detected thanks to the indentation
+ if getline(a:l) =~ '^\s*let\>' && indent(a:l) == s:i+s:topindent(a:l)
+ exe 'return ">' (indent(a:l)/s:i)+1 '"'
+ endif
+
+ " We close fold on end which are associated to struct, sig or object.
+ " We use syntax information to do that.
+ if getline(a:l) =~ '^\s*end\>' && synIDattr(synID(a:l, indent(a:l)+1, 0), "name") != "ocamlKeyword"
+ return (indent(a:l)/s:i)+1
+ endif
+
+ " Folds end on ;;
+ if getline(a:l) =~ '^\s*;;'
+ exe 'return "<' (indent(a:l)/s:i)+1 '"'
+ endif
+
+ " Comments around folds aren't merged to them.
+ if synIDattr(synID(a:l, indent(a:l)+1, 0), "name") == "ocamlComment"
+ return -1
+ endif
+
+ return '='
+endfunction
+
+" Vim support for OCaml .annot files
+"
+" Last Change: 2007 Jul 17
+" Maintainer: Vincent Aravantinos <vincent.aravantinos@gmail.com>
+" License: public domain
+"
+" Originally inspired by 'ocaml-dtypes.vim' by Stefano Zacchiroli.
+" The source code is quite radically different for we not use python anymore.
+" However this plugin should have the exact same behaviour, that's why the
+" following lines are the quite exact copy of Stefano's original plugin :
+"
+" <<
+" Executing Ocaml_print_type(<mode>) function will display in the Vim bottom
+" line(s) the type of an ocaml value getting it from the corresponding .annot
+" file (if any). If Vim is in visual mode, <mode> should be "visual" and the
+" selected ocaml value correspond to the highlighted text, otherwise (<mode>
+" can be anything else) it corresponds to the literal found at the current
+" cursor position.
+"
+" Typing '<LocalLeader>t' (LocalLeader defaults to '\', see :h LocalLeader)
+" will cause " Ocaml_print_type function to be invoked with the right
+" argument depending on the current mode (visual or not).
+" >>
+"
+" If you find something not matching this behaviour, please signal it.
+"
+" Differences are:
+" - no need for python support
+" + plus : more portable
+" + minus: no more lazy parsing, it looks very fast however
+"
+" - ocamlbuild support, ie.
+" + the plugin finds the _build directory and looks for the
+" corresponding file inside;
+" + if the user decides to change the name of the _build directory thanks
+" to the '-build-dir' option of ocamlbuild, the plugin will manage in
+" most cases to find it out (most cases = if the source file has a unique
+" name among your whole project);
+" + if ocamlbuild is not used, the usual behaviour holds; ie. the .annot
+" file should be in the same directory as the source file;
+" + for vim plugin programmers:
+" the variable 'b:_build_dir' contains the inferred path to the build
+" directory, even if this one is not named '_build'.
+"
+" Bonus :
+" - latin1 accents are handled
+" - lists are handled, even on multiple lines, you don't need the visual mode
+" (the cursor must be on the first bracket)
+" - parenthesized expressions, arrays, and structures (ie. '(...)', '[|...|]',
+" and '{...}') are handled the same way
+
+ " Copied from Stefano's original plugin :
+ " <<
+ " .annot ocaml file representation
+ "
+ " File format (copied verbatim from caml-types.el)
+ "
+ " file ::= block *
+ " block ::= position <SP> position <LF> annotation *
+ " position ::= filename <SP> num <SP> num <SP> num
+ " annotation ::= keyword open-paren <LF> <SP> <SP> data <LF> close-paren
+ "
+ " <SP> is a space character (ASCII 0x20)
+ " <LF> is a line-feed character (ASCII 0x0A)
+ " num is a sequence of decimal digits
+ " filename is a string with the lexical conventions of O'Caml
+ " open-paren is an open parenthesis (ASCII 0x28)
+ " close-paren is a closed parenthesis (ASCII 0x29)
+ " data is any sequence of characters where <LF> is always followed by
+ " at least two space characters.
+ "
+ " - in each block, the two positions are respectively the start and the
+ " end of the range described by the block.
+ " - in a position, the filename is the name of the file, the first num
+ " is the line number, the second num is the offset of the beginning
+ " of the line, the third num is the offset of the position itself.
+ " - the char number within the line is the difference between the third
+ " and second nums.
+ "
+ " For the moment, the only possible keyword is \"type\"."
+ " >>
+
+
+" 1. Finding the annotation file even if we use ocamlbuild
+
+ " In: two strings representing paths
+ " Out: one string representing the common prefix between the two paths
+ function! s:Find_common_path (p1,p2)
+ let temp = a:p2
+ while matchstr(a:p1,temp) == ''
+ let temp = substitute(temp,'/[^/]*$','','')
+ endwhile
+ return temp
+ endfun
+
+ " After call:
+ "
+ " Following information have been put in s:annot_file_list, using
+ " annot_file_name name as key:
+ " - annot_file_path :
+ " path to the .annot file corresponding to the
+ " source file (dealing with ocamlbuild stuff)
+ " - _build_path:
+ " path to the build directory even if this one is
+ " not named '_build'
+ " - date_of_last annot:
+ " Set to 0 until we load the file. It contains the
+ " date at which the file has been loaded.
+ function! s:Locate_annotation()
+ let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
+ if !exists ("s:annot_file_list[annot_file_name]")
+ silent exe 'cd' s:Fnameescape(expand('%:p:h'))
+ " 1st case : the annot file is in the same directory as the buffer (no ocamlbuild)
+ let annot_file_path = findfile(annot_file_name,'.')
+ if annot_file_path != ''
+ let annot_file_path = getcwd().'/'.annot_file_path
+ let _build_path = ''
+ else
+ " 2nd case : the buffer and the _build directory are in the same directory
+ " ..
+ " / \
+ " / \
+ " _build .ml
+ "
+ let _build_path = finddir('_build','.')
+ if _build_path != ''
+ let _build_path = getcwd().'/'._build_path
+ let annot_file_path = findfile(annot_file_name,'_build')
+ if annot_file_path != ''
+ let annot_file_path = getcwd().'/'.annot_file_path
+ endif
+ else
+ " 3rd case : the _build directory is in a directory higher in the file hierarchy
+ " (it can't be deeper by ocamlbuild requirements)
+ " ..
+ " / \
+ " / \
+ " _build ...
+ " \
+ " \
+ " .ml
+ "
+ let _build_path = finddir('_build',';')
+ if _build_path != ''
+ let project_path = substitute(_build_path,'/_build$','','')
+ let path_relative_to_project = s:Fnameescape(substitute(expand('%:p:h'),project_path.'/','',''))
+ let annot_file_path = findfile(annot_file_name,project_path.'/_build/'.path_relative_to_project)
+ else
+ let annot_file_path = findfile(annot_file_name,'**')
+ "4th case : what if the user decided to change the name of the _build directory ?
+ " -> we relax the constraints, it should work in most cases
+ if annot_file_path != ''
+ " 4a. we suppose the renamed _build directory is in the current directory
+ let _build_path = matchstr(annot_file_path,'^[^/]*')
+ if annot_file_path != ''
+ let annot_file_path = getcwd().'/'.annot_file_path
+ let _build_path = getcwd().'/'._build_path
+ endif
+ else
+ let annot_file_name = ''
+ "(Pierre Vittet: I have commented 4b because this was chrashing
+ "my vim (it produced infinite loop))
+ "
+ " 4b. anarchy : the renamed _build directory may be higher in the hierarchy
+ " this will work if the file for which we are looking annotations has a unique name in the whole project
+ " if this is not the case, it may still work, but no warranty here
+ "let annot_file_path = findfile(annot_file_name,'**;')
+ "let project_path = s:Find_common_path(annot_file_path,expand('%:p:h'))
+ "let _build_path = matchstr(annot_file_path,project_path.'/[^/]*')
+ endif
+ endif
+ endif
+ endif
+
+ if annot_file_path == ''
+ throw 'E484: no annotation file found'
+ endif
+
+ silent exe 'cd' '-'
+ let s:annot_file_list[annot_file_name]= [annot_file_path, _build_path, 0]
+ endif
+ endfun
+
+ " This variable contains a dictionary of lists. Each element of the dictionary
+ " represents an annotation system. An annotation system is a list with:
+ " - annotation file name as its key
+ " - annotation file path as first element of the contained list
+ " - build path as second element of the contained list
+ " - annot_file_last_mod (contain the date of .annot file) as third element
+ let s:annot_file_list = {}
+
+" 2. Finding the type information in the annotation file
+
+ " a. The annotation file is opened in vim as a buffer that
+ " should be (almost) invisible to the user.
+
+ " After call:
+ " The current buffer is now the one containing the .annot file.
+ " We manage to keep all this hidden to the user's eye.
+ function! s:Enter_annotation_buffer(annot_file_path)
+ let s:current_pos = getpos('.')
+ let s:current_hidden = &l:hidden
+ set hidden
+ let s:current_buf = bufname('%')
+ if bufloaded(a:annot_file_path)
+ silent exe 'keepj keepalt' 'buffer' s:Fnameescape(a:annot_file_path)
+ else
+ silent exe 'keepj keepalt' 'view' s:Fnameescape(a:annot_file_path)
+ endif
+ call setpos(".", [0, 0 , 0 , 0])
+ endfun
+
+ " After call:
+ " The original buffer has been restored in the exact same state as before.
+ function! s:Exit_annotation_buffer()
+ silent exe 'keepj keepalt' 'buffer' s:Fnameescape(s:current_buf)
+ let &l:hidden = s:current_hidden
+ call setpos('.',s:current_pos)
+ endfun
+
+ " After call:
+ " The annot file is loaded and assigned to a buffer.
+ " This also handles the modification date of the .annot file, eg. after a
+ " compilation (return an updated annot_file_list).
+ function! s:Load_annotation(annot_file_name)
+ let annot = s:annot_file_list[a:annot_file_name]
+ let annot_file_path = annot[0]
+ let annot_file_last_mod = 0
+ if exists("annot[2]")
+ let annot_file_last_mod = annot[2]
+ endif
+ if bufloaded(annot_file_path) && annot_file_last_mod < getftime(annot_file_path)
+ " if there is a more recent file
+ let nr = bufnr(annot_file_path)
+ silent exe 'keepj keepalt' 'bunload' nr
+ endif
+ if !bufloaded(annot_file_path)
+ call s:Enter_annotation_buffer(annot_file_path)
+ setlocal nobuflisted
+ setlocal bufhidden=hide
+ setlocal noswapfile
+ setlocal buftype=nowrite
+ call s:Exit_annotation_buffer()
+ let annot[2] = getftime(annot_file_path)
+ " List updated with the new date
+ let s:annot_file_list[a:annot_file_name] = annot
+ endif
+ endfun
+
+ "b. 'search' and 'match' work to find the type information
+
+ "In: - lin1,col1: postion of expression first char
+ " - lin2,col2: postion of expression last char
+ "Out: - the pattern to be looked for to find the block
+ " Must be called in the source buffer (use of line2byte)
+ function! s:Block_pattern(lin1,lin2,col1,col2)
+ let start_num1 = a:lin1
+ let start_num2 = line2byte(a:lin1) - 1
+ let start_num3 = start_num2 + a:col1
+ let path = '"\(\\"\|[^"]\)\+"'
+ let start_pos = path.' '.start_num1.' '.start_num2.' '.start_num3
+ let end_num1 = a:lin2
+ let end_num2 = line2byte(a:lin2) - 1
+ let end_num3 = end_num2 + a:col2
+ let end_pos = path.' '.end_num1.' '.end_num2.' '.end_num3
+ return '^'.start_pos.' '.end_pos."$"
+ " rq: the '^' here is not totally correct regarding the annot file "grammar"
+ " but currently the annotation file respects this, and it's a little bit faster with the '^';
+ " can be removed safely.
+ endfun
+
+ "In: (the cursor position should be at the start of an annotation)
+ "Out: the type information
+ " Must be called in the annotation buffer (use of search)
+ function! s:Match_data()
+ " rq: idem as previously, in the following, the '^' at start of patterns is not necessary
+ keepj while search('^type($','ce',line(".")) == 0
+ keepj if search('^.\{-}($','e') == 0
+ throw "no_annotation"
+ endif
+ keepj if searchpair('(','',')') == 0
+ throw "malformed_annot_file"
+ endif
+ endwhile
+ let begin = line(".") + 1
+ keepj if searchpair('(','',')') == 0
+ throw "malformed_annot_file"
+ endif
+ let end = line(".") - 1
+ return join(getline(begin,end),"\n")
+ endfun
+
+ "In: the pattern to look for in order to match the block
+ "Out: the type information (calls s:Match_data)
+ " Should be called in the annotation buffer
+ function! s:Extract_type_data(block_pattern, annot_file_name)
+ let annot_file_path = s:annot_file_list[a:annot_file_name][0]
+ call s:Enter_annotation_buffer(annot_file_path)
+ try
+ if search(a:block_pattern,'e') == 0
+ throw "no_annotation"
+ endif
+ call cursor(line(".") + 1,1)
+ let annotation = s:Match_data()
+ finally
+ call s:Exit_annotation_buffer()
+ endtry
+ return annotation
+ endfun
+
+ "c. link this stuff with what the user wants
+ " ie. get the expression selected/under the cursor
+
+ let s:ocaml_word_char = '\w|[\xc0-\xff]|'''
+
+ "In: the current mode (eg. "visual", "normal", etc.)
+ "Out: the borders of the expression we are looking for the type
+ function! s:Match_borders(mode)
+ if a:mode == "visual"
+ let cur = getpos(".")
+ normal `<
+ let col1 = col(".")
+ let lin1 = line(".")
+ normal `>
+ let col2 = col(".")
+ let lin2 = line(".")
+ call cursor(cur[1],cur[2])
+ return [lin1,lin2,col1-1,col2]
+ else
+ let cursor_line = line(".")
+ let cursor_col = col(".")
+ let line = getline('.')
+ if line[cursor_col-1:cursor_col] == '[|'
+ let [lin2,col2] = searchpairpos('\[|','','|\]','n')
+ return [cursor_line,lin2,cursor_col-1,col2+1]
+ elseif line[cursor_col-1] == '['
+ let [lin2,col2] = searchpairpos('\[','','\]','n')
+ return [cursor_line,lin2,cursor_col-1,col2]
+ elseif line[cursor_col-1] == '('
+ let [lin2,col2] = searchpairpos('(','',')','n')
+ return [cursor_line,lin2,cursor_col-1,col2]
+ elseif line[cursor_col-1] == '{'
+ let [lin2,col2] = searchpairpos('{','','}','n')
+ return [cursor_line,lin2,cursor_col-1,col2]
+ else
+ let [lin1,col1] = searchpos('\v%('.s:ocaml_word_char.'|\.)*','ncb')
+ let [lin2,col2] = searchpos('\v%('.s:ocaml_word_char.'|\.)*','nce')
+ if col1 == 0 || col2 == 0
+ throw "no_expression"
+ endif
+ return [cursor_line,cursor_line,col1-1,col2]
+ endif
+ endif
+ endfun
+
+ "In: the current mode (eg. "visual", "normal", etc.)
+ "Out: the type information (calls s:Extract_type_data)
+ function! s:Get_type(mode, annot_file_name)
+ let [lin1,lin2,col1,col2] = s:Match_borders(a:mode)
+ return s:Extract_type_data(s:Block_pattern(lin1,lin2,col1,col2), a:annot_file_name)
+ endfun
+
+ "In: A string destined to be printed in the 'echo buffer'. It has line
+ "break and 2 space at each line beginning.
+ "Out: A string destined to be yanked, without space and double space.
+ function s:unformat_ocaml_type(res)
+ "Remove end of line.
+ let res = substitute (a:res, "\n", "", "g" )
+ "remove double space
+ let res =substitute(res , " ", " ", "g")
+ "remove space at begining of string.
+ let res = substitute(res, "^ *", "", "g")
+ return res
+ endfunction
+
+ "d. main
+ "In: the current mode (eg. "visual", "normal", etc.)
+ "After call: the type information is displayed
+ if !exists("*Ocaml_get_type")
+ function Ocaml_get_type(mode)
+ let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
+ call s:Locate_annotation()
+ call s:Load_annotation(annot_file_name)
+ let res = s:Get_type(a:mode, annot_file_name)
+ " Copy result in the unnamed buffer
+ let @" = s:unformat_ocaml_type(res)
+ return res
+ endfun
+ endif
+
+ if !exists("*Ocaml_get_type_or_not")
+ function Ocaml_get_type_or_not(mode)
+ let t=reltime()
+ try
+ let res = Ocaml_get_type(a:mode)
+ return res
+ catch
+ return ""
+ endtry
+ endfun
+ endif
+
+ if !exists("*Ocaml_print_type")
+ function Ocaml_print_type(mode)
+ if expand("%:e") == "mli"
+ echohl ErrorMsg | echo "No annotations for interface (.mli) files" | echohl None
+ return
+ endif
+ try
+ echo Ocaml_get_type(a:mode)
+ catch /E484:/
+ echohl ErrorMsg | echo "No type annotations (.annot) file found" | echohl None
+ catch /no_expression/
+ echohl ErrorMsg | echo "No expression found under the cursor" | echohl None
+ catch /no_annotation/
+ echohl ErrorMsg | echo "No type annotation found for the given text" | echohl None
+ catch /malformed_annot_file/
+ echohl ErrorMsg | echo "Malformed .annot file" | echohl None
+ endtry
+ endfun
+ endif
+
+" Maps
+ nnoremap <silent> <Plug>OCamlPrintType :<C-U>call Ocaml_print_type("normal")<CR>
+ xnoremap <silent> <Plug>OCamlPrintType :<C-U>call Ocaml_print_type("visual")<CR>`<
+
+let &cpoptions = s:cposet
+unlet s:cposet
+
+" vim:sw=2 fdm=indent
diff --git a/runtime/ftplugin/occam.vim b/runtime/ftplugin/occam.vim
new file mode 100644
index 0000000..e9b7c01
--- /dev/null
+++ b/runtime/ftplugin/occam.vim
@@ -0,0 +1,49 @@
+" Vim filetype plugin file
+" Language: occam
+" Copyright: Christian Jacobsen <clj3@kent.ac.uk>, Mario Schweigler <ms44@kent.ac.uk>
+" Maintainer: Mario Schweigler <ms44@kent.ac.uk>
+" Last Change: 23 April 2003
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
+"{{{ Indent settings
+" Set shift width for indent
+setlocal shiftwidth=2
+" Set the tab key size to two spaces
+setlocal softtabstop=2
+" Let tab keys always be expanded to spaces
+setlocal expandtab
+"}}}
+
+"{{{ Formatting
+" Break comment lines and insert comment leader in this case
+setlocal formatoptions-=t formatoptions+=cql
+setlocal comments+=:--
+" Maximum length of comments is 78
+setlocal textwidth=78
+"}}}
+
+"{{{ File browsing filters
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "All Occam Files (*.occ *.inc)\t*.occ;*.inc\n" .
+ \ "Occam Include Files (*.inc)\t*.inc\n" .
+ \ "Occam Source Files (*.occ)\t*.occ\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+"}}}
+
+"{{{ Undo settings
+let b:undo_ftplugin = "setlocal shiftwidth< softtabstop< expandtab<"
+ \ . " formatoptions< comments< textwidth<"
+ \ . "| unlet! b:browsefiler"
+"}}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/ftplugin/pamconf.vim b/runtime/ftplugin/pamconf.vim
new file mode 100644
index 0000000..f0a693e
--- /dev/null
+++ b/runtime/ftplugin/pamconf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: pam(8) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/pascal.vim b/runtime/ftplugin/pascal.vim
new file mode 100644
index 0000000..5ff18b9
--- /dev/null
+++ b/runtime/ftplugin/pascal.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: pascal
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 11 Apr 2011
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+if exists("loaded_matchit")
+ let b:match_ignorecase = 1 " (pascal is case-insensitive)
+
+ let b:match_words = '\<\%(begin\|case\|record\|object\|try\)\>'
+ let b:match_words .= ':\<^\s*\%(except\|finally\)\>:\<end\>'
+ let b:match_words .= ',\<repeat\>:\<until\>'
+ let b:match_words .= ',\<if\>:\<else\>'
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:match_words"
diff --git a/runtime/ftplugin/passwd.vim b/runtime/ftplugin/passwd.vim
new file mode 100644
index 0000000..f6e0f50
--- /dev/null
+++ b/runtime/ftplugin/passwd.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: passwd(5) password file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments= commentstring= formatoptions-=tcroq formatoptions+=l
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/pbtxt.vim b/runtime/ftplugin/pbtxt.vim
new file mode 100644
index 0000000..e3c1bf7
--- /dev/null
+++ b/runtime/ftplugin/pbtxt.vim
@@ -0,0 +1,21 @@
+" Vim filetype plugin file
+" Language: Protobuf Text Format
+" Maintainer: Lakshay Garg <lakshayg@outlook.in>
+" Last Change: 2020 Nov 17
+" Homepage: https://github.com/lakshayg/vim-pbtxt
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal commentstring=#\ %s
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8 noet
diff --git a/runtime/ftplugin/pdf.vim b/runtime/ftplugin/pdf.vim
new file mode 100644
index 0000000..1ed9911
--- /dev/null
+++ b/runtime/ftplugin/pdf.vim
@@ -0,0 +1,89 @@
+" Vim filetype plugin file
+" Language: PDF
+" Maintainer: Tim Pope <vimNOSPAM@tpope.info>
+" Last Change: 2007 Dec 16
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=%%s
+setlocal comments=:%
+let b:undo_ftplugin = "setlocal cms< com< | unlet! b:match_words"
+
+if exists("g:loaded_matchit")
+ let b:match_words = '\<\%(\d\+\s\+\d\+\s\+\)obj\>:\<endobj\>,\<stream$:\<endstream\>,\<xref\>:\<trailer\>,<<:>>'
+endif
+
+if exists("g:no_plugin_maps") || exists("g:no_pdf_maps") || v:version < 700
+ finish
+endif
+
+if !exists("b:pdf_tagstack")
+ let b:pdf_tagstack = []
+endif
+
+let b:undo_ftplugin .= " | silent! nunmap <buffer> <C-]> | silent! nunmap <buffer> <C-T>"
+nnoremap <silent><buffer> <C-]> :call <SID>Tag()<CR>
+" Inline, so the error from an empty tag stack will be simple.
+nnoremap <silent><buffer> <C-T> :if len(b:pdf_tagstack) > 0 <Bar> call setpos('.',remove(b:pdf_tagstack, -1)) <Bar> else <Bar> exe "norm! \<Lt>C-T>" <Bar> endif<CR>
+
+function! s:Tag()
+ call add(b:pdf_tagstack,getpos('.'))
+ if getline('.') =~ '^\d\+$' && getline(line('.')-1) == 'startxref'
+ return s:dodigits(getline('.'))
+ elseif getline('.') =~ '/Prev\s\+\d\+\>\%(\s\+\d\)\@!' && expand("<cword>") =~ '^\d\+$'
+ return s:dodigits(expand("<cword>"))
+ elseif getline('.') =~ '^\d\{10\} \d\{5\} '
+ return s:dodigits(matchstr(getline('.'),'^\d\+'))
+ else
+ let line = getline(".")
+ let lastend = 0
+ let pat = '\<\d\+\s\+\d\+\s\+R\>'
+ while lastend >= 0
+ let beg = match(line,'\C'.pat,lastend)
+ let end = matchend(line,'\C'.pat,lastend)
+ if beg < col(".") && end >= col(".")
+ return s:doobject(matchstr(line,'\C'.pat,lastend))
+ endif
+ let lastend = end
+ endwhile
+ return s:notag()
+ endif
+endfunction
+
+function! s:doobject(string)
+ let first = matchstr(a:string,'^\s*\zs\d\+')
+ let second = matchstr(a:string,'^\s*\d\+\s\+\zs\d\+')
+ norm! m'
+ if first != '' && second != ''
+ let oldline = line('.')
+ let oldcol = col('.')
+ 1
+ if !search('^\s*'.first.'\s\+'.second.'\s\+obj\>')
+ exe oldline
+ exe 'norm! '.oldcol.'|'
+ return s:notag()
+ endif
+ endif
+endfunction
+
+function! s:dodigits(digits)
+ let digits = 0 + substitute(a:digits,'^0*','','')
+ norm! m'
+ if digits <= 0
+ norm! 1go
+ else
+ " Go one character before the destination and advance. This method
+ " lands us after a newline rather than before, if that is our target.
+ exe "goto ".(digits)."|norm! 1 "
+ endif
+endfunction
+
+function! s:notag()
+ silent! call remove(b:pdf_tagstack,-1)
+ echohl ErrorMsg
+ echo "E426: tag not found"
+ echohl NONE
+endfunction
diff --git a/runtime/ftplugin/perl.vim b/runtime/ftplugin/perl.vim
new file mode 100644
index 0000000..603ba49
--- /dev/null
+++ b/runtime/ftplugin/perl.vim
@@ -0,0 +1,89 @@
+" Vim filetype plugin file
+" Language: Perl
+" Maintainer: vim-perl <vim-perl@googlegroups.com>
+" Homepage: https://github.com/vim-perl/vim-perl
+" Bugs/requests: https://github.com/vim-perl/vim-perl/issues
+" Last Change: 2020 Apr 15
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal formatoptions-=t
+setlocal formatoptions+=crqol
+setlocal keywordprg=perldoc\ -f
+
+setlocal comments=:#
+setlocal commentstring=#%s
+
+" Change the browse dialog on Win32 to show mainly Perl-related files
+if has("gui_win32")
+ let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
+ \ "Perl Modules (*.pm)\t*.pm\n" .
+ \ "Perl Documentation Files (*.pod)\t*.pod\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Provided by Ned Konz <ned at bike-nomad dot com>
+"---------------------------------------------
+setlocal include=\\<\\(use\\\|require\\)\\>
+setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','')
+setlocal define=[^A-Za-z_]
+setlocal iskeyword+=:
+
+" The following line changes a global variable but is necessary to make
+" gf and similar commands work. Thanks to Andrew Pimlott for pointing
+" out the problem. If this causes a problem for you, add an
+" after/ftplugin/perl.vim file that contains
+" set isfname-=:
+set isfname+=:
+
+" Set this once, globally.
+if !exists("perlpath")
+ if executable("perl")
+ try
+ if &shellxquote != '"'
+ let perlpath = system('perl -e "print join(q/,/,@INC)"')
+ else
+ let perlpath = system("perl -e 'print join(q/,/,@INC)'")
+ endif
+ let perlpath = substitute(perlpath,',.$',',,','')
+ catch /E145:/
+ let perlpath = ".,,"
+ endtry
+ else
+ " If we can't call perl to get its path, just default to using the
+ " current directory and the directory of the current file.
+ let perlpath = ".,,"
+ endif
+endif
+
+" Append perlpath to the existing path value, if it is set. Since we don't
+" use += to do it because of the commas in perlpath, we have to handle the
+" global / local settings, too.
+if &l:path == ""
+ if &g:path == ""
+ let &l:path=perlpath
+ else
+ let &l:path=&g:path.",".perlpath
+ endif
+else
+ let &l:path=&l:path.",".perlpath
+endif
+"---------------------------------------------
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk< isf< kp< path<" .
+ \ " | unlet! b:browsefilter"
+
+" proper matching for matchit plugin
+let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField'
+let b:match_words = '\<if\>:\<elsif\>:\<else\>'
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/perl6.vim b/runtime/ftplugin/perl6.vim
new file mode 100644
index 0000000..0467bea
--- /dev/null
+++ b/runtime/ftplugin/perl6.vim
@@ -0,0 +1,77 @@
+" Vim filetype plugin file
+" Language: Perl 6
+" Maintainer: vim-perl <vim-perl@googlegroups.com>
+" Homepage: https://github.com/vim-perl/vim-perl
+" Bugs/requests: https://github.com/vim-perl/vim-perl/issues
+" Last Change: 2020 Apr 15
+" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
+"
+" Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal formatoptions-=t
+setlocal formatoptions+=crqol
+setlocal keywordprg=p6doc
+
+setlocal comments=:#
+setlocal commentstring=#%s
+
+" Change the browse dialog on Win32 to show mainly Perl-related files
+if has("gui_win32")
+ let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
+ \ "Perl Modules (*.pm)\t*.pm\n" .
+ \ "Perl Documentation Files (*.pod)\t*.pod\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Provided by Ned Konz <ned at bike-nomad dot com>
+"---------------------------------------------
+setlocal include=\\<\\(use\\\|require\\)\\>
+setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
+setlocal define=[^A-Za-z_]
+
+" The following line changes a global variable but is necessary to make
+" gf and similar commands work. Thanks to Andrew Pimlott for pointing out
+" the problem. If this causes a " problem for you, add an
+" after/ftplugin/perl6.vim file that contains
+" set isfname-=:
+set isfname+=:
+setlocal iskeyword=48-57,_,A-Z,a-z,:,-
+
+" Set this once, globally.
+if !exists("perlpath")
+ if executable("perl6")
+ try
+ if &shellxquote != '"'
+ let perlpath = system('perl6 -e "@*INC.join(q/,/).say"')
+ else
+ let perlpath = system("perl6 -e '@*INC.join(q/,/).say'")
+ endif
+ let perlpath = substitute(perlpath,',.$',',,','')
+ catch /E145:/
+ let perlpath = ".,,"
+ endtry
+ else
+ " If we can't call perl to get its path, just default to using the
+ " current directory and the directory of the current file.
+ let perlpath = ".,,"
+ endif
+endif
+
+let &l:path=perlpath
+"---------------------------------------------
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk<" .
+ \ " | unlet! b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/php.vim b/runtime/ftplugin/php.vim
new file mode 100644
index 0000000..a2f8b4d
--- /dev/null
+++ b/runtime/ftplugin/php.vim
@@ -0,0 +1,83 @@
+" Vim filetype plugin file
+" Language: php
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:keepcpo= &cpo
+set cpo&vim
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "HTML Files (*.html, *.htm)\t*.html;*.htm\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+endif
+if exists("b:match_skip")
+ unlet b:match_skip
+endif
+
+" Change the :browse e filter to primarily show PHP-related files.
+if has("gui_win32")
+ let b:browsefilter="PHP Files (*.php)\t*.php\n" . s:browsefilter
+endif
+
+" ###
+" Provided by Mikolaj Machowski <mikmach at wp dot pl>
+setlocal include=\\\(require\\\|include\\\)\\\(_once\\\)\\\?
+" Disabled changing 'iskeyword', it breaks a command such as "*"
+" setlocal iskeyword+=$
+
+if exists("loaded_matchit")
+ let b:match_words = '<?php:?>,\<switch\>:\<endswitch\>,' .
+ \ '\<if\>:\<elseif\>:\<else\>:\<endif\>,' .
+ \ '\<while\>:\<endwhile\>,' .
+ \ '\<do\>:\<while\>,' .
+ \ '\<for\>:\<endfor\>,' .
+ \ '\<foreach\>:\<endforeach\>,' .
+ \ '(:),[:],{:},' .
+ \ s:match_words
+endif
+" ###
+
+if exists('&omnifunc')
+ setlocal omnifunc=phpcomplete#CompletePHP
+endif
+
+" Section jumping: [[ and ]] provided by Antony Scriven <adscriven at gmail dot com>
+let s:function = '\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function'
+let s:class = '\(abstract\s\+\|final\s\+\)*class'
+let s:interface = 'interface'
+let s:section = '\(.*\%#\)\@!\_^\s*\zs\('.s:function.'\|'.s:class.'\|'.s:interface.'\)'
+exe 'nno <buffer> <silent> [[ ?' . escape(s:section, '|') . '?<CR>:nohls<CR>'
+exe 'nno <buffer> <silent> ]] /' . escape(s:section, '|') . '/<CR>:nohls<CR>'
+exe 'ono <buffer> <silent> [[ ?' . escape(s:section, '|') . '?<CR>:nohls<CR>'
+exe 'ono <buffer> <silent> ]] /' . escape(s:section, '|') . '/<CR>:nohls<CR>'
+
+setlocal commentstring=/*%s*/
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring< include< omnifunc<" .
+ \ " | unlet! b:browsefilter b:match_words | " .
+ \ s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/ftplugin/pinfo.vim b/runtime/ftplugin/pinfo.vim
new file mode 100644
index 0000000..50473a8
--- /dev/null
+++ b/runtime/ftplugin/pinfo.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: pinfo(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/plaintex.vim b/runtime/ftplugin/plaintex.vim
new file mode 100644
index 0000000..9e0e402
--- /dev/null
+++ b/runtime/ftplugin/plaintex.vim
@@ -0,0 +1,37 @@
+" plain TeX filetype plugin
+" Language: plain TeX (ft=plaintex)
+" Maintainer: Benji Fisher, Ph.D. <benji@member.AMS.org>
+" Version: 1.1
+" Last Change: Wed 19 Apr 2006
+
+" Only do this when not done yet for this buffer.
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Start with initex. This will also define b:did_ftplugin and b:undo_ftplugin .
+source $VIMRUNTIME/ftplugin/initex.vim
+
+" Avoid problems if running in 'compatible' mode.
+let s:save_cpo = &cpo
+set cpo&vim
+
+let b:undo_ftplugin .= "| unlet! b:match_ignorecase b:match_skip b:match_words"
+
+" Allow "[d" to be used to find a macro definition:
+let &l:define .= '\|\\new\(count\|dimen\|skip\|muskip\|box\|toks\|read\|write'
+ \ . '\|fam\|insert\)'
+
+" The following lines enable the macros/matchit.vim plugin for
+" extended matching with the % key.
+" There is no default meaning for \(...\) etc., but many users define one.
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ \ | let b:match_skip = 'r:\\\@<!\%(\\\\\)*%'
+ \ | let b:match_words = '(:),\[:],{:},\\(:\\),\\\[:\\],\\{:\\}'
+endif " exists("loaded_matchit")
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim:sts=2:sw=2:
diff --git a/runtime/ftplugin/postscr.vim b/runtime/ftplugin/postscr.vim
new file mode 100644
index 0000000..3bdd2e6
--- /dev/null
+++ b/runtime/ftplugin/postscr.vim
@@ -0,0 +1,38 @@
+" Vim filetype plugin file
+" Language: PostScript
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Last Change: 24th April 2012
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" PS comment formatting
+setlocal comments=b:%
+setlocal formatoptions-=t formatoptions+=rol
+
+" Define patterns for the matchit macro
+if !exists("b:match_words")
+ let b:match_ignorecase = 0
+ let b:match_words = '<<:>>,\<begin\>:\<end\>,\<save\>:\<restore\>,\<gsave\>:\<grestore\>'
+endif
+
+" Define patterns for the browse file filter
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "PostScript Files (*.ps)\t*.ps\n" .
+ \ "EPS Files (*.eps)\t*.eps\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setlocal comments< formatoptions<"
+ \ . "| unlet! b:browsefiler b:match_ignorecase b:match_words"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/procmail.vim b/runtime/ftplugin/procmail.vim
new file mode 100644
index 0000000..d64f192
--- /dev/null
+++ b/runtime/ftplugin/procmail.vim
@@ -0,0 +1,21 @@
+" Vim filetype plugin file
+" Language: procmail(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &l:include = '^\s*INCLUDERC\>'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/prolog.vim b/runtime/ftplugin/prolog.vim
new file mode 100644
index 0000000..f4e7d13
--- /dev/null
+++ b/runtime/ftplugin/prolog.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: Prolog
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=s1:/*,mb:*,ex:*/,:% commentstring=%\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/protocols.vim b/runtime/ftplugin/protocols.vim
new file mode 100644
index 0000000..83856ce
--- /dev/null
+++ b/runtime/ftplugin/protocols.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: protocols(5) - Internet protocols definition file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/pyrex.vim b/runtime/ftplugin/pyrex.vim
new file mode 100644
index 0000000..251da39
--- /dev/null
+++ b/runtime/ftplugin/pyrex.vim
@@ -0,0 +1,27 @@
+" Vim filetype plugin file
+" Language: Pyrex
+" Maintainer: Marco Barisione <marco.bari@people.it>
+" URL: http://marcobari.altervista.org/pyrex_vim.html
+" Last Change: 2012 May 18
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+
+" Behaves just like Python
+runtime! ftplugin/python.vim ftplugin/python_*.vim ftplugin/python/*.vim
+
+if has("gui_win32") && exists("b:browsefilter")
+ let b:browsefilter = "Pyrex files (*.pyx,*.pxd)\t*.pyx;*.pxd\n" .
+ \ "Python Files (*.py)\t*.py\n" .
+ \ "C Source Files (*.c)\t*.c\n" .
+ \ "C Header Files (*.h)\t*.h\n" .
+ \ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/ftplugin/python.vim b/runtime/ftplugin/python.vim
new file mode 100644
index 0000000..000ddf5
--- /dev/null
+++ b/runtime/ftplugin/python.vim
@@ -0,0 +1,189 @@
+" Vim filetype plugin file
+" Language: python
+" Maintainer: Tom Picton <tom@tompicton.co.uk>
+" Previous Maintainer: James Sully <sullyj3@gmail.com>
+" Previous Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Mon, 5 October 2020
+" https://github.com/tpict/vim-ftplugin-python
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
+setlocal cinkeys-=0#
+setlocal indentkeys-=0#
+setlocal include=^\\s*\\(from\\\|import\\)
+setlocal define=^\\s*\\(def\\\|class\\)
+
+" For imports with leading .., append / and replace additional .s with ../
+let b:grandparent_match = '^\(.\.\)\(\.*\)'
+let b:grandparent_sub = '\=submatch(1)."/".repeat("../",strlen(submatch(2)))'
+
+" For imports with a single leading ., replace it with ./
+let b:parent_match = '^\.\(\.\)\@!'
+let b:parent_sub = './'
+
+" Replace any . sandwiched between word characters with /
+let b:child_match = '\(\w\)\.\(\w\)'
+let b:child_sub = '\1/\2'
+
+setlocal includeexpr=substitute(substitute(substitute(
+ \v:fname,
+ \b:grandparent_match,b:grandparent_sub,''),
+ \b:parent_match,b:parent_sub,''),
+ \b:child_match,b:child_sub,'g')
+
+setlocal suffixesadd=.py
+setlocal comments=b:#,fb:-
+setlocal commentstring=#\ %s
+
+if has('python3')
+ setlocal omnifunc=python3complete#Complete
+elseif has('python')
+ setlocal omnifunc=pythoncomplete#Complete
+endif
+
+set wildignore+=*.pyc
+
+let b:next_toplevel='\v%$\|^(class\|def\|async def)>'
+let b:prev_toplevel='\v^(class\|def\|async def)>'
+let b:next_endtoplevel='\v%$\|\S.*\n+(def\|class)'
+let b:prev_endtoplevel='\v\S.*\n+(def\|class)'
+let b:next='\v%$\|^\s*(class\|def\|async def)>'
+let b:prev='\v^\s*(class\|def\|async def)>'
+let b:next_end='\v\S\n*(%$\|^(\s*\n*)*(class\|def\|async def)\|^\S)'
+let b:prev_end='\v\S\n*(^(\s*\n*)*(class\|def\|async def)\|^\S)'
+
+if !exists('g:no_plugin_maps') && !exists('g:no_python_maps')
+ execute "nnoremap <silent> <buffer> ]] :call <SID>Python_jump('n', '". b:next_toplevel."', 'W', v:count1)<cr>"
+ execute "nnoremap <silent> <buffer> [[ :call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb', v:count1)<cr>"
+ execute "nnoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', v:count1, 0)<cr>"
+ execute "nnoremap <silent> <buffer> [] :call <SID>Python_jump('n', '". b:prev_endtoplevel."', 'Wb', v:count1, 0)<cr>"
+ execute "nnoremap <silent> <buffer> ]m :call <SID>Python_jump('n', '". b:next."', 'W', v:count1)<cr>"
+ execute "nnoremap <silent> <buffer> [m :call <SID>Python_jump('n', '". b:prev."', 'Wb', v:count1)<cr>"
+ execute "nnoremap <silent> <buffer> ]M :call <SID>Python_jump('n', '". b:next_end."', 'W', v:count1, 0)<cr>"
+ execute "nnoremap <silent> <buffer> [M :call <SID>Python_jump('n', '". b:prev_end."', 'Wb', v:count1, 0)<cr>"
+
+ execute "onoremap <silent> <buffer> ]] :call <SID>Python_jump('o', '". b:next_toplevel."', 'W', v:count1)<cr>"
+ execute "onoremap <silent> <buffer> [[ :call <SID>Python_jump('o', '". b:prev_toplevel."', 'Wb', v:count1)<cr>"
+ execute "onoremap <silent> <buffer> ][ :call <SID>Python_jump('o', '". b:next_endtoplevel."', 'W', v:count1, 0)<cr>"
+ execute "onoremap <silent> <buffer> [] :call <SID>Python_jump('o', '". b:prev_endtoplevel."', 'Wb', v:count1, 0)<cr>"
+ execute "onoremap <silent> <buffer> ]m :call <SID>Python_jump('o', '". b:next."', 'W', v:count1)<cr>"
+ execute "onoremap <silent> <buffer> [m :call <SID>Python_jump('o', '". b:prev."', 'Wb', v:count1)<cr>"
+ execute "onoremap <silent> <buffer> ]M :call <SID>Python_jump('o', '". b:next_end."', 'W', v:count1, 0)<cr>"
+ execute "onoremap <silent> <buffer> [M :call <SID>Python_jump('o', '". b:prev_end."', 'Wb', v:count1, 0)<cr>"
+
+ execute "xnoremap <silent> <buffer> ]] :call <SID>Python_jump('x', '". b:next_toplevel."', 'W', v:count1)<cr>"
+ execute "xnoremap <silent> <buffer> [[ :call <SID>Python_jump('x', '". b:prev_toplevel."', 'Wb', v:count1)<cr>"
+ execute "xnoremap <silent> <buffer> ][ :call <SID>Python_jump('x', '". b:next_endtoplevel."', 'W', v:count1, 0)<cr>"
+ execute "xnoremap <silent> <buffer> [] :call <SID>Python_jump('x', '". b:prev_endtoplevel."', 'Wb', v:count1, 0)<cr>"
+ execute "xnoremap <silent> <buffer> ]m :call <SID>Python_jump('x', '". b:next."', 'W', v:count1)<cr>"
+ execute "xnoremap <silent> <buffer> [m :call <SID>Python_jump('x', '". b:prev."', 'Wb', v:count1)<cr>"
+ execute "xnoremap <silent> <buffer> ]M :call <SID>Python_jump('x', '". b:next_end."', 'W', v:count1, 0)<cr>"
+ execute "xnoremap <silent> <buffer> [M :call <SID>Python_jump('x', '". b:prev_end."', 'Wb', v:count1, 0)<cr>"
+endif
+
+if !exists('*<SID>Python_jump')
+ fun! <SID>Python_jump(mode, motion, flags, count, ...) range
+ let l:startofline = (a:0 >= 1) ? a:1 : 1
+
+ if a:mode == 'x'
+ normal! gv
+ endif
+
+ if l:startofline == 1
+ normal! 0
+ endif
+
+ let cnt = a:count
+ mark '
+ while cnt > 0
+ call search(a:motion, a:flags)
+ let cnt = cnt - 1
+ endwhile
+
+ if l:startofline == 1
+ normal! ^
+ endif
+ endfun
+endif
+
+if has("browsefilter") && !exists("b:browsefilter")
+ let b:browsefilter = "Python Files (*.py)\t*.py\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+if !exists("g:python_recommended_style") || g:python_recommended_style != 0
+ " As suggested by PEP8.
+ setlocal expandtab tabstop=4 softtabstop=4 shiftwidth=4
+endif
+
+" Use pydoc for keywordprg.
+" Unix users preferentially get pydoc3, then pydoc2.
+" Windows doesn't have a standalone pydoc executable in $PATH by default, nor
+" does it have separate python2/3 executables, so Windows users just get
+" whichever version corresponds to their installed Python version.
+if executable('python3')
+ setlocal keywordprg=python3\ -m\ pydoc
+elseif executable('python')
+ setlocal keywordprg=python\ -m\ pydoc
+endif
+
+" Script for filetype switching to undo the local stuff we may have changed
+let b:undo_ftplugin = 'setlocal cinkeys<'
+ \ . '|setlocal comments<'
+ \ . '|setlocal commentstring<'
+ \ . '|setlocal expandtab<'
+ \ . '|setlocal include<'
+ \ . '|setlocal includeexpr<'
+ \ . '|setlocal indentkeys<'
+ \ . '|setlocal keywordprg<'
+ \ . '|setlocal omnifunc<'
+ \ . '|setlocal shiftwidth<'
+ \ . '|setlocal softtabstop<'
+ \ . '|setlocal suffixesadd<'
+ \ . '|setlocal tabstop<'
+ \ . '|silent! nunmap <buffer> [M'
+ \ . '|silent! nunmap <buffer> [['
+ \ . '|silent! nunmap <buffer> []'
+ \ . '|silent! nunmap <buffer> [m'
+ \ . '|silent! nunmap <buffer> ]M'
+ \ . '|silent! nunmap <buffer> ]['
+ \ . '|silent! nunmap <buffer> ]]'
+ \ . '|silent! nunmap <buffer> ]m'
+ \ . '|silent! ounmap <buffer> [M'
+ \ . '|silent! ounmap <buffer> [['
+ \ . '|silent! ounmap <buffer> []'
+ \ . '|silent! ounmap <buffer> [m'
+ \ . '|silent! ounmap <buffer> ]M'
+ \ . '|silent! ounmap <buffer> ]['
+ \ . '|silent! ounmap <buffer> ]]'
+ \ . '|silent! ounmap <buffer> ]m'
+ \ . '|silent! xunmap <buffer> [M'
+ \ . '|silent! xunmap <buffer> [['
+ \ . '|silent! xunmap <buffer> []'
+ \ . '|silent! xunmap <buffer> [m'
+ \ . '|silent! xunmap <buffer> ]M'
+ \ . '|silent! xunmap <buffer> ]['
+ \ . '|silent! xunmap <buffer> ]]'
+ \ . '|silent! xunmap <buffer> ]m'
+ \ . '|unlet! b:browsefilter'
+ \ . '|unlet! b:child_match'
+ \ . '|unlet! b:child_sub'
+ \ . '|unlet! b:grandparent_match'
+ \ . '|unlet! b:grandparent_sub'
+ \ . '|unlet! b:next'
+ \ . '|unlet! b:next_end'
+ \ . '|unlet! b:next_endtoplevel'
+ \ . '|unlet! b:next_toplevel'
+ \ . '|unlet! b:parent_match'
+ \ . '|unlet! b:parent_sub'
+ \ . '|unlet! b:prev'
+ \ . '|unlet! b:prev_end'
+ \ . '|unlet! b:prev_endtoplevel'
+ \ . '|unlet! b:prev_toplevel'
+ \ . '|unlet! b:undo_ftplugin'
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/ftplugin/qf.vim b/runtime/ftplugin/qf.vim
new file mode 100644
index 0000000..85fb9f6
--- /dev/null
+++ b/runtime/ftplugin/qf.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Language: Vim's quickfix window
+" Maintainer: Lech Lorens <Lech.Lorens@gmail.com>
+" Last Change: 2019 Jul 15
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+if !get(g:, 'qf_disable_statusline')
+ let b:undo_ftplugin = "set stl<"
+
+ " Display the command that produced the list in the quickfix window:
+ setlocal stl=%t%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}\ %=%-15(%l,%c%V%)\ %P
+endif
diff --git a/runtime/ftplugin/quake.vim b/runtime/ftplugin/quake.vim
new file mode 100644
index 0000000..c3a2e52
--- /dev/null
+++ b/runtime/ftplugin/quake.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: Quake[1-3] configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:// commentstring=//\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/r.vim b/runtime/ftplugin/r.vim
new file mode 100644
index 0000000..4ea3073
--- /dev/null
+++ b/runtime/ftplugin/r.vim
@@ -0,0 +1,32 @@
+" Vim filetype plugin file
+" Language: R
+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
+" Homepage: https://github.com/jalvesaq/R-Vim-runtime
+" Last Change: Tue Apr 07, 2015 04:38PM
+
+" Only do this when not yet done for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal iskeyword=@,48-57,_,.
+setlocal formatoptions-=t
+setlocal commentstring=#\ %s
+setlocal comments=:#',:###,:##,:#
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "R Source Files (*.R)\t*.R\n" .
+ \ "Files that include R (*.Rnw *.Rd *.Rmd *.Rrst)\t*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl cms< com< fo< isk< | unlet! b:browsefilter"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/racc.vim b/runtime/ftplugin/racc.vim
new file mode 100644
index 0000000..0cd852c
--- /dev/null
+++ b/runtime/ftplugin/racc.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: Racc input file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=s1:/*,mb:*,ex:*/,:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/readline.vim b/runtime/ftplugin/readline.vim
new file mode 100644
index 0000000..e9ef93e
--- /dev/null
+++ b/runtime/ftplugin/readline.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: readline(3) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/registry.vim b/runtime/ftplugin/registry.vim
new file mode 100644
index 0000000..385785a
--- /dev/null
+++ b/runtime/ftplugin/registry.vim
@@ -0,0 +1,36 @@
+" Vim filetype plugin file
+" Language: Windows Registry export with regedit (*.reg)
+" Maintainer: Cade Forester <ahx2323@gmail.com>
+" Latest Revision: 2014-01-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin =
+ \ 'let b:browsefilter = "" | ' .
+ \ 'setlocal ' .
+ \ 'comments< '.
+ \ 'commentstring< ' .
+ \ 'formatoptions< '
+
+
+if has( 'gui_win32' )
+\ && !exists( 'b:browsefilter' )
+ let b:browsefilter =
+ \ 'registry files (*.reg)\t*.reg\n' .
+ \ 'All files (*.*)\t*.*\n'
+endif
+
+setlocal comments=:;
+setlocal commentstring=;\ %s
+
+setlocal formatoptions-=t
+setlocal formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/reva.vim b/runtime/ftplugin/reva.vim
new file mode 100644
index 0000000..05c8bc3
--- /dev/null
+++ b/runtime/ftplugin/reva.vim
@@ -0,0 +1,25 @@
+" Vim ftplugin file
+" Language: Reva Forth
+" Version: 7.1
+" Last Change: 2008/01/11
+" Maintainer: Ron Aaron <ron@ronware.org>
+" URL: http://ronware.org/reva/
+" Filetypes: *.rf *.frt
+" NOTE: Forth allows any non-whitespace in a name, so you need to do:
+" setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
+"
+" This goes with the syntax/reva.vim file.
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+setlocal sts=4 sw=4
+setlocal com=s1:/*,mb:*,ex:*/,:\|,:\\
+setlocal fo=tcrqol
+setlocal matchpairs+=\::;
+setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
diff --git a/runtime/ftplugin/rhelp.vim b/runtime/ftplugin/rhelp.vim
new file mode 100644
index 0000000..fdac38f
--- /dev/null
+++ b/runtime/ftplugin/rhelp.vim
@@ -0,0 +1,30 @@
+" Vim filetype plugin file
+" Language: R help file
+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
+" Homepage: https://github.com/jalvesaq/R-Vim-runtime
+" Last Change: Tue Apr 07, 2015 04:37PM
+
+" Only do this when not yet done for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal iskeyword=@,48-57,_,.
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl isk< | unlet! b:browsefilter"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: sw=2
diff --git a/runtime/ftplugin/rmd.vim b/runtime/ftplugin/rmd.vim
new file mode 100644
index 0000000..7b0db8d
--- /dev/null
+++ b/runtime/ftplugin/rmd.vim
@@ -0,0 +1,63 @@
+" Vim filetype plugin file
+" Language: R Markdown file
+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
+" Homepage: https://github.com/jalvesaq/R-Vim-runtime
+" Last Change: Sun Jul 22, 2018 06:51PM
+" Original work by Alex Zvoleff (adjusted from R help for rmd by Michel Kuhlmann)
+
+" Only do this when not yet done for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+if exists('g:rmd_include_html') && g:rmd_include_html
+ runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+endif
+
+setlocal comments=fb:*,fb:-,fb:+,n:>
+setlocal commentstring=#\ %s
+setlocal formatoptions+=tcqln
+setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+
+setlocal iskeyword=@,48-57,_,.
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+function! FormatRmd()
+ if search("^[ \t]*```[ ]*{r", "bncW") > search("^[ \t]*```$", "bncW")
+ setlocal comments=:#',:###,:##,:#
+ else
+ setlocal comments=fb:*,fb:-,fb:+,n:>
+ endif
+ return 1
+endfunction
+
+" If you do not want 'comments' dynamically defined, put in your vimrc:
+" let g:rmd_dynamic_comments = 0
+if !exists("g:rmd_dynamic_comments") || (exists("g:rmd_dynamic_comments") && g:rmd_dynamic_comments == 1)
+ setlocal formatexpr=FormatRmd()
+endif
+
+
+" Enables pandoc if it is installed
+unlet! b:did_ftplugin
+runtime ftplugin/pandoc.vim
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin .= " | setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
+else
+ let b:undo_ftplugin = "setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: sw=2
diff --git a/runtime/ftplugin/rnc.vim b/runtime/ftplugin/rnc.vim
new file mode 100644
index 0000000..90aa111
--- /dev/null
+++ b/runtime/ftplugin/rnc.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: Relax NG compact syntax
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/rnoweb.vim b/runtime/ftplugin/rnoweb.vim
new file mode 100644
index 0000000..e184399
--- /dev/null
+++ b/runtime/ftplugin/rnoweb.vim
@@ -0,0 +1,41 @@
+" Vim filetype plugin file
+" Language: Rnoweb
+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
+" Homepage: https://github.com/jalvesaq/R-Vim-runtime
+" Last Change: Tue Apr 07, 2015 04:37PM
+
+" Only do this when not yet done for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+runtime! ftplugin/tex.vim
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Enables Vim-Latex-Suite, LaTeX-Box if installed
+runtime ftplugin/tex_*.vim
+
+setlocal iskeyword=@,48-57,_,.
+setlocal suffixesadd=.bib,.tex
+setlocal comments=b:%,b:#,b:##,b:###,b:#'
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin .= " | setl isk< sua< com< | unlet! b:browsefilter"
+else
+ let b:undo_ftplugin = "setl isk< sua< com< | unlet! b:browsefilter"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: sw=2
diff --git a/runtime/ftplugin/rpl.vim b/runtime/ftplugin/rpl.vim
new file mode 100644
index 0000000..8b4d5b0
--- /dev/null
+++ b/runtime/ftplugin/rpl.vim
@@ -0,0 +1,22 @@
+" Vim filetype plugin file
+" Language: RPL/2
+" Maintainer: Joël BERTRAND <rpl2@free.fr>
+" Last Change: 2012 Mar 07
+" Version: 0.1
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+let b:undo_ftplugin = "setlocal fo< comments<"
diff --git a/runtime/ftplugin/rrst.vim b/runtime/ftplugin/rrst.vim
new file mode 100644
index 0000000..3e82847
--- /dev/null
+++ b/runtime/ftplugin/rrst.vim
@@ -0,0 +1,54 @@
+" Vim filetype plugin file
+" Language: reStructuredText documentation format with R code
+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
+" Homepage: https://github.com/jalvesaq/R-Vim-runtime
+" Last Change: Wed Nov 01, 2017 10:47PM
+" Original work by Alex Zvoleff
+
+" Only do this when not yet done for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=fb:*,fb:-,fb:+,n:>
+setlocal commentstring=#\ %s
+setlocal formatoptions+=tcqln
+setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+
+setlocal iskeyword=@,48-57,_,.
+
+function! FormatRrst()
+ if search('^\.\. {r', "bncW") > search('^\.\. \.\.$', "bncW")
+ setlocal comments=:#',:###,:##,:#
+ else
+ setlocal comments=fb:*,fb:-,fb:+,n:>
+ endif
+ return 1
+endfunction
+
+" If you do not want 'comments' dynamically defined, put in your vimrc:
+" let g:rrst_dynamic_comments = 0
+if !exists("g:rrst_dynamic_comments") || (exists("g:rrst_dynamic_comments") && g:rrst_dynamic_comments == 1)
+ setlocal formatexpr=FormatRrst()
+endif
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin .= " | setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
+else
+ let b:undo_ftplugin = "setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: sw=2
diff --git a/runtime/ftplugin/rst.vim b/runtime/ftplugin/rst.vim
new file mode 100644
index 0000000..ff7a402
--- /dev/null
+++ b/runtime/ftplugin/rst.vim
@@ -0,0 +1,47 @@
+" reStructuredText filetype plugin file
+" Language: reStructuredText documentation format
+" Maintainer: Marshall Ward <marshall.ward@gmail.com>
+" Original Maintainer: Nikolai Weibull <now@bitwi.se>
+" Website: https://github.com/marshallward/vim-restructuredtext
+" Latest Revision: 2020-03-31
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+"Disable folding
+if !exists('g:rst_fold_enabled')
+ let g:rst_fold_enabled = 0
+endif
+
+let b:undo_ftplugin = "setl com< cms< et< fo<"
+
+setlocal comments=fb:.. commentstring=..\ %s expandtab
+setlocal formatoptions+=tcroql
+
+" reStructuredText standard recommends that tabs be expanded to 8 spaces
+" The choice of 3-space indentation is to provide slightly better support for
+" directives (..) and ordered lists (1.), although it can cause problems for
+" many other cases.
+"
+" More sophisticated indentation rules should be revisted in the future.
+
+if exists("g:rst_style") && g:rst_style != 0
+ setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8
+endif
+
+if g:rst_fold_enabled != 0 && has('patch-7.3.867') " Introduced the TextChanged event.
+ setlocal foldmethod=expr
+ setlocal foldexpr=RstFold#GetRstFold()
+ setlocal foldtext=RstFold#GetRstFoldText()
+ augroup RstFold
+ autocmd TextChanged,InsertLeave <buffer> unlet! b:RstFoldCache
+ augroup END
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/ruby.vim b/runtime/ftplugin/ruby.vim
new file mode 100644
index 0000000..b4a8eaa
--- /dev/null
+++ b/runtime/ftplugin/ruby.vim
@@ -0,0 +1,437 @@
+" Vim filetype plugin
+" Language: Ruby
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" URL: https://github.com/vim-ruby/vim-ruby
+" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2019 Nov 06
+
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if has("gui_running") && !has("gui_win32")
+ setlocal keywordprg=ri\ -T\ -f\ bs
+else
+ setlocal keywordprg=ri
+endif
+
+" Matchit support
+if exists("loaded_matchit") && !exists("b:match_words")
+ let b:match_ignorecase = 0
+
+ let b:match_words =
+ \ '{\|\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|def\|=\@<!begin\)\>=\@!' .
+ \ ':' .
+ \ '\<\%(else\|elsif\|ensure\|when\|rescue\|break\|redo\|next\|retry\)\>' .
+ \ ':' .
+ \ '}\|\%(^\|[^.\:@$=]\)\@<=\<end\:\@!\>' .
+ \ ',^=begin\>:^=end\>,' .
+ \ ',\[:\],(:)'
+
+ let b:match_skip =
+ \ "synIDattr(synID(line('.'),col('.'),0),'name') =~ '" .
+ \ "\\<ruby\\%(String\\|.\+Delimiter\\|Character\\|.\+Escape\\|" .
+ \ "Regexp\\|Interpolation\\|Comment\\|Documentation\\|" .
+ \ "ConditionalModifier\\|RepeatModifier\\|RescueModifier\\|OptionalDo\\|" .
+ \ "MethodName\\|BlockArgument\\|KeywordAsMethod\\|ClassVariable\\|" .
+ \ "InstanceVariable\\|GlobalVariable\\|Symbol\\)\\>'"
+endif
+
+setlocal formatoptions-=t formatoptions+=croql
+
+setlocal include=^\\s*\\<\\(load\\>\\\|require\\>\\\|autoload\\s*:\\=[\"']\\=\\h\\w*[\"']\\=,\\)
+setlocal suffixesadd=.rb
+
+if exists("&ofu") && has("ruby")
+ setlocal omnifunc=rubycomplete#Complete
+endif
+
+" TODO:
+"setlocal define=^\\s*def
+
+setlocal comments=:#
+setlocal commentstring=#\ %s
+
+if !exists('g:ruby_version_paths')
+ let g:ruby_version_paths = {}
+endif
+
+function! s:query_path(root) abort
+ let code = "print $:.join %q{,}"
+ if &shell =~# 'sh' && empty(&shellxquote)
+ let prefix = 'env PATH='.shellescape($PATH).' '
+ else
+ let prefix = ''
+ endif
+ if &shellxquote == "'"
+ let path_check = prefix.'ruby --disable-gems -e "' . code . '"'
+ else
+ let path_check = prefix."ruby --disable-gems -e '" . code . "'"
+ endif
+
+ let cd = haslocaldir() ? 'lcd' : 'cd'
+ let cwd = fnameescape(getcwd())
+ try
+ exe cd fnameescape(a:root)
+ let path = split(system(path_check),',')
+ exe cd cwd
+ return path
+ finally
+ exe cd cwd
+ endtry
+endfunction
+
+function! s:build_path(path) abort
+ let path = join(map(copy(a:path), 'v:val ==# "." ? "" : v:val'), ',')
+ if &g:path !~# '\v^%(\.,)=%(/%(usr|emx)/include,)=,$'
+ let path = substitute(&g:path,',,$',',','') . ',' . path
+ endif
+ return path
+endfunction
+
+if !exists('b:ruby_version') && !exists('g:ruby_path') && isdirectory(expand('%:p:h'))
+ let s:version_file = findfile('.ruby-version', '.;')
+ if !empty(s:version_file) && filereadable(s:version_file)
+ let b:ruby_version = get(readfile(s:version_file, '', 1), '')
+ if !has_key(g:ruby_version_paths, b:ruby_version)
+ let g:ruby_version_paths[b:ruby_version] = s:query_path(fnamemodify(s:version_file, ':p:h'))
+ endif
+ endif
+endif
+
+if exists("g:ruby_path")
+ let s:ruby_path = type(g:ruby_path) == type([]) ? join(g:ruby_path, ',') : g:ruby_path
+elseif has_key(g:ruby_version_paths, get(b:, 'ruby_version', ''))
+ let s:ruby_paths = g:ruby_version_paths[b:ruby_version]
+ let s:ruby_path = s:build_path(s:ruby_paths)
+else
+ if !exists('g:ruby_default_path')
+ if has("ruby") && has("win32")
+ ruby ::VIM::command( 'let g:ruby_default_path = split("%s",",")' % $:.join(%q{,}) )
+ elseif executable('ruby')
+ let g:ruby_default_path = s:query_path($HOME)
+ else
+ let g:ruby_default_path = map(split($RUBYLIB,':'), 'v:val ==# "." ? "" : v:val')
+ endif
+ endif
+ let s:ruby_paths = g:ruby_default_path
+ let s:ruby_path = s:build_path(s:ruby_paths)
+endif
+
+if stridx(&l:path, s:ruby_path) == -1
+ let &l:path = s:ruby_path
+endif
+if exists('s:ruby_paths') && stridx(&l:tags, join(map(copy(s:ruby_paths),'v:val."/tags"'),',')) == -1
+ let &l:tags = &tags . ',' . join(map(copy(s:ruby_paths),'v:val."/tags"'),',')
+endif
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "Ruby Source Files (*.rb)\t*.rb\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl inc= sua= path= tags= fo< com< cms< kp="
+ \."| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
+ \."| if exists('&ofu') && has('ruby') | setl ofu< | endif"
+
+if get(g:, 'ruby_recommended_style', 1)
+ setlocal shiftwidth=2 softtabstop=2 expandtab
+ let b:undo_ftplugin .= ' | setl sw< sts< et<'
+endif
+
+" To activate, :set ballooneval
+if exists('+balloonexpr') && get(g:, 'ruby_balloonexpr')
+ setlocal balloonexpr=RubyBalloonexpr()
+ let b:undo_ftplugin .= "| setl bexpr="
+endif
+
+function! s:map(mode, flags, map) abort
+ let from = matchstr(a:map, '\S\+')
+ if empty(mapcheck(from, a:mode))
+ exe a:mode.'map' '<buffer>' a:flags a:map
+ let b:undo_ftplugin .= '|sil! '.a:mode.'unmap <buffer> '.from
+ endif
+endfunction
+
+cmap <buffer><script><expr> <Plug><ctag> substitute(RubyCursorTag(),'^$',"\022\027",'')
+cmap <buffer><script><expr> <Plug><cfile> substitute(RubyCursorFile(),'^$',"\022\006",'')
+let b:undo_ftplugin .= "| sil! cunmap <buffer> <Plug><ctag>| sil! cunmap <buffer> <Plug><cfile>"
+
+if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
+ nmap <buffer><script> <SID>: :<C-U>
+ nmap <buffer><script> <SID>c: :<C-U><C-R>=v:count ? v:count : ''<CR>
+
+ nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','n')<CR>
+ nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','n')<CR>
+ nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','n')<CR>
+ nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','n')<CR>
+ xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','v')<CR>
+ xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','v')<CR>
+ xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','v')<CR>
+ xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','v')<CR>
+
+ nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','n')<CR>
+ nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','n')<CR>
+ nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','n')<CR>
+ nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','n')<CR>
+ xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','v')<CR>
+ xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','v')<CR>
+ xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','v')<CR>
+ xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','v')<CR>
+
+ let b:undo_ftplugin = b:undo_ftplugin
+ \."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
+ \."| sil! exe 'unmap <buffer> [m' | sil! exe 'unmap <buffer> ]m' | sil! exe 'unmap <buffer> [M' | sil! exe 'unmap <buffer> ]M'"
+
+ if maparg('im','x') == '' && maparg('im','o') == '' && maparg('am','x') == '' && maparg('am','o') == ''
+ onoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+ onoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+ xnoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+ xnoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+ let b:undo_ftplugin = b:undo_ftplugin
+ \."| sil! exe 'ounmap <buffer> im' | sil! exe 'ounmap <buffer> am'"
+ \."| sil! exe 'xunmap <buffer> im' | sil! exe 'xunmap <buffer> am'"
+ endif
+
+ if maparg('iM','x') == '' && maparg('iM','o') == '' && maparg('aM','x') == '' && maparg('aM','o') == ''
+ onoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+ onoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+ xnoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+ xnoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+ let b:undo_ftplugin = b:undo_ftplugin
+ \."| sil! exe 'ounmap <buffer> iM' | sil! exe 'ounmap <buffer> aM'"
+ \."| sil! exe 'xunmap <buffer> iM' | sil! exe 'xunmap <buffer> aM'"
+ endif
+
+ call s:map('c', '', '<C-R><C-F> <Plug><cfile>')
+
+ cmap <buffer><script><expr> <SID>tagzv &foldopen =~# 'tag' ? '<Bar>norm! zv' : ''
+ call s:map('n', '<silent>', '<C-]> <SID>:exe v:count1."tag <Plug><ctag>"<SID>tagzv<CR>')
+ call s:map('n', '<silent>', 'g<C-]> <SID>:exe "tjump <Plug><ctag>"<SID>tagzv<CR>')
+ call s:map('n', '<silent>', 'g] <SID>:exe "tselect <Plug><ctag>"<SID>tagzv<CR>')
+ call s:map('n', '<silent>', '<C-W>] <SID>:exe v:count1."stag <Plug><ctag>"<SID>tagzv<CR>')
+ call s:map('n', '<silent>', '<C-W><C-]> <SID>:exe v:count1."stag <Plug><ctag>"<SID>tagzv<CR>')
+ call s:map('n', '<silent>', '<C-W>g<C-]> <SID>:exe "stjump <Plug><ctag>"<SID>tagzv<CR>')
+ call s:map('n', '<silent>', '<C-W>g] <SID>:exe "stselect <Plug><ctag>"<SID>tagzv<CR>')
+ call s:map('n', '<silent>', '<C-W>} <SID>:exe v:count1."ptag <Plug><ctag>"<CR>')
+ call s:map('n', '<silent>', '<C-W>g} <SID>:exe "ptjump <Plug><ctag>"<CR>')
+
+ call s:map('n', '<silent>', 'gf <SID>c:find <Plug><cfile><CR>')
+ call s:map('n', '<silent>', '<C-W>f <SID>c:sfind <Plug><cfile><CR>')
+ call s:map('n', '<silent>', '<C-W><C-F> <SID>c:sfind <Plug><cfile><CR>')
+ call s:map('n', '<silent>', '<C-W>gf <SID>c:tabfind <Plug><cfile><CR>')
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+if exists("g:did_ruby_ftplugin_functions")
+ finish
+endif
+let g:did_ruby_ftplugin_functions = 1
+
+function! RubyBalloonexpr() abort
+ if !exists('s:ri_found')
+ let s:ri_found = executable('ri')
+ endif
+ if s:ri_found
+ let line = getline(v:beval_lnum)
+ let b = matchstr(strpart(line,0,v:beval_col),'\%(\w\|[:.]\)*$')
+ let a = substitute(matchstr(strpart(line,v:beval_col),'^\w*\%([?!]\|\s*=\)\?'),'\s\+','','g')
+ let str = b.a
+ let before = strpart(line,0,v:beval_col-strlen(b))
+ let after = strpart(line,v:beval_col+strlen(a))
+ if str =~ '^\.'
+ let str = substitute(str,'^\.','#','g')
+ if before =~ '\]\s*$'
+ let str = 'Array'.str
+ elseif before =~ '}\s*$'
+ " False positives from blocks here
+ let str = 'Hash'.str
+ elseif before =~ "[\"'`]\\s*$" || before =~ '\$\d\+\s*$'
+ let str = 'String'.str
+ elseif before =~ '\$\d\+\.\d\+\s*$'
+ let str = 'Float'.str
+ elseif before =~ '\$\d\+\s*$'
+ let str = 'Integer'.str
+ elseif before =~ '/\s*$'
+ let str = 'Regexp'.str
+ else
+ let str = substitute(str,'^#','.','')
+ endif
+ endif
+ let str = substitute(str,'.*\.\s*to_f\s*\.\s*','Float#','')
+ let str = substitute(str,'.*\.\s*to_i\%(nt\)\=\s*\.\s*','Integer#','')
+ let str = substitute(str,'.*\.\s*to_s\%(tr\)\=\s*\.\s*','String#','')
+ let str = substitute(str,'.*\.\s*to_sym\s*\.\s*','Symbol#','')
+ let str = substitute(str,'.*\.\s*to_a\%(ry\)\=\s*\.\s*','Array#','')
+ let str = substitute(str,'.*\.\s*to_proc\s*\.\s*','Proc#','')
+ if str !~ '^\w'
+ return ''
+ endif
+ silent! let res = substitute(system("ri -f rdoc -T \"".str.'"'),'\n$','','')
+ if res =~ '^Nothing known about' || res =~ '^Bad argument:' || res =~ '^More than one method'
+ return ''
+ endif
+ return res
+ else
+ return ""
+ endif
+endfunction
+
+function! s:searchsyn(pattern, syn, flags, mode) abort
+ let cnt = v:count1
+ norm! m'
+ if a:mode ==# 'v'
+ norm! gv
+ endif
+ let i = 0
+ call map(a:syn, 'hlID(v:val)')
+ while i < cnt
+ let i = i + 1
+ let line = line('.')
+ let col = col('.')
+ let pos = search(a:pattern,'W'.a:flags)
+ while pos != 0 && index(a:syn, s:synid()) < 0
+ let pos = search(a:pattern,'W'.a:flags)
+ endwhile
+ if pos == 0
+ call cursor(line,col)
+ return
+ endif
+ endwhile
+endfunction
+
+function! s:synid() abort
+ return synID(line('.'),col('.'),0)
+endfunction
+
+function! s:wrap_i(back,forward) abort
+ execute 'norm! k'
+ execute 'norm '.a:forward
+ let line = line('.')
+ execute 'norm '.a:back
+ if line('.') == line - 1
+ return s:wrap_a(a:back,a:forward)
+ endif
+ execute 'norm! jV'
+ execute 'norm '.a:forward
+ execute 'norm! k'
+endfunction
+
+function! s:wrap_a(back,forward) abort
+ execute 'norm '.a:forward
+ if line('.') < line('$') && getline(line('.')+1) ==# ''
+ let after = 1
+ endif
+ execute 'norm '.a:back
+ while getline(line('.')-1) =~# '^\s*#' && line('.')
+ -
+ endwhile
+ if exists('after')
+ execute 'norm! V'
+ execute 'norm '.a:forward
+ execute 'norm! j'
+ elseif line('.') > 1 && getline(line('.')-1) =~# '^\s*$'
+ execute 'norm! kV'
+ execute 'norm '.a:forward
+ else
+ execute 'norm! V'
+ execute 'norm '.a:forward
+ endif
+endfunction
+
+function! RubyCursorIdentifier() abort
+ let asciicode = '\%(\w\|[]})\"'."'".']\)\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)'
+ let number = '\%(\%(\w\|[]})\"'."'".']\s*\)\@<!-\)\=\%(\<[[:digit:]_]\+\%(\.[[:digit:]_]\+\)\=\%([Ee][[:digit:]_]\+\)\=\>\|\<0[xXbBoOdD][[:xdigit:]_]\+\>\)\|'.asciicode
+ let operator = '\%(\[\]\|<<\|<=>\|[!<>]=\=\|===\=\|[!=]\~\|>>\|\*\*\|\.\.\.\=\|=>\|[~^&|*/%+-]\)'
+ let method = '\%(\.[_a-zA-Z]\w*\s*=>\@!\|\<[_a-zA-Z]\w*\>[?!]\=\)'
+ let global = '$\%([!$&"'."'".'*+,./:;<=>?@\`~]\|-\=\w\+\>\)'
+ let symbolizable = '\%(\%(@@\=\)\w\+\>\|'.global.'\|'.method.'\|'.operator.'\)'
+ let pattern = '\C\s*\%('.number.'\|\%(:\@<!:\)\='.symbolizable.'\)'
+ let [lnum, col] = searchpos(pattern,'bcn',line('.'))
+ let raw = matchstr(getline('.')[col-1 : ],pattern)
+ let stripped = substitute(substitute(raw,'\s\+=$','=',''),'^\s*[:.]\=','','')
+ return stripped == '' ? expand("<cword>") : stripped
+endfunction
+
+function! RubyCursorTag() abort
+ return substitute(RubyCursorIdentifier(), '^[$@]*', '', '')
+endfunction
+
+function! RubyCursorFile() abort
+ let isfname = &isfname
+ try
+ set isfname+=:
+ let cfile = expand('<cfile>')
+ finally
+ let isfname = &isfname
+ endtry
+ let pre = matchstr(strpart(getline('.'), 0, col('.')-1), '.*\f\@<!')
+ let post = matchstr(strpart(getline('.'), col('.')), '\f\@!.*')
+ if s:synid() ==# hlID('rubyConstant')
+ let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','')
+ let cfile = substitute(cfile,'^::','','')
+ let cfile = substitute(cfile,'::','/','g')
+ let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g')
+ let cfile = substitute(cfile,'\(\l\|\d\)\(\u\)','\1_\2', 'g')
+ return tolower(cfile) . '.rb'
+ elseif getline('.') =~# '^\s*require_relative\s*\(["'']\).*\1\s*$'
+ let cfile = expand('%:p:h') . '/' . matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+ let cfile .= cfile !~# '\.rb$' ? '.rb' : ''
+ elseif getline('.') =~# '^\s*\%(require[( ]\|load[( ]\|autoload[( ]:\w\+,\)\s*\%(::\)\=File\.expand_path(\(["'']\)\.\./.*\1,\s*__FILE__)\s*$'
+ let target = matchstr(getline('.'),'\(["'']\)\.\.\zs/.\{-\}\ze\1')
+ let cfile = expand('%:p:h') . target
+ let cfile .= cfile !~# '\.rb$' ? '.rb' : ''
+ elseif getline('.') =~# '^\s*\%(require \|load \|autoload :\w\+,\)\s*\(["'']\).*\1\s*$'
+ let cfile = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+ let cfile .= cfile !~# '\.rb$' ? '.rb' : ''
+ elseif pre.post =~# '\<File.expand_path[( ].*[''"]\{2\}, *__FILE__\>' && cfile =~# '^\.\.'
+ let cfile = expand('%:p:h') . strpart(cfile, 2)
+ else
+ return substitute(cfile, '\C\v^(.*):(\d+)%(:in)=$', '+\2 \1', '')
+ endif
+ let cwdpat = '^\M' . substitute(getcwd(), '[\/]', '\\[\\/]', 'g').'\ze\[\/]'
+ let cfile = substitute(cfile, cwdpat, '.', '')
+ if fnameescape(cfile) !=# cfile
+ return '+ '.fnameescape(cfile)
+ else
+ return cfile
+ endif
+endfunction
+
+"
+" Instructions for enabling "matchit" support:
+"
+" 1. Look for the latest "matchit" plugin at
+"
+" http://www.vim.org/scripts/script.php?script_id=39
+"
+" It is also packaged with Vim, in the $VIMRUNTIME/macros directory.
+"
+" 2. Copy "matchit.txt" into a "doc" directory (e.g. $HOME/.vim/doc).
+"
+" 3. Copy "matchit.vim" into a "plugin" directory (e.g. $HOME/.vim/plugin).
+"
+" 4. Ensure this file (ftplugin/ruby.vim) is installed.
+"
+" 5. Ensure you have this line in your $HOME/.vimrc:
+" filetype plugin on
+"
+" 6. Restart Vim and create the matchit documentation:
+"
+" :helptags ~/.vim/doc
+"
+" Now you can do ":help matchit", and you should be able to use "%" on Ruby
+" keywords. Try ":echo b:match_words" to be sure.
+"
+" Thanks to Mark J. Reed for the instructions. See ":help vimrc" for the
+" locations of plugin directories, etc., as there are several options, and it
+" differs on Windows. Email gsinclair@soyabean.com.au if you need help.
+"
+
+" vim: nowrap sw=2 sts=2 ts=8:
diff --git a/runtime/ftplugin/rust.vim b/runtime/ftplugin/rust.vim
new file mode 100644
index 0000000..7efca59
--- /dev/null
+++ b/runtime/ftplugin/rust.vim
@@ -0,0 +1,197 @@
+" Language: Rust
+" Description: Vim ftplugin for Rust
+" Maintainer: Chris Morgan <me@chrismorgan.info>
+" Maintainer: Kevin Ballard <kevin@sb.org>
+" Last Change: June 08, 2016
+" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+augroup rust.vim
+autocmd!
+
+" Variables {{{1
+
+" The rust source code at present seems to typically omit a leader on /*!
+" comments, so we'll use that as our default, but make it easy to switch.
+" This does not affect indentation at all (I tested it with and without
+" leader), merely whether a leader is inserted by default or not.
+if exists("g:rust_bang_comment_leader") && g:rust_bang_comment_leader != 0
+ " Why is the `,s0:/*,mb:\ ,ex:*/` there, you ask? I don't understand why,
+ " but without it, */ gets indented one space even if there were no
+ " leaders. I'm fairly sure that's a Vim bug.
+ setlocal comments=s1:/*,mb:*,ex:*/,s0:/*,mb:\ ,ex:*/,:///,://!,://
+else
+ setlocal comments=s0:/*!,m:\ ,ex:*/,s1:/*,mb:*,ex:*/,:///,://!,://
+endif
+setlocal commentstring=//%s
+setlocal formatoptions-=t formatoptions+=croqnl
+" j was only added in 7.3.541, so stop complaints about its nonexistence
+silent! setlocal formatoptions+=j
+
+" smartindent will be overridden by indentexpr if filetype indent is on, but
+" otherwise it's better than nothing.
+setlocal smartindent nocindent
+
+if !exists("g:rust_recommended_style") || g:rust_recommended_style != 0
+ setlocal tabstop=4 shiftwidth=4 softtabstop=4 expandtab
+ setlocal textwidth=99
+endif
+
+" This includeexpr isn't perfect, but it's a good start
+setlocal includeexpr=substitute(v:fname,'::','/','g')
+
+setlocal suffixesadd=.rs
+
+if exists("g:ftplugin_rust_source_path")
+ let &l:path=g:ftplugin_rust_source_path . ',' . &l:path
+endif
+
+if exists("g:loaded_delimitMate")
+ if exists("b:delimitMate_excluded_regions")
+ let b:rust_original_delimitMate_excluded_regions = b:delimitMate_excluded_regions
+ endif
+
+ let s:delimitMate_extra_excluded_regions = ',rustLifetimeCandidate,rustGenericLifetimeCandidate'
+
+ " For this buffer, when delimitMate issues the `User delimitMate_map`
+ " event in the autocommand system, add the above-defined extra excluded
+ " regions to delimitMate's state, if they have not already been added.
+ autocmd User <buffer>
+ \ if expand('<afile>') ==# 'delimitMate_map' && match(
+ \ delimitMate#Get("excluded_regions"),
+ \ s:delimitMate_extra_excluded_regions) == -1
+ \| let b:delimitMate_excluded_regions =
+ \ delimitMate#Get("excluded_regions")
+ \ . s:delimitMate_extra_excluded_regions
+ \|endif
+
+ " For this buffer, when delimitMate issues the `User delimitMate_unmap`
+ " event in the autocommand system, delete the above-defined extra excluded
+ " regions from delimitMate's state (the deletion being idempotent and
+ " having no effect if the extra excluded regions are not present in the
+ " targeted part of delimitMate's state).
+ autocmd User <buffer>
+ \ if expand('<afile>') ==# 'delimitMate_unmap'
+ \| let b:delimitMate_excluded_regions = substitute(
+ \ delimitMate#Get("excluded_regions"),
+ \ '\C\V' . s:delimitMate_extra_excluded_regions,
+ \ '', 'g')
+ \|endif
+endif
+
+if has("folding") && exists('g:rust_fold') && g:rust_fold != 0
+ let b:rust_set_foldmethod=1
+ setlocal foldmethod=syntax
+ if g:rust_fold == 2
+ setlocal foldlevel<
+ else
+ setlocal foldlevel=99
+ endif
+endif
+
+if has('conceal') && exists('g:rust_conceal') && g:rust_conceal != 0
+ let b:rust_set_conceallevel=1
+ setlocal conceallevel=2
+endif
+
+" Motion Commands {{{1
+
+" Bind motion commands to support hanging indents
+nnoremap <silent> <buffer> [[ :call rust#Jump('n', 'Back')<CR>
+nnoremap <silent> <buffer> ]] :call rust#Jump('n', 'Forward')<CR>
+xnoremap <silent> <buffer> [[ :call rust#Jump('v', 'Back')<CR>
+xnoremap <silent> <buffer> ]] :call rust#Jump('v', 'Forward')<CR>
+onoremap <silent> <buffer> [[ :call rust#Jump('o', 'Back')<CR>
+onoremap <silent> <buffer> ]] :call rust#Jump('o', 'Forward')<CR>
+
+" Commands {{{1
+
+" See |:RustRun| for docs
+command! -nargs=* -complete=file -bang -buffer RustRun call rust#Run(<bang>0, <q-args>)
+
+" See |:RustExpand| for docs
+command! -nargs=* -complete=customlist,rust#CompleteExpand -bang -buffer RustExpand call rust#Expand(<bang>0, <q-args>)
+
+" See |:RustEmitIr| for docs
+command! -nargs=* -buffer RustEmitIr call rust#Emit("llvm-ir", <q-args>)
+
+" See |:RustEmitAsm| for docs
+command! -nargs=* -buffer RustEmitAsm call rust#Emit("asm", <q-args>)
+
+" See |:RustPlay| for docs
+command! -range=% RustPlay :call rust#Play(<count>, <line1>, <line2>, <f-args>)
+
+" See |:RustFmt| for docs
+command! -buffer RustFmt call rustfmt#Format()
+
+" See |:RustFmtRange| for docs
+command! -range -buffer RustFmtRange call rustfmt#FormatRange(<line1>, <line2>)
+
+" Mappings {{{1
+
+" Bind ⌘R in MacVim to :RustRun
+nnoremap <silent> <buffer> <D-r> :RustRun<CR>
+" Bind ⌘⇧R in MacVim to :RustRun! pre-filled with the last args
+nnoremap <buffer> <D-R> :RustRun! <C-r>=join(b:rust_last_rustc_args)<CR><C-\>erust#AppendCmdLine(' -- ' . join(b:rust_last_args))<CR>
+
+if !exists("b:rust_last_rustc_args") || !exists("b:rust_last_args")
+ let b:rust_last_rustc_args = []
+ let b:rust_last_args = []
+endif
+
+" Cleanup {{{1
+
+let b:undo_ftplugin = "
+ \ setlocal formatoptions< comments< commentstring< includeexpr< suffixesadd<
+ \|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth<
+ \|if exists('b:rust_original_delimitMate_excluded_regions')
+ \|let b:delimitMate_excluded_regions = b:rust_original_delimitMate_excluded_regions
+ \|unlet b:rust_original_delimitMate_excluded_regions
+ \|else
+ \|unlet! b:delimitMate_excluded_regions
+ \|endif
+ \|if exists('b:rust_set_foldmethod')
+ \|setlocal foldmethod< foldlevel<
+ \|unlet b:rust_set_foldmethod
+ \|endif
+ \|if exists('b:rust_set_conceallevel')
+ \|setlocal conceallevel<
+ \|unlet b:rust_set_conceallevel
+ \|endif
+ \|unlet! b:rust_last_rustc_args b:rust_last_args
+ \|delcommand RustRun
+ \|delcommand RustExpand
+ \|delcommand RustEmitIr
+ \|delcommand RustEmitAsm
+ \|delcommand RustPlay
+ \|nunmap <buffer> <D-r>
+ \|nunmap <buffer> <D-R>
+ \|nunmap <buffer> [[
+ \|nunmap <buffer> ]]
+ \|xunmap <buffer> [[
+ \|xunmap <buffer> ]]
+ \|ounmap <buffer> [[
+ \|ounmap <buffer> ]]
+ \|set matchpairs-=<:>
+ \"
+
+" }}}1
+
+" Code formatting on save
+if get(g:, "rustfmt_autosave", 0)
+ autocmd BufWritePre *.rs silent! call rustfmt#Format()
+endif
+
+augroup END
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set noet sw=8 ts=8:
diff --git a/runtime/ftplugin/sass.vim b/runtime/ftplugin/sass.vim
new file mode 100644
index 0000000..9ce4461
--- /dev/null
+++ b/runtime/ftplugin/sass.vim
@@ -0,0 +1,37 @@
+" Vim filetype plugin
+" Language: Sass
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2019 Dec 05
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl com< cms< def< inc< inex< ofu< sua<"
+
+setlocal comments=://
+setlocal commentstring=//\ %s
+setlocal includeexpr=SassIncludeExpr(v:fname)
+setlocal omnifunc=csscomplete#CompleteCSS
+setlocal suffixesadd=.sass,.scss,.css
+if &filetype =~# '\<s[ac]ss]\>'
+ setlocal iskeyword+=-
+ setlocal iskeyword+=$
+ setlocal iskeyword+=%
+ let b:undo_ftplugin .= ' isk<'
+endif
+
+let &l:define = '^\C\v\s*%(\@function|\@mixin|\=)|^\s*%(\$[[:alnum:]-]+:|[%.][:alnum:]-]+\s*%(\{|$))@='
+let &l:include = '^\s*@import\s\+\%(url(\)\=["'']\='
+
+function! SassIncludeExpr(file) abort
+ let partial = substitute(a:file, '\%(.*/\|^\)\zs', '_', '')
+ if !empty(findfile(partial))
+ return partial
+ endif
+ return a:file
+endfunction
+
+" vim:set sw=2:
diff --git a/runtime/ftplugin/sbt.vim b/runtime/ftplugin/sbt.vim
new file mode 100644
index 0000000..309d30e
--- /dev/null
+++ b/runtime/ftplugin/sbt.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin file
+" Language: sbt
+" Maintainer: Steven Dobay <stevendobay at protonmail.com>
+" License: Same as Vim
+" Last Change: 2017.04.30
+" ----------------------------------------------------------------------------
+
+if exists('b:did_ftplugin') || &cp
+ finish
+endif
+
+let b:did_ftplugin = 1
+
+runtime! ftplugin/scala.vim
+
diff --git a/runtime/ftplugin/scala.vim b/runtime/ftplugin/scala.vim
new file mode 100644
index 0000000..18e16f1
--- /dev/null
+++ b/runtime/ftplugin/scala.vim
@@ -0,0 +1,35 @@
+" Vim filetype plugin file
+" Language: Scala
+" Maintainer: Derek Wyatt
+" URL: https://github.com/derekwyatt/vim-scala
+" License: Same as Vim
+" Last Change: 02 August 2016
+" ----------------------------------------------------------------------------
+
+if exists('b:did_ftplugin') || &cp
+ finish
+endif
+let b:did_ftplugin = 1
+
+" j is fairly new in Vim, so don't complain if it's not there
+setlocal formatoptions-=t formatoptions+=croqnl
+silent! setlocal formatoptions+=j
+
+" Just like c.vim, but additionally doesn't wrap text onto /** line when
+" formatting. Doesn't bungle bulleted lists when formatting.
+if get(g:, 'scala_scaladoc_indent', 0)
+ setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s2:/**,mb:*,ex:*/,s1:/*,mb:*,ex:*/,://
+else
+ setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/**,mb:*,ex:*/,s1:/*,mb:*,ex:*/,://
+endif
+setlocal commentstring=//\ %s
+
+setlocal shiftwidth=2 softtabstop=2 expandtab
+
+setlocal include='^\s*import'
+setlocal includeexpr='substitute(v:fname,"\\.","/","g")'
+
+setlocal path+=src/main/scala,src/test/scala
+setlocal suffixesadd=.scala
+
+" vim:set sw=2 sts=2 ts=8 et:
diff --git a/runtime/ftplugin/scheme.vim b/runtime/ftplugin/scheme.vim
new file mode 100644
index 0000000..5778594
--- /dev/null
+++ b/runtime/ftplugin/scheme.vim
@@ -0,0 +1,57 @@
+" Vim filetype plugin file
+" Language: Scheme (R7RS)
+" Last Change: 2019 Nov 18
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
+" Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
+" URL: https://foldling.org/vim/ftplugin/scheme.vim
+
+if exists('b:did_ftplugin')
+ finish
+endif
+
+let s:cpo = &cpo
+set cpo&vim
+
+setl lisp
+setl comments=:;;;;,:;;;,:;;,:;,sr:#\|,mb:\|,ex:\|#
+setl commentstring=;%s
+setl define=^\\s*(def\\k*
+setl iskeyword=33,35-39,42-43,45-58,60-90,94,95,97-122,126
+
+let b:undo_ftplugin = 'setl lisp< comments< commentstring< define< iskeyword<'
+
+setl lispwords+=case
+setl lispwords+=define
+setl lispwords+=define-record-type
+setl lispwords+=define-syntax
+setl lispwords+=define-values
+setl lispwords+=do
+setl lispwords+=guard
+setl lispwords+=lambda
+setl lispwords+=let
+setl lispwords+=let*
+setl lispwords+=let*-values
+setl lispwords+=let-syntax
+setl lispwords+=let-values
+setl lispwords+=letrec
+setl lispwords+=letrec*
+setl lispwords+=letrec-syntax
+setl lispwords+=parameterize
+setl lispwords+=set!
+setl lispwords+=syntax-rules
+setl lispwords+=unless
+setl lispwords+=when
+
+let b:undo_ftplugin = b:undo_ftplugin . ' lispwords<'
+
+let b:did_scheme_ftplugin = 1
+
+if exists('b:is_chicken') || exists('g:is_chicken')
+ exe 'ru! ftplugin/chicken.vim'
+endif
+
+unlet b:did_scheme_ftplugin
+let b:did_ftplugin = 1
+let &cpo = s:cpo
+unlet s:cpo
diff --git a/runtime/ftplugin/screen.vim b/runtime/ftplugin/screen.vim
new file mode 100644
index 0000000..c22089b
--- /dev/null
+++ b/runtime/ftplugin/screen.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: screen(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/scss.vim b/runtime/ftplugin/scss.vim
new file mode 100644
index 0000000..287d298
--- /dev/null
+++ b/runtime/ftplugin/scss.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: SCSS
+" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2016 Aug 29
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+runtime! ftplugin/sass.vim
+setlocal comments=s1:/*,mb:*,ex:*/,://
+
+" vim:set sw=2:
diff --git a/runtime/ftplugin/sensors.vim b/runtime/ftplugin/sensors.vim
new file mode 100644
index 0000000..c02a729
--- /dev/null
+++ b/runtime/ftplugin/sensors.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: sensors.conf(5) - libsensors configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/services.vim b/runtime/ftplugin/services.vim
new file mode 100644
index 0000000..dda08ac
--- /dev/null
+++ b/runtime/ftplugin/services.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: services(5) - Internet network services list
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/setserial.vim b/runtime/ftplugin/setserial.vim
new file mode 100644
index 0000000..e5823f4
--- /dev/null
+++ b/runtime/ftplugin/setserial.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: setserial(8) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/sexplib.vim b/runtime/ftplugin/sexplib.vim
new file mode 100644
index 0000000..27e1b28
--- /dev/null
+++ b/runtime/ftplugin/sexplib.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin file
+" Language: Sexplib
+" Maintainer: Markus Mottl <markus.mottl@gmail.com>
+" URL: https://github.com/ocaml/vim-ocaml
+" Last Change:
+" 2017 Apr 12 - First version (MM)
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin=1
+
+" Comment string
+setl commentstring=;\ %s
+setl comments=:;
diff --git a/runtime/ftplugin/sgml.vim b/runtime/ftplugin/sgml.vim
new file mode 100644
index 0000000..bf63efb
--- /dev/null
+++ b/runtime/ftplugin/sgml.vim
@@ -0,0 +1,40 @@
+" Vim filetype plugin file
+" Language: sgml
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show xml-related files.
+if has("gui_win32")
+ let b:browsefilter="SGML Files (*.sgml,*.sgm)\t*.sgm*\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/sh.vim b/runtime/ftplugin/sh.vim
new file mode 100644
index 0000000..593fcec
--- /dev/null
+++ b/runtime/ftplugin/sh.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin file
+" Language: sh
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=#%s
+
+" Shell: thanks to Johannes Zellner
+if exists("loaded_matchit")
+ let s:sol = '\%(;\s*\|^\s*\)\@<=' " start of line
+ let b:match_words =
+ \ s:sol.'if\>:' . s:sol.'elif\>:' . s:sol.'else\>:' . s:sol. 'fi\>,' .
+ \ s:sol.'\%(for\|while\)\>:' . s:sol. 'done\>,' .
+ \ s:sol.'case\>:' . s:sol. 'esac\>'
+endif
+
+" Change the :browse e filter to primarily show shell-related files.
+if has("gui_win32")
+ let b:browsefilter="Bourne Shell Scripts (*.sh)\t*.sh\n" .
+ \ "Korn Shell Scripts (*.ksh)\t*.ksh\n" .
+ \ "Bash Shell Scripts (*.bash)\t*.bash\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal cms< | unlet! b:browsefilter b:match_words"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/sieve.vim b/runtime/ftplugin/sieve.vim
new file mode 100644
index 0000000..3092b5d
--- /dev/null
+++ b/runtime/ftplugin/sieve.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: Sieve filtering language input file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=s1:/*,mb:*,ex:*/,:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/slpconf.vim b/runtime/ftplugin/slpconf.vim
new file mode 100644
index 0000000..a975a49
--- /dev/null
+++ b/runtime/ftplugin/slpconf.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: RFC 2614 - An API for Service Location configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:#,:; commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/slpreg.vim b/runtime/ftplugin/slpreg.vim
new file mode 100644
index 0000000..74c7285
--- /dev/null
+++ b/runtime/ftplugin/slpreg.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: RFC 2614 - An API for Service Location registration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:#,:; commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/slpspi.vim b/runtime/ftplugin/slpspi.vim
new file mode 100644
index 0000000..633555e
--- /dev/null
+++ b/runtime/ftplugin/slpspi.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: RFC 2614 - An API for Service Location SPI file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:#,:; commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/spec.vim b/runtime/ftplugin/spec.vim
new file mode 100644
index 0000000..ce00021
--- /dev/null
+++ b/runtime/ftplugin/spec.vim
@@ -0,0 +1,208 @@
+" Plugin to update the %changelog section of RPM spec files
+" Filename: spec.vim
+" Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com
+" Former Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com> (until March 2014)
+" Last Change: Mon Jun 01 21:15 MSK 2015 Igor Gnatenko
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !exists("no_plugin_maps") && !exists("no_spec_maps")
+ if !hasmapto("<Plug>SpecChangelog")
+ map <buffer> <LocalLeader>c <Plug>SpecChangelog
+ endif
+endif
+
+if !hasmapto("call <SID>SpecChangelog(\"\")<CR>")
+ noremap <buffer> <unique> <script> <Plug>SpecChangelog :call <SID>SpecChangelog("")<CR>
+endif
+
+if !exists("*s:GetRelVer")
+ function! s:GetRelVer()
+ if has('python')
+python << PYEND
+import sys, datetime, shutil, tempfile
+import vim
+
+try:
+ import rpm
+except ImportError:
+ pass
+else:
+ specfile = vim.current.buffer.name
+ if specfile:
+ rpm.delMacro("dist")
+ spec = rpm.spec(specfile)
+ headers = spec.sourceHeader
+ version = headers["Version"]
+ release = headers["Release"]
+ vim.command("let ver = " + version)
+ vim.command("let rel = " + release)
+PYEND
+ endif
+ endfunction
+endif
+
+if !exists("*s:SpecChangelog")
+ function s:SpecChangelog(format)
+ if strlen(a:format) == 0
+ if !exists("g:spec_chglog_format")
+ let email = input("Name <email address>: ")
+ let g:spec_chglog_format = "%a %b %d %Y " . l:email
+ echo "\r"
+ endif
+ let format = g:spec_chglog_format
+ else
+ if !exists("g:spec_chglog_format")
+ let g:spec_chglog_format = a:format
+ endif
+ let format = a:format
+ endif
+ let line = 0
+ let name = ""
+ let ver = ""
+ let rel = ""
+ let nameline = -1
+ let verline = -1
+ let relline = -1
+ let chgline = -1
+ while (line <= line("$"))
+ let linestr = getline(line)
+ if name == "" && linestr =~? '^Name:'
+ let nameline = line
+ let name = substitute(strpart(linestr,5), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ elseif ver == "" && linestr =~? '^Version:'
+ let verline = line
+ let ver = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ elseif rel == "" && linestr =~? '^Release:'
+ let relline = line
+ let rel = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ elseif linestr =~? '^%changelog'
+ let chgline = line
+ execute line
+ break
+ endif
+ let line = line+1
+ endwhile
+ if nameline != -1 && verline != -1 && relline != -1
+ let include_release_info = exists("g:spec_chglog_release_info")
+ let name = s:ParseRpmVars(name, nameline)
+ let ver = s:ParseRpmVars(ver, verline)
+ let rel = s:ParseRpmVars(rel, relline)
+ else
+ let include_release_info = 0
+ endif
+
+ call s:GetRelVer()
+
+ if chgline == -1
+ let option = confirm("Can't find %changelog. Create one? ","&End of file\n&Here\n&Cancel",3)
+ if option == 1
+ call append(line("$"),"")
+ call append(line("$"),"%changelog")
+ execute line("$")
+ let chgline = line(".")
+ elseif option == 2
+ call append(line("."),"%changelog")
+ normal j
+ let chgline = line(".")
+ endif
+ endif
+ if chgline != -1
+ let tmptime = v:lc_time
+ language time C
+ let parsed_format = "* ".strftime(format)." - ".ver."-".rel
+ execute "language time" tmptime
+ let release_info = "+ ".name."-".ver."-".rel
+ let wrong_format = 0
+ let wrong_release = 0
+ let insert_line = 0
+ if getline(chgline+1) != parsed_format
+ let wrong_format = 1
+ endif
+ if include_release_info && getline(chgline+2) != release_info
+ let wrong_release = 1
+ endif
+ if wrong_format || wrong_release
+ if include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release")
+ let option = confirm("Increase release? ","&Yes\n&No",1)
+ if option == 1
+ execute relline
+ normal 
+ let rel = substitute(strpart(getline(relline),8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ let release_info = "+ ".name."-".ver."-".rel
+ endif
+ endif
+ let n = 0
+ call append(chgline+n, parsed_format)
+ if include_release_info
+ let n = n + 1
+ call append(chgline+n, release_info)
+ endif
+ let n = n + 1
+ call append(chgline+n,"- ")
+ let n = n + 1
+ call append(chgline+n,"")
+ let insert_line = chgline+n
+ else
+ let line = chgline
+ if !exists("g:spec_chglog_prepend")
+ while !(getline(line+2) =~ '^\( *\|\*.*\)$')
+ let line = line+1
+ endwhile
+ endif
+ call append(line+1,"- ")
+ let insert_line = line+2
+ endif
+ execute insert_line
+ startinsert!
+ endif
+ endfunction
+endif
+
+if !exists("*s:ParseRpmVars")
+ function s:ParseRpmVars(str, strline)
+ let end = -1
+ let ret = ""
+ while (1)
+ let start = match(a:str, "\%{", end+1)
+ if start == -1
+ let ret = ret . strpart(a:str, end+1)
+ break
+ endif
+ let ret = ret . strpart(a:str, end+1, start-(end+1))
+ let end = match(a:str, "}", start)
+ if end == -1
+ let ret = ret . strpart(a:str, start)
+ break
+ endif
+ let varname = strpart(a:str, start+2, end-(start+2))
+ execute a:strline
+ let definestr = "^[ \t]*%\\(define\\|global\\)[ \t]\\+".varname."[ \t]\\+\\(.*\\)$"
+ let linenum = search(definestr, "bW")
+ if linenum != 0
+ let ret = ret . substitute(getline(linenum), definestr, "\\2", "")
+ endif
+ endwhile
+ return ret
+ endfunction
+endif
+
+" The following lines, along with the macros/matchit.vim plugin,
+" make it easy to navigate the different sections of a spec file
+" with the % key (thanks to Max Ischenko).
+
+let b:match_ignorecase = 0
+let b:match_words =
+ \ '^Name:^%description:^%clean:^%(?:auto)?setup:^%build:^%install:^%files:' .
+ \ '^%package:^%preun:^%postun:^%changelog'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+let b:undo_ftplugin = "unlet! b:match_ignorecase b:match_words"
diff --git a/runtime/ftplugin/sql.vim b/runtime/ftplugin/sql.vim
new file mode 100644
index 0000000..1c02a98
--- /dev/null
+++ b/runtime/ftplugin/sql.vim
@@ -0,0 +1,548 @@
+" SQL filetype plugin file
+" Language: SQL (Common for Oracle, Microsoft SQL Server, Sybase)
+" Version: 12.0
+" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2017 Mar 07
+" Download: http://vim.sourceforge.net/script.php?script_id=454
+
+" For more details please use:
+" :h sql.txt
+"
+" This file should only contain values that are common to all SQL languages
+" Oracle, Microsoft SQL Server, Sybase ASA/ASE, MySQL, and so on
+" If additional features are required create:
+" vimfiles/after/ftplugin/sql.vim (Windows)
+" .vim/after/ftplugin/sql.vim (Unix)
+" to override and add any of your own settings.
+
+
+" This file also creates a command, SQLSetType, which allows you to change
+" SQL dialects on the fly. For example, if I open an Oracle SQL file, it
+" is color highlighted appropriately. If I open an Informix SQL file, it
+" will still be highlighted according to Oracles settings. By running:
+" :SQLSetType sqlinformix
+"
+" All files called sqlinformix.vim will be loaded from the indent and syntax
+" directories. This allows you to easily flip SQL dialects on a per file
+" basis. NOTE: you can also use completion:
+" :SQLSetType <tab>
+"
+" To change the default dialect, add the following to your vimrc:
+" let g:sql_type_default = 'sqlanywhere'
+"
+" This file also creates a command, SQLGetType, which allows you to
+" determine what the current dialect is in use.
+" :SQLGetType
+"
+" History
+"
+" Version 12.0 (April 2013)
+"
+" NF: Added support for "BEGIN TRY ... END TRY ... BEGIN CATCH ... END CATCH
+" BF: This plugin is designed to be used with other plugins to enable the
+" SQL completion with Perl, Python, Java, ... The loading mechanism
+" was not checking if the SQL objects were created, which can lead to
+" the plugin not loading the SQL support.
+"
+" Version 11.0 (May 2013)
+"
+" NF: Updated to use SyntaxComplete's new regex support for syntax groups.
+"
+" Version 10.0 (Dec 2012)
+"
+" NF: Changed all maps to use noremap instead of must map
+" NF: Changed all visual maps to use xnoremap instead of vnoremap as they
+" should only be used in visual mode and not select mode.
+" BF: Most of the maps were using doubled up backslashes before they were
+" changed to using the search() function, which meant they no longer
+" worked.
+"
+" Version 9.0
+"
+" NF: Completes 'b:undo_ftplugin'
+" BF: Correctly set cpoptions when creating script
+"
+" Version 8.0
+"
+" NF: Improved the matchit plugin regex (Talek)
+"
+" Version 7.0
+"
+" NF: Calls the sqlcomplete#ResetCacheSyntax() function when calling
+" SQLSetType.
+"
+" Version 6.0
+"
+" NF: Adds the command SQLGetType
+"
+" Version 5.0
+"
+" NF: Adds the ability to choose the keys to control SQL completion, just add
+" the following to your .vimrc:
+" let g:ftplugin_sql_omni_key = '<C-C>'
+" let g:ftplugin_sql_omni_key_right = '<Right>'
+" let g:ftplugin_sql_omni_key_left = '<Left>'
+"
+" BF: format-options - Auto-wrap comments using textwidth was turned off
+" by mistake.
+
+
+" Only do this when not done yet for this buffer
+" This ftplugin can be used with other ftplugins. So ensure loading
+" happens if all elements of this plugin have not yet loaded.
+if exists("b:did_ftplugin") && exists("b:current_ftplugin") && b:current_ftplugin == 'sql'
+ finish
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" Disable autowrapping for code, but enable for comments
+" t Auto-wrap text using textwidth
+" c Auto-wrap comments using textwidth, inserting the current comment
+" leader automatically.
+setlocal formatoptions-=t
+setlocal formatoptions+=c
+
+" Functions/Commands to allow the user to change SQL syntax dialects
+" through the use of :SQLSetType <tab> for completion.
+" This works with both Vim 6 and 7.
+
+if !exists("*SQL_SetType")
+ " NOTE: You cannot use function! since this file can be
+ " sourced from within this function. That will result in
+ " an error reported by Vim.
+ function SQL_GetList(ArgLead, CmdLine, CursorPos)
+
+ if !exists('s:sql_list')
+ " Grab a list of files that contain "sql" in their names
+ let list_indent = globpath(&runtimepath, 'indent/*sql*')
+ let list_syntax = globpath(&runtimepath, 'syntax/*sql*')
+ let list_ftplugin = globpath(&runtimepath, 'ftplugin/*sql*')
+
+ let sqls = "\n".list_indent."\n".list_syntax."\n".list_ftplugin."\n"
+
+ " Strip out everything (path info) but the filename
+ " Regex
+ " From between two newline characters
+ " Non-greedily grab all characters
+ " Followed by a valid filename \w\+\.\w\+ (sql.vim)
+ " Followed by a newline, but do not include the newline
+ "
+ " Replace it with just the filename (get rid of PATH)
+ "
+ " Recursively, since there are many filenames that contain
+ " the word SQL in the indent, syntax and ftplugin directory
+ let sqls = substitute( sqls,
+ \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=',
+ \ '\1\n',
+ \ 'g'
+ \ )
+
+ " Remove duplicates, since sqlanywhere.vim can exist in the
+ " sytax, indent and ftplugin directory, yet we only want
+ " to display the option once
+ let index = match(sqls, '.\{-}\ze\n')
+ while index > -1
+ " Get the first filename
+ let file = matchstr(sqls, '.\{-}\ze\n', index)
+ " Recursively replace any *other* occurrence of that
+ " filename with nothing (ie remove it)
+ let sqls = substitute(sqls, '\%>'.(index+strlen(file)).'c\<'.file.'\>\n', '', 'g')
+ " Move on to the next filename
+ let index = match(sqls, '.\{-}\ze\n', (index+strlen(file)+1))
+ endwhile
+
+ " Sort the list if using version 7
+ if v:version >= 700
+ let mylist = split(sqls, "\n")
+ let mylist = sort(mylist)
+ let sqls = join(mylist, "\n")
+ endif
+
+ let s:sql_list = sqls
+ endif
+
+ return s:sql_list
+
+ endfunction
+
+ function SQL_SetType(name)
+
+ " User has decided to override default SQL scripts and
+ " specify a vendor specific version
+ " (ie Oracle, Informix, SQL Anywhere, ...)
+ " So check for an remove any settings that prevent the
+ " scripts from being executed, and then source the
+ " appropriate Vim scripts.
+ if exists("b:did_ftplugin")
+ unlet b:did_ftplugin
+ endif
+ if exists("b:current_syntax")
+ " echomsg 'SQLSetType - clearing syntax'
+ syntax clear
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ endif
+ if exists("b:did_indent")
+ " echomsg 'SQLSetType - clearing indent'
+ unlet b:did_indent
+ " Set these values to their defaults
+ setlocal indentkeys&
+ setlocal indentexpr&
+ endif
+
+ " Ensure the name is in the correct format
+ let new_sql_type = substitute(a:name,
+ \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '')
+
+ " Do not specify a buffer local variable if it is
+ " the default value
+ if new_sql_type == 'sql'
+ let new_sql_type = 'sqloracle'
+ endif
+ let b:sql_type_override = new_sql_type
+
+ " Remove any cached SQL since a new sytax will have different
+ " items and groups
+ if !exists('g:loaded_sql_completion') || g:loaded_sql_completion >= 100
+ call sqlcomplete#ResetCacheSyntax()
+ endif
+
+ " Vim will automatically source the correct files if we
+ " change the filetype. You cannot do this with setfiletype
+ " since that command will only execute if a filetype has
+ " not already been set. In this case we want to override
+ " the existing filetype.
+ let &filetype = 'sql'
+
+ if b:sql_compl_savefunc != ""
+ " We are changing the filetype to SQL from some other filetype
+ " which had OMNI completion defined. We need to activate the
+ " SQL completion plugin in order to cache some of the syntax items
+ " while the syntax rules for SQL are active.
+ call sqlcomplete#PreCacheSyntax()
+ endif
+ endfunction
+ command! -nargs=* -complete=custom,SQL_GetList SQLSetType :call SQL_SetType(<q-args>)
+
+endif
+
+" Functions/Commands to allow the user determine current SQL syntax dialect
+" This works with both Vim 6 and 7.
+
+if !exists("*SQL_GetType")
+ function SQL_GetType()
+ if exists('b:sql_type_override')
+ echomsg "Current SQL dialect in use:".b:sql_type_override
+ else
+ echomsg "Current SQL dialect in use:".g:sql_type_default
+ endif
+ endfunction
+ command! -nargs=0 SQLGetType :call SQL_GetType()
+endif
+
+if exists("b:sql_type_override")
+ " echo 'sourcing buffer ftplugin/'.b:sql_type_override.'.vim'
+ if globpath(&runtimepath, 'ftplugin/'.b:sql_type_override.'.vim') != ''
+ exec 'runtime ftplugin/'.b:sql_type_override.'.vim'
+ " else
+ " echomsg 'ftplugin/'.b:sql_type_override.' not exist, using default'
+ endif
+elseif exists("g:sql_type_default")
+ " echo 'sourcing global ftplugin/'.g:sql_type_default.'.vim'
+ if globpath(&runtimepath, 'ftplugin/'.g:sql_type_default.'.vim') != ''
+ exec 'runtime ftplugin/'.g:sql_type_default.'.vim'
+ " else
+ " echomsg 'ftplugin/'.g:sql_type_default.'.vim not exist, using default'
+ endif
+endif
+
+" If the above runtime command succeeded, do not load the default settings
+" as they should have already been loaded from a previous run.
+if exists("b:did_ftplugin") && exists("b:current_ftplugin") && b:current_ftplugin == 'sql'
+ finish
+endif
+
+let b:undo_ftplugin = "setl comments< formatoptions< define< omnifunc<" .
+ \ " | unlet! b:browsefilter b:match_words"
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+let b:current_ftplugin = 'sql'
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "SQL Files (*.sql)\t*.sql\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Some standard expressions for use with the matchit strings
+let s:notend = '\%(\<end\s\+\)\@<!'
+let s:when_no_matched_or_others = '\%(\<when\>\%(\s\+\%(\%(\<not\>\s\+\)\?<matched\>\)\|\<others\>\)\@!\)'
+let s:or_replace = '\%(or\s\+replace\s\+\)\?'
+
+" Define patterns for the matchit macro
+if !exists("b:match_words")
+ " SQL is generally case insensitive
+ let b:match_ignorecase = 1
+
+ " Handle the following:
+ " if
+ " elseif | elsif
+ " else [if]
+ " end if
+ "
+ " [while condition] loop
+ " leave
+ " break
+ " continue
+ " exit
+ " end loop
+ "
+ " for
+ " leave
+ " break
+ " continue
+ " exit
+ " end loop
+ "
+ " do
+ " statements
+ " doend
+ "
+ " case
+ " when
+ " when
+ " default
+ " end case
+ "
+ " merge
+ " when not matched
+ " when matched
+ "
+ " EXCEPTION
+ " WHEN column_not_found THEN
+ " WHEN OTHERS THEN
+ "
+ " begin try
+ " end try
+ " begin catch
+ " end catch
+ "
+ " create[ or replace] procedure|function|event
+ " \ '^\s*\<\%(do\|for\|while\|loop\)\>.*:'.
+
+ " For ColdFusion support
+ setlocal matchpairs+=<:>
+ let b:match_words = &matchpairs .
+ \ ',\%(\<begin\)\%(\s\+\%(try\|catch\)\>\)\@!:\<end\>\W*$,'.
+ \
+ \ '\<begin\s\+try\>:'.
+ \ '\<end\s\+try\>:'.
+ \ '\<begin\s\+catch\>:'.
+ \ '\<end\s\+catch\>,'.
+ \
+ \ s:notend . '\<if\>:'.
+ \ '\<elsif\>\|\<elseif\>\|\<else\>:'.
+ \ '\<end\s\+if\>,'.
+ \
+ \ '\(^\s*\)\@<=\(\<\%(do\|for\|while\|loop\)\>.*\):'.
+ \ '\%(\<exit\>\|\<leave\>\|\<break\>\|\<continue\>\):'.
+ \ '\%(\<doend\>\|\%(\<end\s\+\%(for\|while\|loop\>\)\)\),'.
+ \
+ \ '\%('. s:notend . '\<case\>\):'.
+ \ '\%('.s:when_no_matched_or_others.'\):'.
+ \ '\%(\<when\s\+others\>\|\<end\s\+case\>\),' .
+ \
+ \ '\<merge\>:' .
+ \ '\<when\s\+not\s\+matched\>:' .
+ \ '\<when\s\+matched\>,' .
+ \
+ \ '\%(\<create\s\+' . s:or_replace . '\)\?'.
+ \ '\%(function\|procedure\|event\):'.
+ \ '\<returns\?\>'
+ " \ '\<begin\>\|\<returns\?\>:'.
+ " \ '\<end\>\(;\)\?\s*$'
+ " \ '\<exception\>:'.s:when_no_matched_or_others.
+ " \ ':\<when\s\+others\>,'.
+ "
+ " \ '\%(\<exception\>\|\%('. s:notend . '\<case\>\)\):'.
+ " \ '\%(\<default\>\|'.s:when_no_matched_or_others.'\):'.
+ " \ '\%(\%(\<when\s\+others\>\)\|\<end\s\+case\>\),' .
+endif
+
+" Define how to find the macro definition of a variable using the various
+" [d, [D, [_CTRL_D and so on features
+" Match these values ignoring case
+" ie DECLARE varname INTEGER
+let &l:define = '\c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>'
+
+
+" Mappings to move to the next BEGIN ... END block
+" \W - no characters or digits
+nnoremap <buffer> <silent> ]] :call search('\c^\s*begin\>', 'W' )<CR>
+nnoremap <buffer> <silent> [[ :call search('\c^\s*begin\>', 'bW' )<CR>
+nnoremap <buffer> <silent> ][ :call search('\c^\s*end\W*$', 'W' )<CR>
+nnoremap <buffer> <silent> [] :call search('\c^\s*end\W*$', 'bW' )<CR>
+xnoremap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'W' )<CR>
+xnoremap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'bW' )<CR>
+xnoremap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'W' )<CR>
+xnoremap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'bW' )<CR>
+
+
+" By default only look for CREATE statements, but allow
+" the user to override
+if !exists('g:ftplugin_sql_statements')
+ let g:ftplugin_sql_statements = 'create'
+endif
+
+" Predefined SQL objects what are used by the below mappings using
+" the ]} style maps.
+" This global variable allows the users to override its value
+" from within their vimrc.
+" Note, you cannot use \?, since these patterns can be used to search
+" backwards, you must use \{,1}
+if !exists('g:ftplugin_sql_objects')
+ let g:ftplugin_sql_objects = 'function,procedure,event,' .
+ \ '\(existing\\|global\s\+temporary\s\+\)\{,1}' .
+ \ 'table,trigger' .
+ \ ',schema,service,publication,database,datatype,domain' .
+ \ ',index,subscription,synchronization,view,variable'
+endif
+
+" Key to trigger SQL completion
+if !exists('g:ftplugin_sql_omni_key')
+ let g:ftplugin_sql_omni_key = '<C-C>'
+endif
+" Key to trigger drill into column list
+if !exists('g:ftplugin_sql_omni_key_right')
+ let g:ftplugin_sql_omni_key_right = '<Right>'
+endif
+" Key to trigger drill out of column list
+if !exists('g:ftplugin_sql_omni_key_left')
+ let g:ftplugin_sql_omni_key_left = '<Left>'
+endif
+
+" Replace all ,'s with bars, except ones with numbers after them.
+" This will most likely be a \{,1} string.
+let s:ftplugin_sql_objects =
+ \ '\c^\s*' .
+ \ '\(\(' .
+ \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\|', 'g') .
+ \ '\)\s\+\(or\s\+replace\s\+\)\{,1}\)\{,1}' .
+ \ '\<\(' .
+ \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\|', 'g') .
+ \ '\)\>'
+
+" Mappings to move to the next CREATE ... block
+exec "nnoremap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
+exec "nnoremap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
+" Could not figure out how to use a :call search() string in visual mode
+" without it ending visual mode
+" Unfortunately, this will add a entry to the search history
+exec 'xnoremap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
+exec 'xnoremap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
+
+" Mappings to move to the next COMMENT
+"
+" Had to double the \ for the \| separator since this has a special
+" meaning on maps
+let b:comment_leader = '\(--\\|\/\/\\|\*\\|\/\*\\|\*\/\)'
+" Find the start of the next comment
+let b:comment_start = '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+ \ '\(\s*'.b:comment_leader.'\)'
+" Find the end of the previous comment
+let b:comment_end = '\(^\s*'.b:comment_leader.'.*\n\)'.
+ \ '\(^\s*'.b:comment_leader.'\)\@!'
+" Skip over the comment
+let b:comment_jump_over = "call search('".
+ \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+ \ "', 'W')"
+let b:comment_skip_back = "call search('".
+ \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+ \ "', 'bW')"
+" Move to the start and end of comments
+exec 'nnoremap <silent><buffer> ]" :call search('."'".b:comment_start."'".', "W" )<CR>'
+exec 'nnoremap <silent><buffer> [" :call search('."'".b:comment_end."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
+
+" Comments can be of the form:
+" /*
+" *
+" */
+" or
+" --
+" or
+" //
+setlocal comments=s1:/*,mb:*,ex:*/,:--,://
+
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&omnifunc')
+ " Since the SQL completion plugin can be used in conjunction
+ " with other completion filetypes it must record the previous
+ " OMNI function prior to setting up the SQL OMNI function
+ let b:sql_compl_savefunc = &omnifunc
+
+ " Source it to determine its version
+ runtime autoload/sqlcomplete.vim
+ " This is used by the sqlcomplete.vim plugin
+ " Source it for its global functions
+ runtime autoload/syntaxcomplete.vim
+
+ setlocal omnifunc=sqlcomplete#Complete
+ " Prevent the intellisense plugin from loading
+ let b:sql_vis = 1
+ if !exists('g:omni_sql_no_default_maps')
+ let regex_extra = ''
+ if exists('g:loaded_syntax_completion') && exists('g:loaded_sql_completion')
+ if g:loaded_syntax_completion > 120 && g:loaded_sql_completion > 140
+ let regex_extra = '\\w*'
+ endif
+ endif
+ " Static maps which use populate the completion list
+ " using Vim's syntax highlighting rules
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword'.regex_extra.'")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction'.regex_extra.'")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption'.regex_extra.'")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType'.regex_extra.'")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement'.regex_extra.'")<CR><C-X><C-O>'
+ " Dynamic maps which use populate the completion list
+ " using the dbext.vim plugin
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+ " The next 3 maps are only to be used while the completion window is
+ " active due to the <CR> at the beginning of the map
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+ " <C-Right> is not recognized on most Unix systems, so only create
+ " these additional maps on the Windows platform.
+ " If you would like to use these maps, choose a different key and make
+ " the same map in your vimrc.
+ " if has('win32')
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_left.' <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
+ " endif
+ " Remove any cached items useful for schema changes
+ exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
+ endif
+
+ if b:sql_compl_savefunc != ""
+ " We are changing the filetype to SQL from some other filetype
+ " which had OMNI completion defined. We need to activate the
+ " SQL completion plugin in order to cache some of the syntax items
+ " while the syntax rules for SQL are active.
+ call sqlcomplete#ResetCacheSyntax()
+ call sqlcomplete#PreCacheSyntax()
+ endif
+endif
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim:sw=4:
diff --git a/runtime/ftplugin/sshconfig.vim b/runtime/ftplugin/sshconfig.vim
new file mode 100644
index 0000000..d933ce0
--- /dev/null
+++ b/runtime/ftplugin/sshconfig.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: OpenSSH client configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/sudoers.vim b/runtime/ftplugin/sudoers.vim
new file mode 100644
index 0000000..38dbf55
--- /dev/null
+++ b/runtime/ftplugin/sudoers.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: sudoers(5) configuration files
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/svg.vim b/runtime/ftplugin/svg.vim
new file mode 100644
index 0000000..8fff6ea
--- /dev/null
+++ b/runtime/ftplugin/svg.vim
@@ -0,0 +1,40 @@
+" Vim filetype plugin file
+" Language: svg
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show xml-related files.
+if has("gui_win32")
+ let b:browsefilter="SVG Files (*.svg)\t*.svg\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/swift.vim b/runtime/ftplugin/swift.vim
new file mode 100644
index 0000000..a86b782
--- /dev/null
+++ b/runtime/ftplugin/swift.vim
@@ -0,0 +1,23 @@
+" This source file is part of the Swift.org open source project
+"
+" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
+" Licensed under Apache License v2.0 with Runtime Library Exception
+"
+" See https://swift.org/LICENSE.txt for license information
+" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
+"
+" Vim maintainer: Emir SARI <bitigchi@me.com>
+" Last Change: 2021 Jan 08
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let b:did_ftplugin = 1
+let b:undo_ftplugin = "setlocal comments< expandtab< tabstop< shiftwidth< smartindent<"
+
+setlocal comments=s1:/*,mb:*,ex:*/,:///,://
+setlocal expandtab
+setlocal sw=4 sts=4
+setlocal smartindent
diff --git a/runtime/ftplugin/swiftgyb.vim b/runtime/ftplugin/swiftgyb.vim
new file mode 100644
index 0000000..8e8fc2b
--- /dev/null
+++ b/runtime/ftplugin/swiftgyb.vim
@@ -0,0 +1,11 @@
+" This source file is part of the Swift.org open source project
+"
+" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
+" Licensed under Apache License v2.0 with Runtime Library Exception
+"
+" See https://swift.org/LICENSE.txt for license information
+" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
+"
+" Vim maintainer: Emir SARI <bitigchi@me.com>
+
+runtime! ftplugin/swift.vim
diff --git a/runtime/ftplugin/sysctl.vim b/runtime/ftplugin/sysctl.vim
new file mode 100644
index 0000000..8d331ce
--- /dev/null
+++ b/runtime/ftplugin/sysctl.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: sysctl.conf(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:;,:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/systemd.vim b/runtime/ftplugin/systemd.vim
new file mode 100644
index 0000000..4c5c9a1
--- /dev/null
+++ b/runtime/ftplugin/systemd.vim
@@ -0,0 +1,41 @@
+" Vim filetype plugin file
+" Language: systemd.unit(5)
+" Keyword Lookup Support: Enno Nagel <enno.nagel+vim@gmail.com>
+
+if !exists('b:did_ftplugin')
+ " Looks a lot like dosini files.
+ runtime! ftplugin/dosini.vim
+endif
+
+if !has('unix')
+ finish
+endif
+
+if !has('gui_running')
+ command! -buffer -nargs=1 Sman silent exe '!' . KeywordLookup_systemd(<q-args>) | redraw!
+elseif has('terminal')
+ command! -buffer -nargs=1 Sman silent exe 'term ' . KeywordLookup_systemd(<q-args>)
+else
+ finish
+endif
+
+if !exists('*KeywordLookup_systemd')
+ function KeywordLookup_systemd(keyword) abort
+ let matches = matchlist(getline(search('\v^\s*\[\s*.+\s*\]\s*$', 'nbWz')), '\v^\s*\[\s*(\k+).*\]\s*$')
+ if len(matches) > 1
+ let section = matches[1]
+ return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd.' . section
+ else
+ return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd'
+ endif
+ endfunction
+endif
+
+setlocal iskeyword+=-
+setlocal keywordprg=:Sman
+
+if !exists('b:undo_ftplugin') || empty(b:undo_ftplugin)
+ let b:undo_ftplugin = 'setlocal keywordprg< iskeyword<'
+else
+ let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+endif
diff --git a/runtime/ftplugin/systemverilog.vim b/runtime/ftplugin/systemverilog.vim
new file mode 100644
index 0000000..4d0f565
--- /dev/null
+++ b/runtime/ftplugin/systemverilog.vim
@@ -0,0 +1,11 @@
+" Vim filetype plugin file
+" Language: SystemVerilog
+" Maintainer: kocha <kocha.lsifrontend@gmail.com>
+" Last Change: 12-Aug-2013.
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like Verilog
+runtime! ftplugin/verilog.vim
diff --git a/runtime/ftplugin/tcl.vim b/runtime/ftplugin/tcl.vim
new file mode 100644
index 0000000..1cc24d3
--- /dev/null
+++ b/runtime/ftplugin/tcl.vim
@@ -0,0 +1,37 @@
+" Vim filetype plugin file
+" Language: Tcl
+" Maintainer: Robert L Hicks <sigzero@gmail.com>
+" Latest Revision: 2009-05-01
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:cpo_save = &cpo
+set cpo-=C
+
+setlocal comments=:#
+setlocal commentstring=#%s
+setlocal formatoptions+=croql
+
+" Change the browse dialog on Windows to show mainly Tcl-related files
+if has("gui_win32")
+ let b:browsefilter = "Tcl Source Files (.tcl)\t*.tcl\n" .
+ \ "Tcl Test Files (.test)\t*.test\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+"-----------------------------------------------------------------------------
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp<" .
+ \ " | unlet! b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set et ts=4 sw=4 tw=78:
diff --git a/runtime/ftplugin/tcsh.vim b/runtime/ftplugin/tcsh.vim
new file mode 100644
index 0000000..7e2d959
--- /dev/null
+++ b/runtime/ftplugin/tcsh.vim
@@ -0,0 +1,40 @@
+" Vim filetype plugin file
+" Language: tcsh
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "csh Files (*.csh)\t*.csh\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/csh.vim ftplugin/csh_*.vim ftplugin/csh/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show tcsh-related files.
+if has("gui_win32")
+ let b:browsefilter="tcsh Scripts (*.tcsh)\t*.tcsh\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/terminfo.vim b/runtime/ftplugin/terminfo.vim
new file mode 100644
index 0000000..0ffcc58
--- /dev/null
+++ b/runtime/ftplugin/terminfo.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: terminfo(5) definition
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/tex.vim b/runtime/ftplugin/tex.vim
new file mode 100644
index 0000000..1147001
--- /dev/null
+++ b/runtime/ftplugin/tex.vim
@@ -0,0 +1,46 @@
+" LaTeX filetype plugin
+" Language: LaTeX (ft=tex)
+" Maintainer: Benji Fisher, Ph.D. <benji@member.AMS.org>
+" Version: 1.4
+" Last Change: Wed 19 Apr 2006
+" URL: http://www.vim.org/script.php?script_id=411
+
+" Only do this when not done yet for this buffer.
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Start with plain TeX. This will also define b:did_ftplugin .
+source $VIMRUNTIME/ftplugin/plaintex.vim
+
+" Avoid problems if running in 'compatible' mode.
+let s:save_cpo = &cpo
+set cpo&vim
+
+let b:undo_ftplugin .= "| setl inex<"
+
+" Allow "[d" to be used to find a macro definition:
+" Recognize plain TeX \def as well as LaTeX \newcommand and \renewcommand .
+" I may as well add the AMS-LaTeX DeclareMathOperator as well.
+let &l:define .= '\|\\\(re\)\=new\(boolean\|command\|counter\|environment\|font'
+ \ . '\|if\|length\|savebox\|theorem\(style\)\=\)\s*\*\=\s*{\='
+ \ . '\|DeclareMathOperator\s*{\=\s*'
+
+" Tell Vim how to recognize LaTeX \include{foo} and plain \input bar :
+let &l:include .= '\|\\include{'
+" On some file systems, "{" and "}" are inluded in 'isfname'. In case the
+" TeX file has \include{fname} (LaTeX only), strip everything except "fname".
+let &l:includeexpr = "substitute(v:fname, '^.\\{-}{\\|}.*', '', 'g')"
+
+" The following lines enable the macros/matchit.vim plugin for
+" extended matching with the % key.
+" ftplugin/plaintex.vim already defines b:match_skip and b:match_ignorecase
+" and matches \(, \), \[, \], \{, and \} .
+if exists("loaded_matchit")
+ let b:match_words .= ',\\begin\s*\({\a\+\*\=}\):\\end\s*\1'
+endif " exists("loaded_matchit")
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim:sts=2:sw=2:
diff --git a/runtime/ftplugin/text.vim b/runtime/ftplugin/text.vim
new file mode 100644
index 0000000..c4cbcb5
--- /dev/null
+++ b/runtime/ftplugin/text.vim
@@ -0,0 +1,18 @@
+" Vim filetype plugin
+" Language: Text
+" Maintainer: David Barnett <daviebdawg+vim@gmail.com>
+" Last Change: 2019 Jan 10
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = 'setlocal comments< commentstring<'
+
+" We intentionally don't set formatoptions-=t since text should wrap as text.
+
+" Pseudo comment leaders to indent bulleted lists with '-' and '*'. And allow
+" for Mail quoted text with '>'.
+setlocal comments=fb:-,fb:*,n:>
+setlocal commentstring=
diff --git a/runtime/ftplugin/tidy.vim b/runtime/ftplugin/tidy.vim
new file mode 100644
index 0000000..470548d
--- /dev/null
+++ b/runtime/ftplugin/tidy.vim
@@ -0,0 +1,32 @@
+" Vim filetype plugin file
+" Language: HMTL Tidy Configuration
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2020 Sep 4
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:#,://
+setlocal commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "HTML Tidy Files (tidyrc, .tidyrc, tidy.conf)\ttidyrc;.tidyrc;tidy.conf\n" .
+ \ "HTML Files (*.html, *.htm)\t*.html;*.htm\n" .
+ \ "XHTML Files (*.xhtml, *.xhtm)\t*.xhtml;*.xhtm\n" .
+ \ "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl fo< com< cms<" .
+ \ " | unlet! b:browsefilter"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8
diff --git a/runtime/ftplugin/tmux.vim b/runtime/ftplugin/tmux.vim
new file mode 100644
index 0000000..ed91549
--- /dev/null
+++ b/runtime/ftplugin/tmux.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: tmux(1) configuration file
+" URL: https://github.com/ericpruitt/tmux.vim/
+" Maintainer: Eric Pruitt <eric.pruitt@gmail.com>
+" Last Changed: 2017 Mar 10
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=#\ %s
diff --git a/runtime/ftplugin/treetop.vim b/runtime/ftplugin/treetop.vim
new file mode 100644
index 0000000..f978d15
--- /dev/null
+++ b/runtime/ftplugin/treetop.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: Treetop
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2011-03-14
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=b:# commentstring=#\ %s formatoptions-=tcroq formatoptions+=l
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/tt2html.vim b/runtime/ftplugin/tt2html.vim
new file mode 100644
index 0000000..10520d8
--- /dev/null
+++ b/runtime/ftplugin/tt2html.vim
@@ -0,0 +1,13 @@
+" Language: TT2 embedded with HTML
+" Maintainer: vim-perl <vim-perl@googlegroups.com>
+" Homepage: http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change: 2013-07-21
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Just use the HTML plugin for now.
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
diff --git a/runtime/ftplugin/typescript.vim b/runtime/ftplugin/typescript.vim
new file mode 100644
index 0000000..f701ae9
--- /dev/null
+++ b/runtime/ftplugin/typescript.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin file
+" Language: TypeScript
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2019 Aug 30
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal formatoptions-=t formatoptions+=croql
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+setlocal commentstring=//%s
+
+setlocal suffixesadd+=.ts,.d.ts,.tsx,.js,.jsx,.cjs,.mjs
+
+" Change the :browse e filter to primarily show TypeScript-related files.
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter="TypeScript Files (*.ts)\t*.ts\n" .
+ \ "TypeScript Declaration Files (*.d.ts)\t*.d.ts\n" .
+ \ "TSX Files (*.tsx)\t*.tsx\n" .
+ \ "JavaScript Files (*.js)\t*.js\n" .
+ \ "JavaScript Modules (*.es, *.cjs, *.mjs)\t*.es;*.cjs;*.mjs\n" .
+ \ "JSON Files (*.json)\t*.json\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl fo< com< cms< sua< | unlet! b:browsefilter"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/typescriptreact.vim b/runtime/ftplugin/typescriptreact.vim
new file mode 100644
index 0000000..3bd6001
--- /dev/null
+++ b/runtime/ftplugin/typescriptreact.vim
@@ -0,0 +1,33 @@
+" Vim filetype plugin file
+" Language: TypeScript React
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2020 Aug 09
+
+let s:match_words = ""
+let s:undo_ftplugin = ""
+
+runtime! ftplugin/typescript.vim
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+if exists("b:match_words")
+ let s:match_words = b:match_words
+endif
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+
+" Matchit configuration
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words = s:match_words .
+ \ '<:>,' .
+ \ '<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,' .
+ \ '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>'
+endif
+
+let b:undo_ftplugin = "unlet! b:match_words b:match_ignorecase | " . s:undo_ftplugin
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/udevconf.vim b/runtime/ftplugin/udevconf.vim
new file mode 100644
index 0000000..0bbd86a
--- /dev/null
+++ b/runtime/ftplugin/udevconf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: udev(8) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/udevperm.vim b/runtime/ftplugin/udevperm.vim
new file mode 100644
index 0000000..f8fb4d4
--- /dev/null
+++ b/runtime/ftplugin/udevperm.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: udev(8) permissions file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/udevrules.vim b/runtime/ftplugin/udevrules.vim
new file mode 100644
index 0000000..6404f6c
--- /dev/null
+++ b/runtime/ftplugin/udevrules.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: udev(8) rules file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/updatedb.vim b/runtime/ftplugin/updatedb.vim
new file mode 100644
index 0000000..3015918
--- /dev/null
+++ b/runtime/ftplugin/updatedb.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: updatedb.conf(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/vb.vim b/runtime/ftplugin/vb.vim
new file mode 100644
index 0000000..d70db89
--- /dev/null
+++ b/runtime/ftplugin/vb.vim
@@ -0,0 +1,45 @@
+" Vim filetype plugin file
+" Language: VisualBasic (ft=vb)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Thu, 22 Nov 2001 12:56:14 W. Europe Standard Time
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal com=sr:'\ -,mb:'\ \ ,el:'\ \ ,:'
+
+" we need this wrapper, as call doesn't allow a count
+fun! <SID>VbSearch(pattern, flags)
+ let cnt = v:count1
+ while cnt > 0
+ call search(a:pattern, a:flags)
+ let cnt = cnt - 1
+ endwhile
+endfun
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" NOTE the double escaping \\|
+nnoremap <buffer> <silent> [[ :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'bW')<cr>
+nnoremap <buffer> <silent> ]] :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'W')<cr>
+nnoremap <buffer> <silent> [] :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'bW')<cr>
+nnoremap <buffer> <silent> ][ :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'W')<cr>
+
+" matchit support
+if exists("loaded_matchit")
+ let b:match_ignorecase=1
+ let b:match_words=
+ \ '\%(^\s*\)\@<=\<if\>.*\<then\>\s*$:\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<elseif\>:\%(^\s*\)\@<=\<end\>\s\+\<if\>,' .
+ \ '\%(^\s*\)\@<=\<for\>:\%(^\s*\)\@<=\<next\>,' .
+ \ '\%(^\s*\)\@<=\<while\>:\%(^\s*\)\@<=\<wend\>,' .
+ \ '\%(^\s*\)\@<=\<do\>:\%(^\s*\)\@<=\<loop\>\s\+\<while\>,' .
+ \ '\%(^\s*\)\@<=\<select\>\s\+\<case\>:\%(^\s*\)\@<=\<case\>:\%(^\s*\)\@<=\<end\>\s\+\<select\>,' .
+ \ '\%(^\s*\)\@<=\<enum\>:\%(^\s*\)\@<=\<end\>\s\<enum\>,' .
+ \ '\%(^\s*\)\@<=\<with\>:\%(^\s*\)\@<=\<end\>\s\<with\>,' .
+ \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<function\>\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\<end\>\s\+\<function\>,' .
+ \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<sub\>\s\+:\%(^\s*\)\@<=\<end\>\s\+\<sub\>'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/verilog.vim b/runtime/ftplugin/verilog.vim
new file mode 100644
index 0000000..cbf30a3
--- /dev/null
+++ b/runtime/ftplugin/verilog.vim
@@ -0,0 +1,66 @@
+" Vim filetype plugin file
+" Language: Verilog HDL
+" Maintainer: Chih-Tsun Huang <cthuang@cs.nthu.edu.tw>
+" Last Change: 2017 Aug 25 by Chih-Tsun Huang
+" URL: http://www.cs.nthu.edu.tw/~cthuang/vim/ftplugin/verilog.vim
+"
+" Credits:
+" Suggestions for improvement, bug reports by
+" Shao <shaominghai2005@163.com>
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Set 'cpoptions' to allow line continuations
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Undo the plugin effect
+let b:undo_ftplugin = "setlocal fo< com< tw<"
+ \ . "| unlet! b:browsefilter b:match_ignorecase b:match_words"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croqlm1
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" Format comments to be up to 78 characters long
+if &textwidth == 0
+ setlocal tw=78
+endif
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Verilog Source Files (*.v)\t*.v\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Let the matchit plugin know what items can be matched.
+if exists("loaded_matchit")
+ let b:match_ignorecase=0
+ let b:match_words=
+ \ '\<begin\>:\<end\>,' .
+ \ '\<case\>\|\<casex\>\|\<casez\>:\<endcase\>,' .
+ \ '\<module\>:\<endmodule\>,' .
+ \ '\<if\>:`\@<!\<else\>,' .
+ \ '\<function\>:\<endfunction\>,' .
+ \ '`ifn\?def\>:`elsif\>:`else\>:`endif\>,' .
+ \ '\<task\>:\<endtask\>,' .
+ \ '\<specify\>:\<endspecify\>,' .
+ \ '\<config\>:\<endconfig\>,' .
+ \ '\<generate\>:\<endgenerate\>,' .
+ \ '\<fork\>:\<join\>,' .
+ \ '\<primitive\>:\<endprimitive\>,' .
+ \ '\<table\>:\<endtable\>'
+endif
+
+" Reset 'cpoptions' back to the user's setting
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/vhdl.vim b/runtime/ftplugin/vhdl.vim
new file mode 100644
index 0000000..0249b54
--- /dev/null
+++ b/runtime/ftplugin/vhdl.vim
@@ -0,0 +1,88 @@
+" VHDL filetype plugin
+" Language: VHDL
+" Maintainer: R.Shankar <shankar.pec?gmail.com>
+" Modified By: Gerald Lai <laigera+vim?gmail.com>
+" Last Change: 2011 Dec 11
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+"setlocal fo-=t fo+=croqlm1
+
+" Set 'comments' to format dashed lists in comments.
+"setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" Format comments to be up to 78 characters long
+"setlocal tw=75
+
+" Win32 can filter files in the browse dialog
+"if has("gui_win32") && !exists("b:browsefilter")
+" let b:browsefilter = "Verilog Source Files (*.v)\t*.v\n" .
+" \ "All Files (*.*)\t*.*\n"
+"endif
+
+" Let the matchit plugin know what items can be matched.
+if ! exists("b:match_words") && exists("loaded_matchit")
+ let b:match_ignorecase=1
+ let s:notend = '\%(\<end\s\+\)\@<!'
+ let b:match_words =
+ \ s:notend.'\<if\>:\<elsif\>:\<else\>:\<end\s\+if\>,'.
+ \ s:notend.'\<case\>:\<when\>:\<end\s\+case\>,'.
+ \ s:notend.'\<loop\>:\<end\s\+loop\>,'.
+ \ s:notend.'\<for\>:\<end\s\+for\>,'.
+ \ s:notend.'\<generate\>:\<end\s\+generate\>,'.
+ \ s:notend.'\<record\>:\<end\s\+record\>,'.
+ \ s:notend.'\<units\>:\<end\s\+units\>,'.
+ \ s:notend.'\<process\>:\<end\s\+process\>,'.
+ \ s:notend.'\<block\>:\<end\s\+block\>,'.
+ \ s:notend.'\<function\>:\<end\s\+function\>,'.
+ \ s:notend.'\<entity\>:\<end\s\+entity\>,'.
+ \ s:notend.'\<component\>:\<end\s\+component\>,'.
+ \ s:notend.'\<architecture\>:\<end\s\+architecture\>,'.
+ \ s:notend.'\<package\>:\<end\s\+package\>,'.
+ \ s:notend.'\<procedure\>:\<end\s\+procedure\>,'.
+ \ s:notend.'\<configuration\>:\<end\s\+configuration\>'
+endif
+
+" count repeat
+function! <SID>CountWrapper(cmd)
+ let i = v:count1
+ if a:cmd[0] == ":"
+ while i > 0
+ execute a:cmd
+ let i = i - 1
+ endwhile
+ else
+ execute "normal! gv\<Esc>"
+ execute "normal ".i.a:cmd
+ let curcol = col(".")
+ let curline = line(".")
+ normal! gv
+ call cursor(curline, curcol)
+ endif
+endfunction
+
+" explore motion
+" keywords: "architecture", "block", "configuration", "component", "entity", "function", "package", "procedure", "process", "record", "units"
+let b:vhdl_explore = '\%(architecture\|block\|configuration\|component\|entity\|function\|package\|procedure\|process\|record\|units\)'
+noremap <buffer><silent>[[ :<C-u>cal <SID>CountWrapper(':cal search("\\%(--.*\\)\\@<!\\%(\\<end\\s\\+\\)\\@<!\\<".b:vhdl_explore."\\>\\c\\<Bar>\\%^","bW")')<CR>
+noremap <buffer><silent>]] :<C-u>cal <SID>CountWrapper(':cal search("\\%(--.*\\)\\@<!\\%(\\<end\\s\\+\\)\\@<!\\<".b:vhdl_explore."\\>\\c\\<Bar>\\%$","W")')<CR>
+noremap <buffer><silent>[] :<C-u>cal <SID>CountWrapper(':cal search("\\%(--.*\\)\\@<!\\<end\\s\\+".b:vhdl_explore."\\>\\c\\<Bar>\\%^","bW")')<CR>
+noremap <buffer><silent>][ :<C-u>cal <SID>CountWrapper(':cal search("\\%(--.*\\)\\@<!\\<end\\s\\+".b:vhdl_explore."\\>\\c\\<Bar>\\%$","W")')<CR>
+vnoremap <buffer><silent>[[ :<C-u>cal <SID>CountWrapper('[[')<CR>
+vnoremap <buffer><silent>]] :<C-u>cal <SID>CountWrapper(']]')<CR>
+vnoremap <buffer><silent>[] :<C-u>cal <SID>CountWrapper('[]')<CR>
+vnoremap <buffer><silent>][ :<C-u>cal <SID>CountWrapper('][')<CR>
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
new file mode 100644
index 0000000..d39ad95
--- /dev/null
+++ b/runtime/ftplugin/vim.vim
@@ -0,0 +1,115 @@
+" Vim filetype plugin
+" Language: Vim
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2021 Jan 23
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !exists('*VimFtpluginUndo')
+ func VimFtpluginUndo()
+ setl fo< isk< com< tw< commentstring<
+ if exists('b:did_add_maps')
+ silent! nunmap <buffer> [[
+ silent! vunmap <buffer> [[
+ silent! nunmap <buffer> ]]
+ silent! vunmap <buffer> ]]
+ silent! nunmap <buffer> []
+ silent! vunmap <buffer> []
+ silent! nunmap <buffer> ][
+ silent! vunmap <buffer> ][
+ silent! nunmap <buffer> ]"
+ silent! vunmap <buffer> ]"
+ silent! nunmap <buffer> ["
+ silent! vunmap <buffer> ["
+ endif
+ unlet! b:match_ignorecase b:match_words b:match_skip b:did_add_maps
+ endfunc
+endif
+
+let b:undo_ftplugin = "call VimFtpluginUndo()"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" To allow tag lookup via CTRL-] for autoload functions, '#' must be a
+" keyword character. E.g., for netrw#Nread().
+setlocal isk+=#
+
+" Use :help to lookup the keyword under the cursor with K.
+setlocal keywordprg=:help
+
+if "\n" .. getline(1, 10)->join("\n") =~# '\n\s*vim9\%[script]\>'
+ " Set 'comments' to format dashed lists in comments
+ setlocal com=sO:#\ -,mO:#\ \ ,eO:##,:#
+ " Comments starts with # in Vim9 script
+ setlocal commentstring=#%s
+else
+ setlocal com=sO:\"\ -,mO:\"\ \ ,:\"
+ " Comments starts with a double quote in legacy script
+ setlocal commentstring=\"%s
+endif
+
+
+" Format comments to be up to 78 characters long
+if &tw == 0
+ setlocal tw=78
+endif
+
+if !exists("no_plugin_maps") && !exists("no_vim_maps")
+ let b:did_add_maps = 1
+
+ " Move around functions.
+ nnoremap <silent><buffer> [[ m':call search('^\s*\(fu\%[nction]\\|def\)\>', "bW")<CR>
+ vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|def\)\>', "bW")<CR>
+ nnoremap <silent><buffer> ]] m':call search('^\s*\(fu\%[nction]\\|def\)\>', "W")<CR>
+ vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|def\)\>', "W")<CR>
+ nnoremap <silent><buffer> [] m':call search('^\s*end\(f\%[unction]\\|def\)\>', "bW")<CR>
+ vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|def\)\>', "bW")<CR>
+ nnoremap <silent><buffer> ][ m':call search('^\s*end\(f\%[unction]\\|def\)\>', "W")<CR>
+ vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|def\)\>', "W")<CR>
+
+ " Move around comments
+ nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
+ vnoremap <silent><buffer> ]" :<C-U>exe "normal! gv"<Bar>call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
+ nnoremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
+ vnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
+endif
+
+" Let the matchit plugin know what items can be matched.
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ " "func" can also be used as a type:
+ " var Ref: func
+ " or to list functions:
+ " func name
+ " require a parenthesis following, then there can be an "endfunc".
+ let b:match_words =
+ \ '\<\%(fu\%[nction]\|def\)\s\+\S\+(:\<retu\%[rn]\>:\<\%(endf\%[unction]\|enddef\)\>,' .
+ \ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' .
+ \ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' .
+ \ '{:},' .
+ \ '\<try\>:\<cat\%[ch]\>:\<fina\%[lly]\>:\<endt\%[ry]\>,' .
+ \ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,'
+ " Ignore syntax region commands and settings, any 'en*' would clobber
+ " if-endif.
+ " - set spl=de,en
+ " - au! FileType javascript syntax region foldBraces start=/{/ end=/}/ …
+ let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name")
+ \ =~? "comment\\|string\\|vimSynReg\\|vimSet"'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" removed this, because 'cpoptions' is a global option.
+" setlocal cpo+=M " makes \%( match \)
diff --git a/runtime/ftplugin/vroom.vim b/runtime/ftplugin/vroom.vim
new file mode 100644
index 0000000..3d9e783
--- /dev/null
+++ b/runtime/ftplugin/vroom.vim
@@ -0,0 +1,35 @@
+" Vim filetype plugin file
+" Language: Vroom (vim testing and executable documentation)
+" Maintainer: David Barnett (https://github.com/google/vim-ft-vroom)
+" Last Change: 2014 Jul 23
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+
+let b:undo_ftplugin = 'setlocal formatoptions< shiftwidth< softtabstop<' .
+ \ ' expandtab< iskeyword< comments< commentstring<'
+
+setlocal formatoptions-=t
+
+" The vroom interpreter doesn't accept anything but 2-space indent.
+setlocal shiftwidth=2
+setlocal softtabstop=2
+setlocal expandtab
+
+" To allow tag lookup and autocomplete for whole autoload functions, '#' must be
+" a keyword character. This also conforms to the behavior of ftplugin/vim.vim.
+setlocal iskeyword+=#
+
+" Vroom files have no comments (text is inert documentation unless indented).
+setlocal comments=
+setlocal commentstring=
+
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/wast.vim b/runtime/ftplugin/wast.vim
new file mode 100644
index 0000000..0d9e98d
--- /dev/null
+++ b/runtime/ftplugin/wast.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin file
+" Language: WebAssembly
+" Maintainer: rhysd <lin90162@yahoo.co.jp>
+" Last Change: Jul 29, 2018
+" For bugs, patches and license go to https://github.com/rhysd/vim-wasm
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal comments=s:(;,e:;),:;;
+setlocal commentstring=(;%s;)
+setlocal formatoptions-=t
+setlocal iskeyword+=$,.,/
+
+let b:undo_ftplugin = "setlocal comments< commentstring< formatoptions< iskeyword<"
diff --git a/runtime/ftplugin/xdefaults.vim b/runtime/ftplugin/xdefaults.vim
new file mode 100644
index 0000000..c1aff70
--- /dev/null
+++ b/runtime/ftplugin/xdefaults.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: X resources files like ~/.Xdefaults (xrdb)
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=s1:/*,mb:*,ex:*/,:! commentstring& inc&
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/xf86conf.vim b/runtime/ftplugin/xf86conf.vim
new file mode 100644
index 0000000..5a21539
--- /dev/null
+++ b/runtime/ftplugin/xf86conf.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: XFree86 Configuration File
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/xhtml.vim b/runtime/ftplugin/xhtml.vim
new file mode 100644
index 0000000..21ed3e1
--- /dev/null
+++ b/runtime/ftplugin/xhtml.vim
@@ -0,0 +1,67 @@
+" Vim filetype plugin file
+" Language: xhtml
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "HTML Files (*.html, *.htm)\t*.html;*.htm\n" .
+ \ "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+unlet b:did_ftplugin
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+ unlet b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+ unlet b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+ unlet b:match_words
+endif
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+let b:did_ftplugin = 1
+
+" Combine the new set of values with those previously included.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter . s:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words . "," . s:match_words
+endif
+
+" Load the combined list of match_words for matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = s:match_words
+endif
+
+" Change the :browse e filter to primarily show tcsh-related files.
+if has("gui_win32")
+ let b:browsefilter="XHTML files (*.xhtml, *.xhtm)\t*.xhtml;*.xhtm\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/xinetd.vim b/runtime/ftplugin/xinetd.vim
new file mode 100644
index 0000000..2b7b64e
--- /dev/null
+++ b/runtime/ftplugin/xinetd.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: xinetd.conf(5) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< inc< fo<"
+
+setlocal comments=:# commentstring=#\ %s include=^\\s*include
+setlocal formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/xml.vim b/runtime/ftplugin/xml.vim
new file mode 100644
index 0000000..1d43521
--- /dev/null
+++ b/runtime/ftplugin/xml.vim
@@ -0,0 +1,65 @@
+" Vim filetype plugin file
+" Language: xml
+" Maintainer: Christian Brabandt <cb@256bit.org>
+" Last Changed: Dec 07th, 2018
+" Repository: https://github.com/chrisbra/vim-xml-ftplugin
+" Previous Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo&vim
+
+setlocal commentstring=<!--%s-->
+" Remove the middlepart from the comments section, as this causes problems:
+" https://groups.google.com/d/msg/vim_dev/x4GT-nqa0Kg/jvtRnEbtAnMJ
+setlocal comments=s:<!--,e:-->
+
+setlocal formatoptions-=t
+setlocal formatoptions+=croql
+setlocal formatexpr=xmlformat#Format()
+
+" XML: thanks to Johannes Zellner and Akbar Ibrahim
+" - case sensitive
+" - don't match empty tags <fred/>
+" - match <!--, --> style comments (but not --, --)
+" - match <!, > inlined dtd's. This is not perfect, as it
+" gets confused for example by
+" <!ENTITY gt ">">
+if exists("loaded_matchit")
+ let b:match_ignorecase=0
+ let b:match_words =
+ \ '<:>,' .
+ \ '<\@<=!\[CDATA\[:]]>,'.
+ \ '<\@<=!--:-->,'.
+ \ '<\@<=?\k\+:?>,'.
+ \ '<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,'.
+ \ '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>'
+endif
+
+" For Omni completion, by Mikolaj Machowski.
+if exists('&ofu')
+ setlocal ofu=xmlcomplete#CompleteTags
+endif
+command! -nargs=+ XMLns call xmlcomplete#CreateConnection(<f-args>)
+command! -nargs=? XMLent call xmlcomplete#CreateEntConnection(<f-args>)
+
+" Change the :browse e filter to primarily show xml-related files.
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter="XML Files (*.xml)\t*.xml\n" .
+ \ "DTD Files (*.dtd)\t*.dtd\n" .
+ \ "XSD Files (*.xsd)\t*.xsd\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring< comments< formatoptions< formatexpr< " .
+ \ " | unlet! b:match_ignorecase b:match_words b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/xmodmap.vim b/runtime/ftplugin/xmodmap.vim
new file mode 100644
index 0000000..77fccd5
--- /dev/null
+++ b/runtime/ftplugin/xmodmap.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language: xmodmap(1) definition file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:! commentstring=!\ %s formatoptions-=t formatoptions+=croql
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/xs.vim b/runtime/ftplugin/xs.vim
new file mode 100644
index 0000000..a28da6a
--- /dev/null
+++ b/runtime/ftplugin/xs.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin file
+" Language: XS (Perl extension interface language)
+" Maintainer: vim-perl <vim-perl@googlegroups.com>
+" Homepage: http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change: 2013-07-21
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Just use the C plugin for now.
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
diff --git a/runtime/ftplugin/xsd.vim b/runtime/ftplugin/xsd.vim
new file mode 100644
index 0000000..6a4a193
--- /dev/null
+++ b/runtime/ftplugin/xsd.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin file
+" Language: xsd
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show xsd-related files.
+if has("gui_win32")
+ let b:browsefilter="XSD Files (*.xsd)\t*.xsd\n" . s:browsefilter
+endif
+
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/xslt.vim b/runtime/ftplugin/xslt.vim
new file mode 100644
index 0000000..1a5ee62
--- /dev/null
+++ b/runtime/ftplugin/xslt.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: xslt
+" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+
+let b:did_ftplugin = 1
+
+" Change the :browse e filter to primarily show xsd-related files.
+if has("gui_win32") && exists("b:browsefilter")
+ let b:browsefilter="XSLT Files (*.xsl,*.xslt)\t*.xsl;*.xslt\n" . b:browsefilter
+endif
diff --git a/runtime/ftplugin/yaml.vim b/runtime/ftplugin/yaml.vim
new file mode 100644
index 0000000..db7cbd7
--- /dev/null
+++ b/runtime/ftplugin/yaml.vim
@@ -0,0 +1,25 @@
+" Vim filetype plugin file
+" Language: YAML (YAML Ain't Markup Language)
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se> (inactive)
+" Last Change: 2020 Mar 02
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< et< fo<"
+
+setlocal comments=:# commentstring=#\ %s expandtab
+setlocal formatoptions-=t formatoptions+=croql
+
+if !exists("g:yaml_recommended_style") || g:yaml_recommended_style != 0
+ let b:undo_ftplugin ..= " sw< sts<"
+ setlocal shiftwidth=2 softtabstop=2
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/zimbu.vim b/runtime/ftplugin/zimbu.vim
new file mode 100644
index 0000000..2e3138e
--- /dev/null
+++ b/runtime/ftplugin/zimbu.vim
@@ -0,0 +1,153 @@
+" Vim filetype plugin file
+" Language: Zimbu
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2017 Dec 05
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Using line continuation here.
+let s:cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< com< ofu< efm< tw< et< sts< sw< | if has('vms') | setl isk< | endif"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&ofu')
+ setlocal ofu=ccomplete#Complete
+endif
+
+" Set 'comments' to format dashed lists in comments.
+" And to keep Zudocu comment characters.
+setlocal comments=sO:#\ -,mO:#\ \ ,:#=,:#-,:#%,:#
+
+setlocal errorformat^=%f\ line\ %l\ col\ %c:\ %m,ERROR:\ %m
+
+" When the matchit plugin is loaded, this makes the % command skip parens and
+" braces in comments.
+let b:match_words = '\(^\s*\)\@<=\(MODULE\|CLASS\|INTERFACE\|BITS\|ENUM\|SHARED\|FUNC\|REPLACE\|DEFINE\|PROC\|EQUAL\|MAIN\|IF\|GENERATE_IF\|WHILE\|REPEAT\|WITH\|DO\|FOR\|SWITCH\|TRY\)\>\|{\s*$:\(^\s*\)\@<=\(ELSE\|ELSEIF\|GENERATE_ELSE\|GENERATE_ELSEIF\|CATCH\|FINALLY\)\>:\(^\s*\)\@<=\(}\|\<UNTIL\>\)'
+
+let b:match_skip = 's:comment\|string\|zimbuchar'
+
+setlocal tw=78
+setlocal et sts=2 sw=2
+
+" Does replace when a dot, space or closing brace is typed.
+func! GCUpperDot(what)
+ if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != '.' && v:char != ')' && v:char != '}' && v:char != ','
+ " no space or dot after the typed text
+ let g:got_char = v:char
+ return a:what
+ endif
+ return GCUpperCommon(a:what)
+endfunc
+
+" Does not replace when a dot is typed.
+func! GCUpper(what)
+ if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != ')' && v:char != ','
+ " no space or other "terminating" character after the typed text
+ let g:got_char = v:char
+ return a:what
+ endif
+ return GCUpperCommon(a:what)
+endfunc
+
+" Only replaces when a space is typed.
+func! GCUpperSpace(what)
+ if v:char != ' '
+ " no space after the typed text
+ let g:got_char = v:char
+ return a:what
+ endif
+ return GCUpperCommon(a:what)
+endfunc
+
+func! GCUpperCommon(what)
+ let col = col(".") - strlen(a:what)
+ if col > 1 && getline('.')[col - 2] != ' '
+ " no space before the typed text
+ let g:got_char = 999
+ return a:what
+ endif
+ let synName = synIDattr(synID(line("."), col(".") - 2, 1), "name")
+ if synName =~ 'Comment\|String\|zimbuCregion\|\<c'
+ " inside a comment or C code
+ let g:got_char = 777
+ return a:what
+ endif
+ let g:got_char = 1111
+ return toupper(a:what)
+endfunc
+
+iabbr <buffer> <expr> alias GCUpperSpace("alias")
+iabbr <buffer> <expr> arg GCUpperDot("arg")
+iabbr <buffer> <expr> break GCUpper("break")
+iabbr <buffer> <expr> case GCUpperSpace("case")
+iabbr <buffer> <expr> catch GCUpperSpace("catch")
+iabbr <buffer> <expr> check GCUpperDot("check")
+iabbr <buffer> <expr> class GCUpperSpace("class")
+iabbr <buffer> <expr> interface GCUpperSpace("interface")
+iabbr <buffer> <expr> implements GCUpperSpace("implements")
+iabbr <buffer> <expr> shared GCUpperSpace("shared")
+iabbr <buffer> <expr> continue GCUpper("continue")
+iabbr <buffer> <expr> default GCUpper("default")
+iabbr <buffer> <expr> extends GCUpper("extends")
+iabbr <buffer> <expr> do GCUpper("do")
+iabbr <buffer> <expr> else GCUpper("else")
+iabbr <buffer> <expr> elseif GCUpperSpace("elseif")
+iabbr <buffer> <expr> enum GCUpperSpace("enum")
+iabbr <buffer> <expr> exit GCUpper("exit")
+iabbr <buffer> <expr> false GCUpper("false")
+iabbr <buffer> <expr> fail GCUpper("fail")
+iabbr <buffer> <expr> finally GCUpper("finally")
+iabbr <buffer> <expr> for GCUpperSpace("for")
+iabbr <buffer> <expr> func GCUpperSpace("func")
+iabbr <buffer> <expr> if GCUpperSpace("if")
+iabbr <buffer> <expr> import GCUpperSpace("import")
+iabbr <buffer> <expr> in GCUpperSpace("in")
+iabbr <buffer> <expr> io GCUpperDot("io")
+iabbr <buffer> <expr> main GCUpper("main")
+iabbr <buffer> <expr> module GCUpperSpace("module")
+iabbr <buffer> <expr> new GCUpper("new")
+iabbr <buffer> <expr> nil GCUpper("nil")
+iabbr <buffer> <expr> ok GCUpper("ok")
+iabbr <buffer> <expr> proc GCUpperSpace("proc")
+iabbr <buffer> <expr> proceed GCUpper("proceed")
+iabbr <buffer> <expr> return GCUpper("return")
+iabbr <buffer> <expr> step GCUpperSpace("step")
+iabbr <buffer> <expr> switch GCUpperSpace("switch")
+iabbr <buffer> <expr> sys GCUpperDot("sys")
+iabbr <buffer> <expr> this GCUpperDot("this")
+iabbr <buffer> <expr> throw GCUpperSpace("throw")
+iabbr <buffer> <expr> try GCUpper("try")
+iabbr <buffer> <expr> to GCUpperSpace("to")
+iabbr <buffer> <expr> true GCUpper("true")
+iabbr <buffer> <expr> until GCUpperSpace("until")
+iabbr <buffer> <expr> while GCUpperSpace("while")
+iabbr <buffer> <expr> repeat GCUpper("repeat")
+
+if !exists("no_plugin_maps") && !exists("no_zimbu_maps")
+ nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR>
+ nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR>
+endif
+
+" Using a function makes sure the search pattern is restored
+func! ZimbuGoStartBlock()
+ ?^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
+endfunc
+func! ZimbuGoEndBlock()
+ /^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
+endfunc
+
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/zsh.vim b/runtime/ftplugin/zsh.vim
new file mode 100644
index 0000000..53ce141
--- /dev/null
+++ b/runtime/ftplugin/zsh.vim
@@ -0,0 +1,42 @@
+" Vim filetype plugin file
+" Language: Zsh shell script
+" Maintainer: Christian Brabandt <cb@256bit.org>
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2020-09-01
+" License: Vim (see :h license)
+" Repository: https://github.com/chrisbra/vim-zsh
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+let b:undo_ftplugin = "setl com< cms< fo< "
+
+if executable('zsh')
+ if !has('gui_running') && executable('less')
+ command! -buffer -nargs=1 RunHelp silent exe '!MANPAGER= zsh -ic "autoload -Uz run-help; run-help <args> 2>/dev/null | LESS= less"' | redraw!
+ elseif has('terminal')
+ command! -buffer -nargs=1 RunHelp silent exe ':term zsh -ic "autoload -Uz run-help; run-help <args>"'
+ else
+ command! -buffer -nargs=1 RunHelp echo system('zsh -ic "autoload -Uz run-help; run-help <args> 2>/dev/null"')
+ endif
+ if !exists('current_compiler')
+ compiler zsh
+ endif
+ setlocal keywordprg=:RunHelp
+ let b:undo_ftplugin .= 'keywordprg<'
+endif
+
+let b:match_words = '\<if\>:\<elif\>:\<else\>:\<fi\>'
+ \ . ',\<case\>:^\s*([^)]*):\<esac\>'
+ \ . ',\<\%(select\|while\|until\|repeat\|for\%(each\)\=\)\>:\<done\>'
+let b:match_skip = 's:comment\|string\|heredoc\|subst'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save