diff options
Diffstat (limited to 'runtime/ftplugin')
288 files changed, 13544 insertions, 0 deletions
diff --git a/runtime/ftplugin/8th.vim b/runtime/ftplugin/8th.vim new file mode 100644 index 0000000..ad04f9a --- /dev/null +++ b/runtime/ftplugin/8th.vim @@ -0,0 +1,27 @@ +" Vim ftplugin file +" Language: 8th +" Version: any +" Last Change: 2021 Sep 20 +" Last Change: 2021/09/20 +" 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 8th plugin for this buffer +let b:did_8thplugin = 1 + +setlocal ts=2 sts=2 sw=2 et +setlocal com=s1:/*,mb:*,ex:*/,b:--,be:\\ +setlocal fo=tcrqol +setlocal matchpairs+=\::; +setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255 +setlocal suffixesadd=.8th +let b:undo_ftplugin = "setlocal ts< sts< sw< et< com< fo< mps< isk< sua<" 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..b5065e5 --- /dev/null +++ b/runtime/ftplugin/aap.vim @@ -0,0 +1,32 @@ +" Vim filetype plugin file +" Language: Aap recipe +" Maintainer: Bram Moolenaar <Bram@vim.org> +" Last Change: 2021 Nov 14 + +" 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', 'commentstring' and 'expandtab' to undo +" this plugin. +let b:undo_ftplugin = "setl fo< com< cms< 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:- +setlocal commentstring=#\ %s + +" Expand tabs to spaces to avoid trouble. +setlocal expandtab + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Aap Recipe Files (*.aap)\t*.aap\nAll Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif 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..5931cd9 --- /dev/null +++ b/runtime/ftplugin/abaqus.vim @@ -0,0 +1,118 @@ +" Vim filetype plugin file +" Language: Abaqus finite element input file (www.abaqus.com) +" Maintainer: Carl Osterwisch <costerwi@gmail.com> +" Last Change: 2022 Oct 08 + +" 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") || has("gui_gtk")) && !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 + +if !exists("no_plugin_maps") && !exists("no_abaqus_maps") + " Map [[ and ]] keys to move [count] keywords backward or forward + nnoremap <silent><buffer> ]] :call <SID>Abaqus_NextKeyword(1)<CR> + nnoremap <silent><buffer> [[ :call <SID>Abaqus_NextKeyword(-1)<CR> + function! <SID>Abaqus_NextKeyword(direction) + .mark ' + if a:direction < 0 + let flags = 'b' + else + let flags = '' + endif + let l:count = abs(a:direction) * v:count1 + while l:count > 0 && search("^\\*\\a", flags) + let l:count -= 1 + endwhile + endfunction + + " Map \\ 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 + + " Map \s to swap first two comma separated fields + noremap <silent><buffer> <LocalLeader>s :call <SID>Abaqus_Swap()<CR> + function! <SID>Abaqus_Swap() range + silent execute a:firstline . ',' . a:lastline . 's/\([^*,]*\),\([^,]*\)/\2,\1/' + endfunction + + let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]" + \ . "|unmap <buffer> <LocalLeader><LocalLeader>" + \ . "|unmap <buffer> <LocalLeader>s" +endif + +" Undo must be done in nocompatible mode for <LocalLeader>. +let b:undo_ftplugin = "let b:cpo_save = &cpoptions|" + \ . "set cpoptions&vim|" + \ . b:undo_ftplugin + \ . "|let &cpoptions = b:cpo_save" + \ . "|unlet b: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..aee07ca --- /dev/null +++ b/runtime/ftplugin/ant.vim @@ -0,0 +1,46 @@ +" Vim filetype plugin file +" Language: ant +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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/apache.vim b/runtime/ftplugin/apache.vim new file mode 100644 index 0000000..9f612f5 --- /dev/null +++ b/runtime/ftplugin/apache.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin +" Language: apache configuration file +" Maintainer: Per Juchtmans <dubgeiser+vimNOSPAM@gmail.com> +" Last Change: 2022 Oct 22 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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..70a130d --- /dev/null +++ b/runtime/ftplugin/aspvbs.vim @@ -0,0 +1,62 @@ +" Vim filetype plugin file +" Language: aspvbs +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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..4399fbf --- /dev/null +++ b/runtime/ftplugin/basic.vim @@ -0,0 +1,57 @@ +" Vim filetype plugin file +" Language: BASIC (QuickBASIC 4.5) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Jun 22 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=:REM\ ,:Rem\ ,:rem\ ,:' +setlocal commentstring='\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setl fo< com< cms<" + +" TODO: support exit ... as middle matches? +if exists("loaded_matchit") && !exists("b:match_words") + let s:line_start = '\%(^\s*\)\@<=' + let s:not_end = '\%(end\s\+\)\@<!' + let s:not_end_or_exit = '\%(\%(end\|exit\)\s\+\)\@<!' + + let b:match_ignorecase = 1 + let b:match_words = + \ s:not_end_or_exit .. '\<def\s\+fn:\<end\s\+def\>,' .. + \ s:not_end_or_exit .. '\<function\>:\<end\s\+function\>,' .. + \ s:not_end_or_exit .. '\<sub\>:\<end\s\+sub\>,' .. + \ s:not_end .. '\<type\>:\<end\s\+type\>,' .. + \ s:not_end .. '\<select\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' .. + \ '\<do\>:\<loop\>,' .. + \ '\<for\>\%(\s\+\%(input\|output\|random\|append\|binary\)\)\@!:\<next\>,' .. + \ '\<while\>:\<wend\>,' .. + \ s:line_start .. 'if\%(.*\<then\s*\%($\|''\)\)\@=:\<\%(' .. s:line_start .. 'else\|elseif\)\>:\<end\s\+if\>,' .. + \ '\<lock\>:\<unlock\>' + let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string" || ' .. + \ 'strpart(getline("."), 0, col(".") ) =~? "\\<exit\\s\\+"' + + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_skip b:match_words" + + unlet s:line_start s:not_end s:not_end_or_exit +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" .. + \ "BASIC Include Files (*.bi, *.bm)\t*.bi;*.bm\n" .. + \ "All Files (*.*)\t*.*\n" + let b:basic_set_browsefilter = 1 + let b:undo_ftplugin ..= " | unlet! b:browsefilter b:basic_set_browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: 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/bitbake.vim b/runtime/ftplugin/bitbake.vim new file mode 100644 index 0000000..99fe334 --- /dev/null +++ b/runtime/ftplugin/bitbake.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin file +" Language: Bitbake +" Maintainer: Gregory Anders <greg@gpanders.com> +" Repository: https://github.com/openembedded/bitbake +" Latest Revision: 2022-07-23 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=#%s +setlocal comments=:# +setlocal suffixesadd=.bb,.bbclass + +let b:undo_ftplugin = "setl cms< com< sua<" 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..3627089 --- /dev/null +++ b/runtime/ftplugin/c.vim @@ -0,0 +1,73 @@ +" Vim filetype plugin file +" Language: C +" Maintainer: Bram Moolenaar <Bram@vim.org> +" Last Change: 2022 Apr 08 + +" 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. +" Also include ///, used for Doxygen. +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. +if !exists("b:match_words") + 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' + let b:undo_ftplugin ..= " | unlet! b:match_skip b:match_words" +endif + +" 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 + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +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..e9df63f --- /dev/null +++ b/runtime/ftplugin/changelog.vim @@ -0,0 +1,307 @@ +" Vim filetype plugin file +" Language: generic Changelog file +" Maintainer: Martin Florian <marfl@posteo.de> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2021-10-17 +" 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 + + 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 + + if !exists("no_plugin_maps") && !exists("no_changelog_maps") && 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! -buffer -nargs=0 NewChangelogEntry call s:new_changelog_entry('') + let b:undo_ftplugin .= " | sil! exe 'nunmap <buffer> <Leader>o'" . + \ " | sil! exe 'vunmap <buffer> <Leader>o'" . + \ " | sil! delc NewChangelogEntry" + endif + + let &cpo = s:cpo_save + unlet s:cpo_save +else + let s:cpo_save = &cpo + set cpo&vim + + if !exists("no_plugin_maps") && !exists("no_changelog_maps") + " Add the Changelog opening mapping + nnoremap <silent> <Leader>o :call <SID>open_changelog()<CR> + let b:undo_ftplugin .= " | silent! exe 'nunmap <buffer> <Leader>o" + endif + + 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/chatito.vim b/runtime/ftplugin/chatito.vim new file mode 100644 index 0000000..af212e9 --- /dev/null +++ b/runtime/ftplugin/chatito.vim @@ -0,0 +1,15 @@ +" Vim filetype plugin +" Language: Chatito +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Sep 19 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:#,:// commentstring=#\ %s +" indent of 4 spaces is mandated by the spec +setlocal expandtab softtabstop=4 shiftwidth=4 + +let b:undo_ftplugin = 'setl com< cms< et< sts< sw<' diff --git a/runtime/ftplugin/chicken.vim b/runtime/ftplugin/chicken.vim new file mode 100644 index 0000000..84d45ba --- /dev/null +++ b/runtime/ftplugin/chicken.vim @@ -0,0 +1,55 @@ +" CHICKEN-specific Vim customizations +" Last Change: 2018-03-05 +" Author: Evan Hanson <evhan@foldling.org> +" Maintainer: Evan Hanson <evhan@foldling.org> +" Repository: https://git.foldling.org/vim-scheme.git +" 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..c922d75 --- /dev/null +++ b/runtime/ftplugin/clojure.vim @@ -0,0 +1,80 @@ +" Vim filetype plugin file +" Language: Clojure +" Maintainer: Alex Vear <alex@vear.uk> +" Former Maintainers: Sung Pae <self@sungpae.com> +" Meikel Brandmeyer <mb@kotka.de> +" URL: https://github.com/clojure-vim/clojure.vim +" License: Vim (see :h license) +" Last Change: 2022-03-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 = '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/clojure-vim/clojure.vim/blob/fd280e33e84c88e97860930557dba3ff80b1a82d/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 + +" 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 + +" Filter files in the browse dialog +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "All Files\t*\n" . + \ "Clojure Files\t*.clj;*.cljc;*.cljs;*.cljx\n" . + \ "EDN Files\t*.edn\n" . + \ "Java Files\t*.java\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..73136cb --- /dev/null +++ b/runtime/ftplugin/config.vim @@ -0,0 +1,44 @@ +" Vim filetype plugin file +" Language: config +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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/confini.vim b/runtime/ftplugin/confini.vim new file mode 100644 index 0000000..310e046 --- /dev/null +++ b/runtime/ftplugin/confini.vim @@ -0,0 +1,10 @@ +" Vim filetype plugin file +" Language: confini + +" Quit if a ftplugin file was already loaded +if exists("b:did_ftplugin") + finish +endif + +" Use the cfg plugin, it's similar enough. +runtime! ftplugin/cfg.vim diff --git a/runtime/ftplugin/context.vim b/runtime/ftplugin/context.vim new file mode 100644 index 0000000..75d26cf --- /dev/null +++ b/runtime/ftplugin/context.vim @@ -0,0 +1,115 @@ +vim9script + +# Vim filetype plugin file +# Language: ConTeXt typesetting engine +# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> +# Former Maintainers: Nikolai Weibull <now@bitwi.se> +# Latest Revision: 2022 Aug 12 + +if exists("b:did_ftplugin") + finish +endif + +import autoload '../autoload/context.vim' + +b:did_ftplugin = 1 + +if !exists('current_compiler') + compiler context +endif + +b:undo_ftplugin = "setl com< cms< def< inc< sua< fo< ofu<" + +setlocal comments=b:%D,b:%C,b:%M,:% +setlocal commentstring=%\ %s +setlocal formatoptions+=tjcroql2 +setlocal omnifunc=context.Complete +setlocal suffixesadd=.tex,.mkxl,.mkvi,.mkiv,.mkii + +&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\)' + +&l:include = '^\s*\\\%(input\|component\|product\|project\|environment\)' + +if exists("g:loaded_matchit") && !exists("b:match_words") + b:match_ignorecase = 0 + b:match_skip = 'r:\\\@<!\%(\\\\\)*%' + b:match_words = '(:),\[:],{:},\\(:\\),\\\[:\\],\\start\(\a\+\):\\stop\1' + b:undo_ftplugin ..= "| unlet! b:match_ignorecase b:match_words b:match_skip" +endif + +if !get(g:, 'no_context_maps', 0) && !get(g:, 'no_plugin_maps', 0) + const 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\)', + } + + def UndoMap(mapping: string, modes: string) + for mode in modes + b:undo_ftplugin ..= printf(" | silent! execute '%sunmap <buffer> %s'", mode, mapping) + endfor + enddef + + def MoveAround(count: number, what: string, flags: string) + search(context_regex[what], flags .. 's') # 's' sets previous context mark + var i = 2 + while i <= count + search(context_regex[what], flags) + i += 1 + endwhile + enddef + + # Macros to move around + nnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr> + vnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr> + nnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr> + vnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr> + nnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr> + vnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr> + nnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr> + vnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr> + nnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr> + vnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr> + nnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr> + vnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr> + + for mapping in ['[[', ']]', '[]', '][', '[{', ']}'] + UndoMap(mapping, 'nv') + endfor + + # Other useful mappings + const tp_regex = '?^$\|^\s*\\\(item\|start\|stop\|blank\|\%(sub\)*section\|chapter\|\%(sub\)*subject\|title\|part\)' + + def TeXPar() + cursor(search(tp_regex, 'bcW') + 1, 1) + normal! V + cursor(search(tp_regex, 'W') - 1, 1) + enddef + + # Reflow paragraphs with mappings like gqtp ("gq TeX paragraph") + onoremap <silent><buffer> tp <scriptcmd>TeXPar()<cr> + # Select TeX paragraph + vnoremap <silent><buffer> tp <scriptcmd>TeXPar()<cr> + + # $...$ text object + onoremap <silent><buffer> i$ <scriptcmd>normal! T$vt$<cr> + onoremap <silent><buffer> a$ <scriptcmd>normal! F$vf$<cr> + vnoremap <buffer> i$ T$ot$ + vnoremap <buffer> a$ F$of$ + + for mapping in ['tp', 'i$', 'a$'] + UndoMap(mapping, 'ov') + endfor +endif + +# Commands for asynchronous typesetting +command! -buffer -nargs=? -complete=buffer ConTeXt context.Typeset(<q-args>) +command! -buffer -nargs=0 ConTeXtLog context.Log('%') +command! -nargs=0 ConTeXtJobStatus context.JobStatus() +command! -nargs=0 ConTeXtStopJobs context.StopJobs() + +# vim: sw=2 fdm=marker 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/crontab.vim b/runtime/ftplugin/crontab.vim new file mode 100644 index 0000000..8dac007 --- /dev/null +++ b/runtime/ftplugin/crontab.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin +" Language: crontab +" Maintainer: Keith Smiley <keithbsmiley@gmail.com> +" Last Change: 2022 Sep 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 b:undo_ftplugin = "setl commentstring<" + +setlocal commentstring=#\ %s diff --git a/runtime/ftplugin/cs.vim b/runtime/ftplugin/cs.vim new file mode 100644 index 0000000..0734d11 --- /dev/null +++ b/runtime/ftplugin/cs.vim @@ -0,0 +1,44 @@ +" Vim filetype plugin file +" Language: C# +" Maintainer: Nick Jensen <nickspoon@gmail.com> +" Former Maintainer: Johannes Zellner <johannes@zellner.org> +" Last Change: 2022-11-16 +" License: Vim (see :h license) +" Repository: https://github.com/nickspoons/vim-cs + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpoptions +set cpoptions&vim + +" 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:*/,:///,:// + +let b:undo_ftplugin = 'setl com< fo<' + +if exists('loaded_matchit') && !exists('b:match_words') + " #if/#endif support included by default + let b:match_ignorecase = 0 + let b:match_words = '\%(^\s*\)\@<=#\s*region\>:\%(^\s*\)\@<=#\s*endregion\>,' + let b:undo_ftplugin .= ' | unlet! b:match_ignorecase b:match_words' +endif + +if (has('gui_win32') || has('gui_gtk')) && !exists('b:browsefilter') + let b:browsefilter = "C# Source Files (*.cs *.csx)\t*.cs;*.csx\n" . + \ "C# Project Files (*.csproj)\t*.csproj\n" . + \ "Visual Studio Solution Files (*.sln)\t*.sln\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin .= ' | unlet! b:browsefilter' +endif + +let &cpoptions = s:save_cpo +unlet s:save_cpo + +" vim:et:sw=2:sts=2 diff --git a/runtime/ftplugin/csc.vim b/runtime/ftplugin/csc.vim new file mode 100644 index 0000000..7b4126a --- /dev/null +++ b/runtime/ftplugin/csc.vim @@ -0,0 +1,29 @@ +" Vim filetype plugin file +" Language: csc +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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..ca5da5a --- /dev/null +++ b/runtime/ftplugin/csh.vim @@ -0,0 +1,51 @@ +" Vim filetype plugin file +" Language: csh +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Contributor: Johannes Zellner <johannes@zellner.org> +" Last Change: 2021 Oct 15 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo-=C + +setlocal comments=:# +setlocal commentstring=#%s +setlocal formatoptions-=t +setlocal formatoptions+=crql + +let b:undo_ftplugin = "setlocal com< cms< fo<" + +" 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") && !exists("b:match_words") + let s:line_start = '\%(^\s*\)\@<=' + let b:match_words = + \ s:line_start .. 'if\s*(.*)\s*then\>:' .. + \ s:line_start .. 'else\s\+if\s*(.*)\s*then\>:' .. s:line_start .. 'else\>:' .. + \ s:line_start .. 'endif\>,' .. + \ s:line_start .. '\%(\<foreach\s\+\h\w*\|while\)\s*(:' .. + \ '\<break\>:\<continue\>:' .. + \ s:line_start .. 'end\>,' .. + \ s:line_start .. 'switch\s*(:' .. + \ s:line_start .. 'case\s\+:' .. s:line_start .. 'default\>:\<breaksw\>:' .. + \ s:line_start .. 'endsw\>' + unlet s:line_start + let b:undo_ftplugin ..= " | unlet b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter="csh Scripts (*.csh)\t*.csh\n" .. + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet b:browsefilter" +endif + +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..062fc05 --- /dev/null +++ b/runtime/ftplugin/debchangelog.vim @@ -0,0 +1,394 @@ +" Vim filetype plugin file (GUI menu, folding and completion) +" Language: Debian Changelog +" Maintainer: Debian Vim Maintainers <team+vim@tracker.debian.org> +" Former Maintainers: Michael Piefel <piefel@informatik.hu-berlin.de> +" Stefano Zacchiroli <zack@debian.org> +" Last Change: 2023 Jan 16 +" License: Vim License +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/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 + +" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise +" <CR> would not be recognized. See ":help 'cpoptions'". +let s:cpo_save = &cpo +set cpo&vim + +" {{{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.U&nfinalise + 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' doens't support key annotation (<c-a>) directly. + " Vim's manual recommends using ':exe' to use key annotation indirectly (backslash-escaping needed though). + exe "normal! \<c-a>" + 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.U&nfinalise + 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.U&nfinalise + 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 + +" }}} + +" Restore the previous value of 'cpoptions'. +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: set foldmethod=marker: diff --git a/runtime/ftplugin/debcontrol.vim b/runtime/ftplugin/debcontrol.vim new file mode 100644 index 0000000..bb710e5 --- /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: 2023 Jan 16 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/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/desktop.vim b/runtime/ftplugin/desktop.vim new file mode 100644 index 0000000..bd6fd70 --- /dev/null +++ b/runtime/ftplugin/desktop.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin file +" Language: XDG desktop entry +" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) +" Last Change: 2022-07-26 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = v:true + +setl comments=:# +setl commentstring=#%s +let b:undo_ftplugin = 'setl com< cms<' 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..bf37d46 --- /dev/null +++ b/runtime/ftplugin/diff.vim @@ -0,0 +1,23 @@ +" Vim filetype plugin file +" Language: Diff +" Maintainer: Bram Moolenaar <Bram@vim.org> +" Last Change: 2021 Nov 14 + +" 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< commentstring<" + +" Don't use modelines in a diff, they apply to the diffed file +setlocal nomodeline + +" If there are comments they start with # +let &l:commentstring = "# %s" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Diff Files (*.diff)\t*.diff\nPatch Files (*.patch)\t*.h\nAll Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif 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..f02f26b --- /dev/null +++ b/runtime/ftplugin/dosbatch.vim @@ -0,0 +1,48 @@ +" Vim filetype plugin file +" Language: MS-DOS/Windows .bat files +" Maintainer: Mike Williams <mrmrdubya@gmail.com> +" Last Change: 12th February 2023 +" +" Options Flags: +" dosbatch_colons_comment - any value to treat :: as comment line + +" 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 +if exists("dosbatch_colons_comment") + setlocal comments+=::: + setlocal commentstring=::\ %s +else + setlocal commentstring=REM\ %s +endif +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..6a53dfd --- /dev/null +++ b/runtime/ftplugin/dosini.vim @@ -0,0 +1,19 @@ +" Vim filetype plugin file +" Language: Configuration File (ini file) for MS-DOS/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..a046118 --- /dev/null +++ b/runtime/ftplugin/dtd.vim @@ -0,0 +1,42 @@ +" Vim filetype plugin file +" Language: dtd +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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/elixir.vim b/runtime/ftplugin/elixir.vim new file mode 100644 index 0000000..50f6367 --- /dev/null +++ b/runtime/ftplugin/elixir.vim @@ -0,0 +1,33 @@ +" Elixir filetype plugin +" Language: Elixir +" Maintainer: Mitchell Hanberg <vimNOSPAM@mitchellhanberg.com> +" Last Change: 2022 Sep 20 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&vim + +" Matchit support +if exists('loaded_matchit') && !exists('b:match_words') + let b:match_ignorecase = 0 + + let b:match_words = '\:\@<!\<\%(do\|fn\)\:\@!\>' . + \ ':' . + \ '\<\%(else\|catch\|after\|rescue\)\:\@!\>' . + \ ':' . + \ '\:\@<!\<end\>' . + \ ',{:},\[:\],(:)' +endif + +setlocal shiftwidth=2 softtabstop=2 expandtab iskeyword+=!,? +setlocal comments=:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = 'setlocal sw< sts< et< isk< com< cms<' + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/runtime/ftplugin/elm.vim b/runtime/ftplugin/elm.vim new file mode 100644 index 0000000..8c2de19 --- /dev/null +++ b/runtime/ftplugin/elm.vim @@ -0,0 +1,20 @@ +" Elm filetype plugin file +" Language: Elm +" Maintainer: Andreas Scharf <as@99n.de> +" Latest Revision: 2022-04-25 + +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 b:undo_ftplugin = "setl com< cms<" + +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..31fa0c3 --- /dev/null +++ b/runtime/ftplugin/erlang.vim @@ -0,0 +1,105 @@ +" 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-Nov-22 +" 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 + +if get(g:, 'erlang_extend_path', 1) + " typical erlang.mk paths + let &l:path = join([ + \ 'deps/*/include', + \ 'deps/*/src', + \ 'deps/*/test', + \ 'deps/*/apps/*/include', + \ 'deps/*/apps/*/src', + \ &g:path], ',') + " typical rebar3 paths + let &l:path = join([ + \ 'apps/*/include', + \ 'apps/*/src', + \ '_build/default/lib/*/src', + \ '_build/default/*/include', + \ &l:path], ',') + " typical erlang paths + let &l:path = join(['include', 'src', 'test', &l:path], ',') + + set wildignore+=*/.erlang.mk/*,*.beam +endif + +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..e67b00b --- /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: 2020 Jun 28 + +" 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/expect.vim b/runtime/ftplugin/expect.vim new file mode 100644 index 0000000..a4c6af9 --- /dev/null +++ b/runtime/ftplugin/expect.vim @@ -0,0 +1,24 @@ +" Vim filetype plugin file +" Language: Expect +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Jul 16 + +if exists("b:did_ftplugin") + finish +endif + +" Syntax is similar to Tcl +runtime! ftplugin/tcl.vim + +let s:cpo_save = &cpo +set cpo&vim + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Expect Command Files (*.exp)\t*.exp\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/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/fennel.vim b/runtime/ftplugin/fennel.vim new file mode 100644 index 0000000..2e50269 --- /dev/null +++ b/runtime/ftplugin/fennel.vim @@ -0,0 +1,18 @@ +" Vim filetype plugin file +" Language: Fennel +" Maintainer: Gregory Anders <greg[NOSPAM]@gpanders.com> +" Last Update: 2022 Apr 20 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=;%s +setlocal comments=:;;,:; +setlocal formatoptions-=t +setlocal suffixesadd=.fnl +setlocal lisp +setlocal lispwords=accumulate,collect,do,doto,each,eval-compiler,fn,for,icollect,lambda,let,macro,macros,match,match-try,when,while,with-open + +let b:undo_ftplugin = 'setlocal commentstring< comments< formatoptions< suffixesadd< lisp< lispwords<' diff --git a/runtime/ftplugin/fetchmail.vim b/runtime/ftplugin/fetchmail.vim new file mode 100644 index 0000000..032f661 --- /dev/null +++ b/runtime/ftplugin/fetchmail.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin file +" Language: fetchmail(1) RC File +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2022 Jun 30 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:# commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setl com< cms< fo<" + diff --git a/runtime/ftplugin/fish.vim b/runtime/ftplugin/fish.vim new file mode 100644 index 0000000..7acbf44 --- /dev/null +++ b/runtime/ftplugin/fish.vim @@ -0,0 +1,15 @@ +" Vim filetype plugin file +" Language: fish +" Maintainer: Nicholas Boyle (github.com/nickeb96) +" Repository: https://github.com/nickeb96/fish.vim +" Last Change: February 1, 2023 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal iskeyword=@,48-57,_,192-255,-,. +setlocal comments=:# +setlocal commentstring=#%s +setlocal formatoptions+=crjq 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..8f5b243 --- /dev/null +++ b/runtime/ftplugin/fortran.vim @@ -0,0 +1,142 @@ +" Vim settings file +" Language: Fortran 2008 (and older: Fortran 2003, 95, 90, 77, 66) +" Version: (v53) 2021 April 06 (updated 2022 May 22) +" 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, +" Doug Kearns, and Fritz Reese. + +" 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, + " but some vendor extensions allow longer lines + if exists("fortran_extended_line_length") + setlocal tw=132 + elseif exists("fortran_cardimage_line_length") + setlocal tw=80 + else + 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 + endif +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 s:nothash = '\%(^\s*#\s*\)\@<!' + let b:match_ignorecase = 1 + let b:match_words = + \ '(:),' . + \ '\<select\s*case\>:' . s:notselect. '\<case\>:\<end\s*select\>,' . + \ s:notelse . '\<if\s*(.\+)\s*then\>:' . + \ s:nothash . '\<else\s*\%(if\s*(.\+)\s*then\)\=\>:' . s:nothash . '\<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\>,'. + \ '\%(^\s*\)\@<=#\s*if\%(def\|ndef\)\=\>:\%(^\s*\)\@<=#\s*\%(elif\|else\)\>:\%(^\s*\)\@<=#\s*endif\>' +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/fpcmake.vim b/runtime/ftplugin/fpcmake.vim new file mode 100644 index 0000000..8d95083 --- /dev/null +++ b/runtime/ftplugin/fpcmake.vim @@ -0,0 +1,25 @@ +" Vim filetype plugin file +" Language: Free Pascal Makefile Generator +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Apr 23 + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +runtime! ftplugin/make.vim + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Free Pascal Makefile Definition Files (*.fpc)\t*.fpc\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = b:undo_ftplugin .. " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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..1680e84 --- /dev/null +++ b/runtime/ftplugin/freebasic.vim @@ -0,0 +1,81 @@ +" Vim filetype plugin file +" Language: FreeBASIC +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Jun 24 + +" Setup {{{1 +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +runtime! ftplugin/basic.vim + +let s:dialect = freebasic#GetDialect() + +" Comments {{{1 +" add ''comments before 'comments +let &l:comments = "sO:*\ -,mO:*\ \ ,exO:*/,s1:/',mb:',ex:'/,:''," .. &l:comments + +" Match words {{{1 +if exists("loaded_matchit") + let s:line_start = '\%(^\s*\)\@<=' + let s:not_end = '\%(end\s\+\)\@<!' + + let b:match_words ..= ',' + + if s:dialect == 'fb' + let b:match_words ..= s:not_end .. '\<constructor\>:\<end\s\+constructor\>,' .. + \ s:not_end .. '\<destructor\>:\<end\s\+destructor\>,' .. + \ s:not_end .. '\<property\>:\<end\s\+property\>,' .. + \ s:not_end .. '\<operator\>:\<end\s\+operator\>,' .. + \ s:not_end .. '\<extern\%(\s\+"\)\@=:\<end\s\+extern\>,' + endif + + if s:dialect == 'fb' || s:dialect == 'deprecated' + let b:match_words ..= s:not_end .. '\<scope\>:\<end\s\+scope\>,' + endif + + if s:dialect == 'qb' + let b:match_words ..= s:not_end .. '\<__asm\>:\<end\s\+__asm\>,' .. + \ s:not_end .. '\<__union\>:\<end\s\+__union\>,' .. + \ s:not_end .. '\<__with\>:\<end\s\+__with\>,' + else + let b:match_words ..= s:not_end .. '\<asm\>:\<end\s\+asm\>,' .. + \ s:not_end .. '\<namespace\>:\<end\s\+namespace\>,' .. + \ s:not_end .. '\<union\>:\<end\s\+union\>,' .. + \ s:not_end .. '\<with\>:\<end\s\+with\>,' + endif + + let b:match_words ..= s:not_end .. '\<enum\>:\<end\s\+enum\>,' .. + \ s:line_start .. '#\s*\%(if\|ifdef\|ifndef\)\>:' .. + \ s:line_start .. '#\s*\%(else\|elseif\)\>:' .. + \ s:line_start .. '#\s*endif\>,' .. + \ s:line_start .. '#\s*macro\>:' .. s:line_start .. '#\s*endmacro\>,' .. + \ "/':'/" + + " skip "function = <retval>" and "continue { do | for | while }" + if s:dialect == "qb" + let s:continue = "__continue" + else + let s:continue = "continue" + endif + let b:match_skip ..= ' || strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="' .. + \ ' || strpart(getline("."), 0, col(".") ) =~? "\\<' .. s:continue .. '\\s\\+"' + + unlet s:not_end s:line_start +endif + +if (has("gui_win32") || has("gui_gtk")) && exists("b:basic_set_browsefilter") + let b:browsefilter = "FreeBASIC Source Files (*.bas)\t*.bas\n" .. + \ "FreeBASIC Header Files (*.bi)\t*.bi\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +" Cleanup {{{1 +let &cpo = s:cpo_save +unlet s:cpo_save s:dialect + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: 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/gdscript.vim b/runtime/ftplugin/gdscript.vim new file mode 100644 index 0000000..93519d8 --- /dev/null +++ b/runtime/ftplugin/gdscript.vim @@ -0,0 +1,59 @@ +vim9script + +# Vim filetype plugin file +# Language: gdscript (Godot game engine scripting language) +# Maintainer: Maxim Kim <habamax@gmail.com> +# Website: https://github.com/habamax/vim-gdscript + +if exists("b:did_ftplugin") | finish | endif + +b:did_ftplugin = 1 +b:undo_ftplugin = 'setlocal cinkeys<' + \ .. '| setlocal indentkeys<' + \ .. '| setlocal commentstring<' + \ .. '| setlocal suffixesadd<' + \ .. '| setlocal foldexpr<' + \ .. '| setlocal foldignore<' + +setlocal cinkeys-=0# +setlocal indentkeys-=0# +setlocal suffixesadd=.gd +setlocal commentstring=#\ %s +setlocal foldignore= +setlocal foldexpr=GDScriptFoldLevel() + + +def GDScriptFoldLevel(): string + var line = getline(v:lnum) + if line =~? '^\s*$' + return "-1" + endif + + var sw = shiftwidth() + var indent = indent(v:lnum) / sw + var indent_next = indent(nextnonblank(v:lnum + 1)) / sw + + if indent_next > indent && line =~ ':\s*$' + return $">{indent_next}" + else + return $"{indent}" + endif +enddef + + +if !exists("g:no_plugin_maps") + # Next/Previous section + def NextSection(back: bool, cnt: number) + for n in range(cnt) + search('^\s*func\s', back ? 'bW' : 'W') + endfor + enddef + + nnoremap <silent><buffer> ]] <scriptcmd>NextSection(false, v:count1)<CR> + nnoremap <silent><buffer> [[ <scriptcmd>NextSection(true, v:count1)<CR> + xmap <buffer><expr> ]] $'<C-\><C-N>{v:count1}]]m>gv' + xmap <buffer><expr> [[ $'<C-\><C-N>{v:count1}[[m>gv' + b:undo_ftplugin ..= + \ " | silent exe 'unmap <buffer> [['" + \ .. " | silent exe 'unmap <buffer> ]]'" +endif diff --git a/runtime/ftplugin/gdshader.vim b/runtime/ftplugin/gdshader.vim new file mode 100644 index 0000000..809a005 --- /dev/null +++ b/runtime/ftplugin/gdshader.vim @@ -0,0 +1,13 @@ +vim9script + +# Vim filetype plugin file +# Language: Godot shading language +# Maintainer: Maxim Kim <habamax@gmail.com> +# Website: https://github.com/habamax/vim-gdscript + +if exists("b:did_ftplugin") | finish | endif +b:did_ftplugin = 1 + +b:undo_ftplugin = 'setlocal suffixesadd<' + +setlocal suffixesadd=.gdshader diff --git a/runtime/ftplugin/gitattributes.vim b/runtime/ftplugin/gitattributes.vim new file mode 100644 index 0000000..2025d00 --- /dev/null +++ b/runtime/ftplugin/gitattributes.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin +" Language: git attributes +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Sep 08 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=:# commentstring=#\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/runtime/ftplugin/gitcommit.vim b/runtime/ftplugin/gitcommit.vim new file mode 100644 index 0000000..9342799 --- /dev/null +++ b/runtime/ftplugin/gitcommit.vim @@ -0,0 +1,57 @@ +" Vim filetype plugin +" Language: git commit file +" Maintainer: Tim Pope <vimNOSPAM@tpope.org> +" Last Change: 2022 Jan 05 + +" Only do this when not done yet for this buffer +if (exists("b:did_ftplugin")) + finish +endif + +let b:did_ftplugin = 1 + +setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72 +setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q formatoptions+=n +setlocal formatlistpat+=\\\|^\\s*[-*+]\\s\\+ +setlocal include=^+++ +setlocal includeexpr=substitute(v:fname,'^[bi]/','','') + +let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms< formatlistpat< inc< inex<' + +let s:l = search('\C\m^[#;@!$%^&|:] -\{24,\} >8 -\{24,\}$', 'cnW', '', 100) +let &l:comments = ':' . (matchstr(getline(s:l ? s:l : '$'), '^[#;@!$%^&|:]\S\@!') . '#')[0] +let &l:commentstring = &l:comments[1] . ' %s' +unlet s:l + +if exists("g:no_gitcommit_commands") + finish +endif + +command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0, <f-args>) + +let b:undo_ftplugin = b:undo_ftplugin . "|delc DiffGitCached" + +function! s:diffcomplete(A, L, P) abort + 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 a:A !~ '^-' && !empty(getftype('.git')) + let args = args."\n".system("git diff --cached --name-only") + endif + return args +endfunction + +function! s:gitdiffcached(bang, ...) abort + let name = tempname() + if a:0 + let extra = join(map(copy(a:000), 'shellescape(v:val)')) + else + let extra = "-p --stat=".&columns + endif + call system("git diff --cached --no-color --no-ext-diff ".extra." > ".shellescape(name)) + exe "pedit " . fnameescape(name) + wincmd P + command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0, <f-args>) + 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/gitignore.vim b/runtime/ftplugin/gitignore.vim new file mode 100644 index 0000000..3502dd2 --- /dev/null +++ b/runtime/ftplugin/gitignore.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin +" Language: git ignore +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Sep 10 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=:# commentstring=#\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/runtime/ftplugin/gitrebase.vim b/runtime/ftplugin/gitrebase.vim new file mode 100644 index 0000000..143f86a --- /dev/null +++ b/runtime/ftplugin/gitrebase.vim @@ -0,0 +1,45 @@ +" Vim filetype plugin +" Language: git rebase --interactive +" Maintainer: Tim Pope <vimNOSPAM@tpope.org> +" Last Change: 2022 Jan 05 + +" Only do this when not done yet for this buffer +if (exists("b:did_ftplugin")) + finish +endif + +let b:did_ftplugin = 1 + +let &l:comments = ':' . (matchstr(getline('$'), '^[#;@!$%^&|:]\S\@!') . '#')[0] +let &l:commentstring = &l:comments[1] . ' %s' +setlocal formatoptions-=t +setlocal nomodeline +let 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> <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> <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..d8974bc --- /dev/null +++ b/runtime/ftplugin/gprof.vim @@ -0,0 +1,36 @@ +" Language: gprof +" Maintainer: Dominique Pelle <dominique.pelle@gmail.com> +" Contributors: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Sep 19 + +" 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 + +func! <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 +endfunc + +if !exists("no_plugin_maps") && !exists("no_gprof_maps") + " 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> + let b:undo_ftplugin = "silent! unmap <buffer> <C-]>" +endif + +" 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/gyp.vim b/runtime/ftplugin/gyp.vim new file mode 100644 index 0000000..becfcad --- /dev/null +++ b/runtime/ftplugin/gyp.vim @@ -0,0 +1,14 @@ +" Vim filetype plugin +" Language: GYP +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Sep 27 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal formatoptions-=t +setlocal commentstring=#\ %s comments=b:#,fb:- + +let b:undo_ftplugin = 'setlocal fo< cms< com<' 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/hare.vim b/runtime/ftplugin/hare.vim new file mode 100644 index 0000000..bb10daf --- /dev/null +++ b/runtime/ftplugin/hare.vim @@ -0,0 +1,27 @@ +" Vim filetype plugin +" Language: Hare +" Maintainer: Amelia Clarke <me@rsaihe.dev> +" Previous Maintainer: Drew DeVault <sir@cmpwn.com> +" Last Updated: 2022-09-21 + +" 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 noexpandtab +setlocal tabstop=8 +setlocal shiftwidth=0 +setlocal softtabstop=0 +setlocal textwidth=80 +setlocal commentstring=//\ %s + +" 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 + +compiler hare +" vim: tabstop=2 shiftwidth=2 expandtab 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/heex.vim b/runtime/ftplugin/heex.vim new file mode 100644 index 0000000..5274d59 --- /dev/null +++ b/runtime/ftplugin/heex.vim @@ -0,0 +1,16 @@ +" Elixir filetype plugin +" Language: HEEx +" Maintainer: Mitchell Hanberg <vimNOSPAM@mitchellhanberg.com> +" Last Change: 2022 Sep 21 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal shiftwidth=2 softtabstop=2 expandtab + +setlocal comments=:<%!-- +setlocal commentstring=<%!--\ %s\ --%> + +let b:undo_ftplugin = 'set sw< sts< et< com< cms<' 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..94cb626 --- /dev/null +++ b/runtime/ftplugin/html.vim @@ -0,0 +1,55 @@ +" Vim filetype plugin file +" Language: HTML +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Changed: 2022 Jul 20 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo-=C + +setlocal matchpairs+=<:> +setlocal commentstring=<!--%s--> +setlocal comments=s:<!--,m:\ \ \ \ ,e:--> + +let b:undo_ftplugin = "setlocal comments< commentstring< matchpairs<" + +if get(g:, "ft_html_autocomment", 0) + setlocal formatoptions-=t formatoptions+=croql + let b:undo_ftplugin ..= " | setlocal formatoptions<" +endif + +if exists('&omnifunc') + setlocal omnifunc=htmlcomplete#CompleteTags + call htmlcomplete#DetectOmniFlavor() + let b:undo_ftplugin ..= " | setlocal omnifunc<" +endif + +" HTML: thanks to Johannes Zellner and Benji Fisher. +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 1 + let b:match_words = '<!--:-->,' .. + \ '<:>,' .. + \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .. + \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .. + \ '<\@<=\([^/!][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' + let b:html_set_match_words = 1 + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:html_set_match_words" +endif + +" Change the :browse e filter to primarily show HTML-related files. +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + 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" + let b:html_set_browsefilter = 1 + let b:undo_ftplugin ..= " | unlet! b:browsefilter b:html_set_browsefilter" +endif + +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/i3config.vim b/runtime/ftplugin/i3config.vim new file mode 100644 index 0000000..4204510 --- /dev/null +++ b/runtime/ftplugin/i3config.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin file +" Language: i3 config file +" Original Author: Mohamed Boughaba <mohamed dot bgb at gmail dot com> +" Maintainer: Quentin Hibon +" Version: 0.4 +" Last Change: 2021 Dec 14 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setlocal cms<" + +setlocal commentstring=#\ %s diff --git a/runtime/ftplugin/icon.vim b/runtime/ftplugin/icon.vim new file mode 100644 index 0000000..33a86df --- /dev/null +++ b/runtime/ftplugin/icon.vim @@ -0,0 +1,36 @@ +" Vim filetype plugin file +" Language: Icon +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Jun 16 + +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 + +let b:undo_ftplugin = "setl fo< com< cms<" + +if exists("loaded_matchit") + " let b:match_ignorecase = 0 + let b:match_words = '^\s*$\s*if\(def\|ndef\)\=\>:^\s*$\s*elif\>:^\s*$\s*else\>:^\s*$\s*endif\>,' . + \ '\<procedure\>:\<\%(initial\|return\|suspend\|fail\)\>:\<end\>' + let b:undo_ftplugin ..= " | unlet! b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Icon Source Files (*.icn)\t*.icn\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 diff --git a/runtime/ftplugin/indent.vim b/runtime/ftplugin/indent.vim new file mode 100644 index 0000000..64a650a --- /dev/null +++ b/runtime/ftplugin/indent.vim @@ -0,0 +1,21 @@ +" Vim filetype plugin file +" Language: indent(1) configuration file +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" 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..ae235ab --- /dev/null +++ b/runtime/ftplugin/j.vim @@ -0,0 +1,83 @@ +" Vim filetype plugin +" Language: J +" Maintainer: David Bürgin <dbuergin@gluet.ch> +" URL: https://gitlab.com/glts/vim-j +" Last Change: 2022-08-06 + +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. +if !exists('no_plugin_maps') && !exists('no_j_maps') + 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> []"' +endif + +" Browse dialog filter on Windows and GTK (see ":help browsefilter") +if (has('gui_win32') || has('gui_gtk')) && !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..74c8e8d --- /dev/null +++ b/runtime/ftplugin/java.vim @@ -0,0 +1,53 @@ +" Vim filetype plugin file +" Language: Java +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2012 Mar 11 + +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/jsonc.vim b/runtime/ftplugin/jsonc.vim new file mode 100644 index 0000000..e47a75f --- /dev/null +++ b/runtime/ftplugin/jsonc.vim @@ -0,0 +1,21 @@ +" Vim filetype plugin +" Language: JSONC (JSON with Comments) +" Original Author: Izhak Jakov <izhak724@gmail.com> +" Acknowledgement: Based off of vim-jsonc maintained by Kevin Locke <kevin@kevinlocke.name> +" https://github.com/kevinoid/vim-jsonc +" License: MIT +" Last Change: 2021 Nov 22 + +runtime! ftplugin/json.vim + +if exists('b:did_ftplugin_jsonc') + finish +else + let b:did_ftplugin_jsonc = 1 +endif + +" Set comment (formatting) related options. {{{1 +setlocal commentstring=//%s comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// + +" Let Vim know how to disable the plug-in. +let b:undo_ftplugin = 'setlocal commentstring< comments<' diff --git a/runtime/ftplugin/jsonnet.vim b/runtime/ftplugin/jsonnet.vim new file mode 100644 index 0000000..1e621e1 --- /dev/null +++ b/runtime/ftplugin/jsonnet.vim @@ -0,0 +1,17 @@ +" Vim filetype plugin +" Language: Jsonnet +" Maintainer: Cezary Drożak <cezary@drozak.net> +" URL: https://github.com/google/vim-jsonnet +" Last Change: 2022-09-08 + +" 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 commentstring=//\ %s + +let b:undo_ftplugin = "setlocal commentstring<" diff --git a/runtime/ftplugin/jsp.vim b/runtime/ftplugin/jsp.vim new file mode 100644 index 0000000..18136cc --- /dev/null +++ b/runtime/ftplugin/jsp.vim @@ -0,0 +1,69 @@ +" Vim filetype plugin file +" Language: jsp +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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/julia.vim b/runtime/ftplugin/julia.vim new file mode 100644 index 0000000..b65cf99 --- /dev/null +++ b/runtime/ftplugin/julia.vim @@ -0,0 +1,92 @@ +" Vim filetype plugin file +" Language: Julia +" Maintainer: Carlo Baldassi <carlobaldassi@gmail.com> +" Homepage: https://github.com/JuliaEditorSupport/julia-vim +" Last Change: 2021 Aug 04 +" adapted from upstream 2021 Aug 4 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo-=C + +setlocal include=^\\s*\\%(reload\\\|include\\)\\> +setlocal suffixesadd=.jl +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal cinoptions+=#1 +setlocal define=^\\s*macro\\> +setlocal fo-=t fo+=croql + +let b:julia_vim_loaded = 1 + +let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<" + \ . " define< fo< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< completefunc<" + \ . " | unlet! b:julia_vim_loaded" + +" MatchIt plugin support +if exists("loaded_matchit") + let b:match_ignorecase = 0 + + " note: begin_keywords must contain all blocks, in order + " for nested-structures-skipping to work properly + " note: 'mutable struct' and 'struct' are defined separately because + " using \? puts the cursor on 'struct' instead of 'mutable' for some reason + let b:julia_begin_keywords = '\%(\.\s*\|@\)\@<!\<\%(function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|let\|do\|\%(bare\)\?module\|quote\|if\|for\|while\|try\)\>' + " note: the following regex not only recognizes macros, but also local/global keywords. + " the purpose is recognizing things like `@inline myfunction()` + " or `global myfunction(...)` etc, for matchit and block movement functionality + let s:macro_regex = '\%(@\%([#(]\@!\S\)\+\|\<\%(local\|global\)\)\s\+' + let s:nomacro = '\%(' . s:macro_regex . '\)\@<!' + let s:yesmacro = s:nomacro . '\%('. s:macro_regex . '\)\+' + let b:julia_begin_keywordsm = '\%(' . s:yesmacro . b:julia_begin_keywords . '\)\|' + \ . '\%(' . s:nomacro . b:julia_begin_keywords . '\)' + let b:julia_end_keywords = '\<end\>' + + " note: this function relies heavily on the syntax file + function! JuliaGetMatchWords() + let [l,c] = [line('.'),col('.')] + let attr = synIDattr(synID(l, c, 1),"name") + let c1 = c + while attr == 'juliaMacro' || expand('<cword>') =~# '\<\%(global\|local\)\>' + normal! W + if line('.') > l || col('.') == c1 + call cursor(l, c) + return '' + endif + let attr = synIDattr(synID(l, col('.'), 1),"name") + let c1 = col('.') + endwhile + call cursor(l, c) + if attr == 'juliaConditional' + return b:julia_begin_keywordsm . ':\<\%(elseif\|else\)\>:' . b:julia_end_keywords + elseif attr =~# '\<\%(juliaRepeat\|juliaRepKeyword\)\>' + return b:julia_begin_keywordsm . ':\<\%(break\|continue\)\>:' . b:julia_end_keywords + elseif attr == 'juliaBlKeyword' + return b:julia_begin_keywordsm . ':' . b:julia_end_keywords + elseif attr == 'juliaException' + return b:julia_begin_keywordsm . ':\<\%(catch\|finally\)\>:' . b:julia_end_keywords + endif + return '\<\>:\<\>' + endfunction + + let b:match_words = 'JuliaGetMatchWords()' + + " we need to skip everything within comments, strings and + " the 'begin' and 'end' keywords when they are used as a range rather than as + " the delimiter of a block + let b:match_skip = 'synIDattr(synID(line("."),col("."),0),"name") =~# ' + \ . '"\\<julia\\%(Comprehension\\%(For\\|If\\)\\|RangeKeyword\\|Comment\\%([LM]\\|Delim\\)\\|\\%([bs]\\|Shell\\|Printf\\|Doc\\)\\?String\\|StringPrefixed\\|DocStringM\\(Raw\\)\\?\\|RegEx\\|SymbolS\\?\\|Dotted\\)\\>"' + + let b:undo_ftplugin = b:undo_ftplugin + \ . " | unlet! b:match_words b:match_skip b:match_ignorecase" + \ . " | unlet! b:julia_begin_keywords b:julia_end_keywords" + \ . " | delfunction JuliaGetMatchWords" + +endif + +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..f24ec4c --- /dev/null +++ b/runtime/ftplugin/liquid.vim @@ -0,0 +1,61 @@ +" Vim filetype plugin +" Language: Liquid +" Maintainer: Tim Pope <vimNOSPAM@tpope.org> +" Last Change: 2022 Mar 15 + +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..db3ac96 --- /dev/null +++ b/runtime/ftplugin/lisp.vim @@ -0,0 +1,24 @@ +" 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: Mar 10, 2021 + +" 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=:;;;;,:;;;,:;;,:;,sr:#\|,mb:\|,ex:\|# +setl define=^\\s*(def\\k* +setl formatoptions-=t +setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94 +setl lisp +setl commentstring=;%s + +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..9c1be11 --- /dev/null +++ b/runtime/ftplugin/logcheck.vim @@ -0,0 +1,17 @@ +" Vim filetype plugin file +" Language: Logcheck +" Maintainer: Debian Vim Maintainers +" Last Change: 2023 Jan 16 +" License: Vim License +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/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..88b1fc9 --- /dev/null +++ b/runtime/ftplugin/lua.vim @@ -0,0 +1,49 @@ +" Vim filetype plugin file. +" Language: Lua +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Max Ischenko <mfi@ukr.net> +" Contributor: Dorai Sitaram <ds26@gte.com> +" C.D. MacEachern <craig.daniel.maceachern@gmail.com> +" Last Change: 2022 Nov 19 + +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 + +let &l:define = '\<function\|\<local\%(\s\+function\)\=' + +" TODO: handle init.lua +setlocal includeexpr=tr(v:fname,'.','/') +setlocal suffixesadd=.lua + +let b:undo_ftplugin = "setlocal cms< com< def< fo< inex< sua<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 0 + let b:match_words = + \ '\<\%(do\|function\|if\)\>:' .. + \ '\<\%(return\|else\|elseif\)\>:' .. + \ '\<end\>,' .. + \ '\<repeat\>:\<until\>,' .. + \ '\%(--\)\=\[\(=*\)\[:]\1]' + let b:undo_ftplugin ..= " | unlet! b:match_words b:match_ignorecase" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Lua Source Files (*.lua)\t*.lua\n" .. + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/lynx.vim b/runtime/ftplugin/lynx.vim new file mode 100644 index 0000000..b76c69f --- /dev/null +++ b/runtime/ftplugin/lynx.vim @@ -0,0 +1,29 @@ +" Vim filetype plugin file +" Language: Lynx Web Browser Configuration +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Sep 09 + +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 + +let b:undo_ftplugin = "setl cms< com< fo<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Lynx Configuration Files (lynx.cfg .lynxrc)\tlynx.cfg;.lynxrc\n" .. + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/m3build.vim b/runtime/ftplugin/m3build.vim new file mode 100644 index 0000000..c910eae --- /dev/null +++ b/runtime/ftplugin/m3build.vim @@ -0,0 +1,23 @@ +" Vim filetype plugin file +" Language: Modula-3 Makefile +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 June 12 + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +runtime! ftplugin/m3quake.vim + +if (has("gui_win32") || has("gui_gtk")) && exists("b:m3quake_set_browsefilter") + let b:browsefilter = "Modula-3 Makefile (m3makefile m3overrides)\tm3makefile;m3overrides\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/m3quake.vim b/runtime/ftplugin/m3quake.vim new file mode 100644 index 0000000..7762875 --- /dev/null +++ b/runtime/ftplugin/m3quake.vim @@ -0,0 +1,35 @@ +" Vim filetype plugin file +" Language: Modula-3 Quake +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 June 12 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=s1:/*,mb:*,ex:*/,:% +setlocal commentstring=%\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setl fo< com< cms<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = '\<\%(proc\|if\|foreach\)\>:\<else\>:\<end\>' + let b:undo_ftplugin ..= " | unlet! b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-3 Quake Source Files (*.quake)\t*.quake\n" .. + \ "All Files (*.*)\t*.*\n" + let b:m3quake_set_browsefilter = 1 + let b:undo_ftplugin ..= " | unlet! b:browsefilter b:m3quake_set_browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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..f120223 --- /dev/null +++ b/runtime/ftplugin/mail.vim @@ -0,0 +1,46 @@ +" Vim filetype plugin file +" Language: Mail +" Maintainer: Bram Moolenaar <Bram@vim.org> +" Last Change: 2021 Oct 23 + +" 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:> + +" .eml files are universally formatted with DOS line-endings, per RFC5322. +" If the file was not DOS the it will be marked as changed, which is probably +" a good thing. +if expand('%:e') ==? 'eml' + let b:undo_ftplugin ..= " fileformat=" .. &fileformat + setlocal fileformat=dos +endif + +" 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..7d59eab --- /dev/null +++ b/runtime/ftplugin/man.vim @@ -0,0 +1,69 @@ +" Vim filetype plugin file +" Language: man +" Maintainer: Jason Franklin <vim@justemail.net> +" Maintainer: SungHyun Nam <goweol@gmail.com> +" Autoload Split: Bram Moolenaar +" Last Change: 2022 Sep 30 + +" 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 define ":Man" and not +" to do the filetype plugin stuff. +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 hyphen, plus, colon, dot, and commercial at in manual page name. + " Allow parentheses for references. + setlocal iskeyword=48-57,_,a-z,A-Z,-,+,:,.,@-@,(,) + 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 dist#man#PreGetPage(v:count)<CR> + nnoremap <buffer> <silent> <c-t> :call dist#man#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 dist#man#GetPage(<q-mods>, <f-args>) + nmap <Leader>K :call dist#man#PreGetPage(0)<CR> + nmap <Plug>ManPreGetPage :call dist#man#PreGetPage(0)<CR> +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..2b963f1 --- /dev/null +++ b/runtime/ftplugin/markdown.vim @@ -0,0 +1,92 @@ +" Vim filetype plugin +" Language: Markdown +" Maintainer: Tim Pope <https://github.com/tpope/vim-markdown> +" Last Change: 2022 Oct 13 + +if exists("b:did_ftplugin") + finish +endif + +runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim + +let s:keepcpo= &cpo +set cpo&vim + +setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--%s--> +setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o +setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:\\&^.\\{4\\} + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= "|setl cms< com< fo< flp< et< ts< sts< sw<" +else + let b:undo_ftplugin = "setl cms< com< fo< flp< et< ts< sts< sw<" +endif + +if get(g:, 'markdown_recommended_style', 1) + setlocal expandtab tabstop=4 softtabstop=4 shiftwidth=4 +endif + +if !exists("g:no_plugin_maps") && !exists("g:no_markdown_maps") + nnoremap <silent><buffer> [[ :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR> + nnoremap <silent><buffer> ]] :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR> + xnoremap <silent><buffer> [[ :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR> + xnoremap <silent><buffer> ]] :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR> + let b:undo_ftplugin .= '|sil! nunmap <buffer> [[|sil! nunmap <buffer> ]]|sil! xunmap <buffer> [[|sil! xunmap <buffer> ]]' +endif + +function! s:NotCodeBlock(lnum) abort + return synIDattr(synID(a: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") && get(g:, "markdown_folding", 0) + setlocal foldexpr=MarkdownFold() + setlocal foldmethod=expr + setlocal foldtext=MarkdownFoldText() + let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<" +endif + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim:set sw=2: diff --git a/runtime/ftplugin/masm.vim b/runtime/ftplugin/masm.vim new file mode 100644 index 0000000..ab196eb --- /dev/null +++ b/runtime/ftplugin/masm.vim @@ -0,0 +1,32 @@ +" Vim filetype plugin file +" Language: Microsoft Macro Assembler (80x86) +" Maintainer: Wu Yongwei <wuyongwei@gmail.com> +" Last Change: 2022-04-24 21:24:52 +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,@-@ + +" Matchit support +if !exists('b:match_words') + let b:match_words = '^\s*\.IF\>:^\s*\.ELSEIF\>:^\s*\.ELSE\>:^\s*\.ENDIF\>,' + \ .. '^\s*\.REPEAT\>:^\s*\.UNTIL\(CXZ\)\?\>,' + \ .. '^\s*\.WHILE\>:^\s*\.ENDW\>,' + \ .. '^\s*IF\(1\|2\|E\|DEF\|NDEF\|B\|NB\|IDNI\?\|DIFI\?\)\?\>:^\s*ELSEIF\(1\|2\|E\|DEF\|NDEF\|B\|NB\|IDNI\?\|DIFI\?\)\?\>:^\s*ELSE\>:^\s*ENDIF\>,' + \ .. '\(\<MACRO\>\|^\s*%\?\s*FORC\?\>\|^\s*REPEAT\>\|^\s*WHILE\):^\s*ENDM\>,' + \ .. '\<PROC\>:\<ENDP\>,' + \ .. '\<SEGMENT\>:\<ENDS\>' + let b:match_ignorecase = 1 + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" +endif + +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..d3c74b4 --- /dev/null +++ b/runtime/ftplugin/matlab.vim @@ -0,0 +1,34 @@ +" Vim filetype plugin file +" Language: matlab +" Maintainer: Jake Wasserman <jwasserman at gmail dot com> +" Update By: Gabriel Dupras +" Last Change: 2021 Aug 30 + +" 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 = '\%(\%(^\|;\)\s*\)\@<=end\>' + let b:match_words= + \ '\<\%(if\|switch\|for\|while\|try\)\>:\<\%(elseif\|case\|break\|continue\|else\|otherwise\|catch\)\>:' . 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/mermaid.vim b/runtime/ftplugin/mermaid.vim new file mode 100644 index 0000000..fe84ab3 --- /dev/null +++ b/runtime/ftplugin/mermaid.vim @@ -0,0 +1,49 @@ +" Vim filetype plugin +" Language: Mermaid +" Maintainer: Craig MacEachern <https://github.com/craigmac/vim-mermaid> +" Last Change: 2022 Oct 13 + +if exists("b:did_ftplugin") + finish +endif + +let s:keepcpo= &cpo +set cpo&vim + +" Use mermaid live editor's style +setlocal expandtab +setlocal shiftwidth=2 +setlocal softtabstop=-1 +setlocal tabstop=4 + +" TODO: comments, formatlist stuff, based on what? +setlocal comments=b:#,fb:- +setlocal commentstring=#\ %s +setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o +setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:\\&^.\\{4\\} + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= "|setl cms< com< fo< flp< et< ts< sts< sw<" +else + let b:undo_ftplugin = "setl cms< com< fo< flp< et< ts< sts< sw<" +endif + +if !exists("g:no_plugin_maps") && !exists("g:no_markdown_maps") + nnoremap <silent><buffer> [[ :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR> + nnoremap <silent><buffer> ]] :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR> + xnoremap <silent><buffer> [[ :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR> + xnoremap <silent><buffer> ]] :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR> + let b:undo_ftplugin .= '|sil! nunmap <buffer> [[|sil! nunmap <buffer> ]]|sil! xunmap <buffer> [[|sil! xunmap <buffer> ]]' +endif + +" if has("folding") && get(g:, "markdown_folding", 0) +" setlocal foldexpr=MarkdownFold() +" setlocal foldmethod=expr +" setlocal foldtext=MarkdownFoldText() +" let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<" +" endif + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim:set sw=2: diff --git a/runtime/ftplugin/meson.vim b/runtime/ftplugin/meson.vim new file mode 100644 index 0000000..1ce9a03 --- /dev/null +++ b/runtime/ftplugin/meson.vim @@ -0,0 +1,39 @@ +" Vim filetype plugin file +" Language: meson +" License: VIM License +" Maintainer: Liam Beguin <liambeguin@gmail.com> +" 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 formatoptions+=croql formatoptions-=t + +let b:undo_ftplugin = "setl com< cms< fo<" + +if get(g:, "meson_recommended_style", 1) + setlocal expandtab + setlocal shiftwidth=2 + setlocal softtabstop=2 + let b:undo_ftplugin .= " | setl et< sts< sw<" +endif + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = '\<if\>:\<elif\>:\<else\>:\<endif\>,' . + \ '\<foreach\>:\<break\>:\<continue\>:\<endforeach\>' + let b:undo_ftplugin .= " | unlet! b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Meson Build Files (meson.build)\tmeson.build\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +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..5c8c571 --- /dev/null +++ b/runtime/ftplugin/mf.vim @@ -0,0 +1,82 @@ +vim9script + +# Vim filetype plugin file +# Language: METAFONT +# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> +# Former Maintainers: Nikolai Weibull <now@bitwi.se> +# Latest Revision: 2022 Aug 12 + +if exists("b:did_ftplugin") + finish +endif + +b:did_ftplugin = 1 +b:undo_ftplugin = "setl com< cms< fo< sua< inc< def< ofu<" + +setlocal comments=:% +setlocal commentstring=%\ %s +setlocal formatoptions+=cjroql2 +setlocal formatoptions-=t +setlocal omnifunc=syntaxcomplete#Complete +setlocal suffixesadd=.mf + +&l:include = '\<input\>' +&l:define = '\<\%(let\|newinternal\|interim\|def\|vardef\)\>\|\<\%(primary\|secondary\|tertiary\)def\>\s*[^ .]\+' + +g:omni_syntax_group_include_mf = 'mf\w\+' +g:omni_syntax_group_exclude_mf = 'mfTodoComment' + +if exists("g:loaded_matchit") && !exists("b:match_words") + b:match_ignorecase = 0 + b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name") =~# "mf\\(Comment\\|String\\)$"' + 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\>' + b:undo_ftplugin ..= "| unlet! b:match_ignorecase b:match_words b:match_skip" +endif + +if !get(g:, 'no_mf_maps', 0) && !get(g:, 'no_plugin_maps', 0) + const mf_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\)\>'} + + def MoveAround(count: number, what: string, flags: string) + search(mf_regex[what], flags .. 's') # 's' sets previous context mark + var i = 2 + while i <= count + search(mf_regex[what], flags) + i += 1 + endwhile + enddef + + # Macros to move around + nnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr> + vnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr> + nnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr> + vnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr> + nnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr> + vnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr> + nnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr> + vnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr> + nnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr> + vnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr> + nnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr> + vnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr> + + for mapping in ["[[", "]]", "[]", "][", "[{", "]}"] + b:undo_ftplugin ..= printf(" | silent! execute 'nunmap <buffer> %s'", mapping) + b:undo_ftplugin ..= printf(" | silent! execute 'vunmap <buffer> %s'", mapping) + endfor +endif + +if (has('gui_win32') || has('gui_gtk')) && !exists('b:browsefilter') + b:browsefilter = "METAFONT Source Files (*.mf)\t*.mf\n" + .. "All Files (*.*)\t*.*\n" + b:undo_ftplugin ..= ' | unlet! b:browsefilter' +endif + +# vim: sw=2 fdm=marker 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/modula2.vim b/runtime/ftplugin/modula2.vim new file mode 100644 index 0000000..1d0e81e --- /dev/null +++ b/runtime/ftplugin/modula2.vim @@ -0,0 +1,39 @@ +" Vim filetype plugin file +" Language: Modula-2 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Apr 08 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=s0:(*,mb:\ ,ex:*) +setlocal commentstring=(*%s*) +setlocal formatoptions-=t formatoptions+=croql + +if exists("loaded_matchit") && !exists("b:match_words") + " The second branch of the middle pattern is intended to match CASE labels + let b:match_words = '\<REPEAT\>:\<UNTIL\>,' .. + \ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOOP\|WHILE\|WITH\)\>' .. + \ ':' .. + \ '\<\%(ELSIF\|ELSE\)\>\|\%(^\s*\)\@<=\w\+\%(\s*\,\s*\w\+\)\=\s*\:=\@!' .. + \ ':' .. + \ '\<END\>' +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-2 Source Files (*.def *.mod)\t*.def;*.mod\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl com< cms< fo< " .. + \ "| unlet! b:browsefilter b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/modula3.vim b/runtime/ftplugin/modula3.vim new file mode 100644 index 0000000..1f8ab35 --- /dev/null +++ b/runtime/ftplugin/modula3.vim @@ -0,0 +1,42 @@ +" Vim filetype plugin file +" Language: Modula-3 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 June 12 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=s0:(*,mb:\ ,ex:*) +setlocal commentstring=(*%s*) +setlocal formatoptions-=t formatoptions+=croql +setlocal suffixesadd+=.m3 +setlocal formatprg=m3pp + +let b:undo_ftplugin = "setlocal com< cms< fo< fp< sua<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = '\<REPEAT\>:\<UNTIL\>,' .. + \ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOCK\|LOOP\|TRY\|TYPECASE\|WHILE\|WITH\|RECORD\|OBJECT\)\>' .. + \ ':' .. + \ '\<\%(ELSIF\|ELSE\|EXCEPT\|FINALLY\|METHODS\|OVERRIDES\)\>\|\%(^\s*\)\@<=\S.*=>' .. + \ ':' .. + \ '\<END\>,' .. + \ '(\*:\*),<\*:\*>' + let b:undo_ftplugin ..= " | unlet! b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-3 Source Files (*.m3)\t*.m3\n" .. + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/mp.vim b/runtime/ftplugin/mp.vim new file mode 100644 index 0000000..bc5116e --- /dev/null +++ b/runtime/ftplugin/mp.vim @@ -0,0 +1,91 @@ +vim9script + +# Vim filetype plugin file +# Language: MetaPost +# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> +# Former Maintainers: Nikolai Weibull <now@bitwi.se> +# Latest Revision: 2022 Aug 12 + +if exists("b:did_ftplugin") + finish +endif + +b:did_ftplugin = 1 +b:undo_ftplugin = "setl com< cms< fo< sua< inc< def< ofu<" + +setlocal comments=:% +setlocal commentstring=%\ %s +setlocal formatoptions+=cjroql2 +setlocal formatoptions-=t +setlocal omnifunc=syntaxcomplete#Complete +setlocal suffixesadd=.mp,.mpiv,.mpvi,.mpxl + +&l:include = '\<\%(input\|loadmodule\)\>' # loadmodule is from MetaFun +&l:define = '\<\%(let\|newinternal\|interim\|def\|vardef\)\>\|\<\%(primary\|secondary\|tertiary\)def\>\s*[^ .]\+' + +g:omni_syntax_group_include_mp = 'mf\w\+,mp\w\+,metafun\w\+' +g:omni_syntax_group_exclude_mp = 'mfTodoComment' + +var fignum: number + +def FixBeginfigs() + fignum = 1 + g/^\s*beginfig(\d*)\s*;\(\s*%.*\)\=$/s/^.\{-};/\='beginfig(' .. fignum .. ');'/ | ++fignum +enddef + +command! -buffer -nargs=0 -bar FixBeginfigs FixBeginfigs() + +if exists("g:loaded_matchit") && !exists("b:match_words") + b:match_ignorecase = 0 + b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name") =~# "^mf\\%(Comment\\|String\\|\\)$\\|^mpTeXinsert$"' + b:match_words = '\<if\>:\<else\%[if]\>:\<fi\>,' + .. '\<for\%(\|suffixes\|ever\)\>:\<exit\%(if\|unless\)\>:\<endfor\>,' + .. '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,' + .. '\<begin\(\a\+\)\>:end\1,' + .. '\<beginlogochar\>:\<endchar\>' + b:undo_ftplugin ..= "| unlet! b:match_ignorecase b:match_words b:match_skip" +endif + +if !get(g:, 'no_mp_maps', 0) && !get(g:, 'no_plugin_maps', 0) + const 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\)\>'} + + def MoveAround(count: number, what: string, flags: string) + search(mp_regex[what], flags .. 's') # 's' sets previous context mark + var i = 2 + while i <= count + search(mp_regex[what], flags) + i += 1 + endwhile + enddef + + # Macros to move around + nnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr> + vnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr> + nnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr> + vnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr> + nnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr> + vnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr> + nnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr> + vnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr> + nnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr> + vnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr> + nnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr> + vnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr> + + for mapping in ["[[", "]]", "[]", "][", "[{", "]}"] + b:undo_ftplugin ..= printf(" | silent! execute 'nunmap <buffer> %s'", mapping) + b:undo_ftplugin ..= printf(" | silent! execute 'vunmap <buffer> %s'", mapping) + endfor +endif + +if (has('gui_win32') || has('gui_gtk')) && !exists('b:browsefilter') + b:browsefilter = "MetaPost Source Files (*.mp)\t*.mp\n" + .. "All Files (*.*)\t*.*\n" + b:undo_ftplugin ..= ' | unlet! b:browsefilter' +endif + +# vim: sw=2 fdm=marker 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/nginx.vim b/runtime/ftplugin/nginx.vim new file mode 100644 index 0000000..e808db1 --- /dev/null +++ b/runtime/ftplugin/nginx.vim @@ -0,0 +1,6 @@ +" Vim filetype plugin +" Language: nginx.conf +" Maintainer: Chris Aumann <me@chr4.org> +" Last Change: Apr 15, 2017 + +setlocal commentstring=#\ %s 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..3dc0d63 --- /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: 2021-10-18 + +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<" + +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\>' + let b:undo_ftplugin .= " | unlet! b:match_ignorecase b:match_words" +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/obse.vim b/runtime/ftplugin/obse.vim new file mode 100644 index 0000000..6d865f0 --- /dev/null +++ b/runtime/ftplugin/obse.vim @@ -0,0 +1,70 @@ +" Vim filetype plugin file +" Language: Oblivion Language (obl) +" Original Creator: Kat <katisntgood@gmail.com> +" Maintainer: Kat <katisntgood@gmail.com> +" Created: August 08, 2021 +" Last Change: 13 November 2022 + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +let b:undo_ftplugin = "setl com< cms<" + +noremap <script> <buffer> <silent> [[ <nop> +noremap <script> <buffer> <silent> ]] <nop> + +noremap <script> <buffer> <silent> [] <nop> +noremap <script> <buffer> <silent> ][ <nop> + +setlocal commentstring=;%s +setlocal comments=:; + +function s:NextSection(type, backwards, visual) + if a:visual + normal! gv + endif + + if a:type == 1 + let pattern = '\v(\n\n^\S|%^)' + let flags = 'e' + elseif a:type == 2 + let pattern = '\v^\S.*' + let flags = '' + endif + + if a:backwards + let dir = '?' + else + let dir = '/' + endif + + execute 'silent normal! ' . dir . pattern . dir . flags . "\r" +endfunction + +noremap <script> <buffer> <silent> ]] + \ :call <SID>NextSection(1, 0, 0)<cr> + +noremap <script> <buffer> <silent> [[ + \ :call <SID>NextSection(1, 1, 0)<cr> + +noremap <script> <buffer> <silent> ][ + \ :call <SID>NextSection(2, 0, 0)<cr> + +noremap <script> <buffer> <silent> [] + \ :call <SID>NextSection(2, 1, 0)<cr> + +vnoremap <script> <buffer> <silent> ]] + \ :<c-u>call <SID>NextSection(1, 0, 1)<cr> +vnoremap <script> <buffer> <silent> [[ + \ :<c-u>call <SID>NextSection(1, 1, 1)<cr> +vnoremap <script> <buffer> <silent> ][ + \ :<c-u>call <SID>NextSection(2, 0, 1)<cr> +vnoremap <script> <buffer> <silent> [] + \ :<c-u>call <SID>NextSection(2, 1, 1)<cr> + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/ocaml.vim b/runtime/ftplugin/ocaml.vim new file mode 100644 index 0000000..20172c9 --- /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 crashing + "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: position of expression first char + " - lin2,col2: position 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 beginning 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/octave.vim b/runtime/ftplugin/octave.vim new file mode 100644 index 0000000..7cab7c2 --- /dev/null +++ b/runtime/ftplugin/octave.vim @@ -0,0 +1,63 @@ +" Vim filetype plugin file +" Language: GNU Octave +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Sep 02 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +" TODO: update Matlab ftplugin and source it as the base file? + +setlocal comments=s:%{,m:\ ,e:%},s:#{,m:\ ,e:#},:%,:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +setlocal keywordprg=info\ octave\ --vi-keys\ --index-search + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = '\<unwind_protect\>:\<unwind_protect_cleanup\>:\<end_unwind_protect\>' + if exists("octave_use_matlab_end") + let b:match_words ..= ',' .. + \ '\<\%(classdef\|enumeration\|events\|for\|function\|if\|methods\|parfor\|properties\|switch\|while\|try\)\>' .. + \ ':' .. + \ '\<\%(elseif\|else\|case\|otherwise\|break\|continue\|catch\)\>' .. + \ ':' .. + \ '\<end\>' + else + let b:match_words ..= ',' .. + \ '\<classdef\>:\<endclassdef\>,' .. + \ '\<enumeration\>:\<endenumeration\>,' .. + \ '\<events\>:\<endevents\>,' .. + \ '\<do\>:\<\%(break\|continue\)\>:\<until\>' .. + \ '\<for\>:\<\%(break\|continue\)\>:\<endfor\>,' .. + \ '\<function\>:\<return\>:\<endfunction\>,' .. + \ '\<if\>:\<\%(elseif\|else\)\>:\<endif\>,' .. + \ '\<methods\>:\<endmethods\>,' .. + \ '\<parfor\>:\<endparfor\>,' .. + \ '\<properties\>:\<endproperties\>,' .. + \ '\<switch\>:\<\%(case\|otherwise\)\>:\<endswitch\>,' .. + \ '\<while\>:\<\%(break\|continue\)\>:\<endwhile\>,' .. + \ '\<try\>:\<catch\>:\<end_try_catch\>' + endif + " only match in statement position + let s:statement_start = escape('\%(\%(^\|;\)\s*\)\@<=', '\') + let b:match_words = substitute(b:match_words, '\\<', s:statement_start, 'g') +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "GNU Octave Source Files (*.m)\t*.m\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl com< cms< fo< kp< " .. + \ "| unlet! b:browsefilter b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/openvpn.vim b/runtime/ftplugin/openvpn.vim new file mode 100644 index 0000000..56c0f25 --- /dev/null +++ b/runtime/ftplugin/openvpn.vim @@ -0,0 +1,14 @@ +" Vim filetype plugin +" Language: OpenVPN +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Oct 16 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal iskeyword+=-,.,/ +setlocal comments=:#,:; commentstring=#%s + +let b:undo_ftplugin = 'setl isk< com< cms<' 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..aba1e54 --- /dev/null +++ b/runtime/ftplugin/pascal.vim @@ -0,0 +1,50 @@ +" Vim filetype plugin file +" Language: Pascal +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2021 Apr 23 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +set comments=s:(*,m:\ ,e:*),s:{,m:\ ,e:} +set commentstring={%s} + +if exists("pascal_delphi") + set comments+=:/// +endif + +if !exists("pascal_traditional") + set commentstring=//\ %s + set comments+=:// +endif + +setlocal formatoptions-=t formatoptions+=croql + +if exists("loaded_matchit") + let b:match_ignorecase = 1 " (Pascal is case-insensitive) + + let b:match_words = '\<\%(asm\|begin\|case\|\%(\%(=\|packed\)\s*\)\@<=\%(class\|object\)\|\%(=\s*\)\@<=interface\|record\|try\)\>' + let b:match_words .= ':\%(^\s*\)\@<=\%(except\|finally\|else\|otherwise\)\>' + let b:match_words .= ':\<end\>\.\@!' + + let b:match_words .= ',\<repeat\>:\<until\>' + " let b:match_words .= ',\<if\>:\<else\>' " FIXME - else clashing with middle else. It seems like a debatable use anyway. + let b:match_words .= ',\<unit\>:\<\%(\%(^\s*\)\@<=interface\|implementation\|initialization\|finalization\)\>:\<end\.' +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Pascal Source Files (*.pas *.pp *.inc)\t*.pas;*.pp;*.inc\n" . + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl fo< cms< com< " .. + \ "| unlet! b:browsefilter b:match_words b:match_ignorecase" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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..d0bdbc0 --- /dev/null +++ b/runtime/ftplugin/perl.vim @@ -0,0 +1,109 @@ +" 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 +" License: Vim License (see :help license) +" Last Change: 2021 Nov 10 + +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 + +" Provided by Ned Konz <ned at bike-nomad dot com> +"--------------------------------------------- +setlocal include=\\<\\(use\\\|require\\)\\> +" '+' is removed to support plugins in Catalyst or DBIx::Class +" where the leading plus indicates a fully-qualified module name. +setlocal includeexpr=substitute(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. +let s:old_isfname = &isfname +set isfname+=: +let s:new_isfname = &isfname + +augroup perl_global_options + au! + exe "au BufEnter * if &filetype == 'perl' | let &isfname = '" . s:new_isfname . "' | endif" + exe "au BufLeave * if &filetype == 'perl' | let &isfname = '" . s:old_isfname . "' | endif" +augroup END + +" Undo the stuff we changed. +let b:undo_ftplugin = "setlocal fo< kp< com< cms< inc< inex< def< isk<" . + \ " | let &isfname = '" . s:old_isfname . "'" + +if get(g:, 'perl_fold', 0) + setlocal foldmethod=syntax + let b:undo_ftplugin .= " | setlocal fdm<" +endif + +" 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 + +let b:undo_ftplugin .= " | setlocal pa<" +"--------------------------------------------- + +" Change the browse dialog to show mainly Perl-related files +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + 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" + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +" Proper matching for matchit plugin +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField' + let b:match_words = '\<if\>:\<elsif\>:\<else\>' + let b:undo_ftplugin .= " | unlet! b:match_words b:match_skip" +endif + +" Restore the saved compatibility options. +let &cpo = s:save_cpo +unlet s:save_cpo s:old_isfname s:new_isfname diff --git a/runtime/ftplugin/php.vim b/runtime/ftplugin/php.vim new file mode 100644 index 0000000..540653e --- /dev/null +++ b/runtime/ftplugin/php.vim @@ -0,0 +1,153 @@ +" Vim filetype plugin file +" Language: PHP +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Changed: 2022 Jul 20 + +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 b:undo_ftplugin = "setlocal comments< commentstring< formatoptions< omnifunc<" + let s:undo_ftplugin = b:undo_ftplugin +endif +if exists("b:browsefilter") +" let b:undo_ftplugin ..= " | unlet! b:browsefilter b:html_set_browsefilter" + let s:browsefilter = b:browsefilter +endif +if exists("b:match_words") +" let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:html_set_match_words" + let s:match_words = b:match_words +endif +if exists("b:match_skip") + unlet b:match_skip +endif + +setlocal comments=s1:/*,mb:*,ex:*/,://,:# +setlocal commentstring=/*%s*/ +setlocal formatoptions+=l formatoptions-=t + +if get(g:, "php_autocomment", 1) + setlocal formatoptions+=croq + " NOTE: set g:PHP_autoformatcomment = 0 to prevent the indent plugin from + " overriding this 'comments' value + setlocal comments-=:# + " space after # comments to exclude attributes + setlocal comments+=b:# +endif + +if exists('&omnifunc') + setlocal omnifunc=phpcomplete#CompletePHP +endif + +setlocal suffixesadd=.php + +" ### +" 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+=$ + +let b:undo_ftplugin = "setlocal include< suffixesadd<" + +if exists("loaded_matchit") && exists("b:html_set_match_words") + let b:match_ignorecase = 1 + let b:match_words = 'PhpMatchWords()' + + if !exists("*PhpMatchWords") + function! PhpMatchWords() + " The PHP syntax file uses the Delimiter syntax group for the phpRegion + " matchgroups, without a "php" prefix, so use the stack to test for the + " outer phpRegion group. This also means the closing ?> tag which is + " outside of the matched region just uses the Delimiter group for the + " end match. + let stack = synstack(line('.'), col('.')) + let php_region = !empty(stack) && synIDattr(stack[0], "name") =~# '\<php' + if php_region || getline(".") =~ '.\=\%.c\&?>' + let b:match_skip = "PhpMatchSkip('html')" + return '<?php\|<?=\=:?>,' .. + \ '\<if\>:\<elseif\>:\<else\>:\<endif\>,' .. + \ '\<switch\>:\<case\>:\<break\>:\<continue\>:\<endswitch\>,' .. + \ '\<while\>.\{-})\s*\::\<break\>:\<continue\>:\<endwhile\>,' .. + \ '\<do\>:\<break\>:\<continue\>:\<while\>,' .. + \ '\<for\>:\<break\>:\<continue\>:\<endfor\>,' .. + \ '\<foreach\>:\<break\>:\<continue\>:\<endforeach\>,' .. + \ '\%(<<<\s*\)\@<=''\=\(\h\w*\)''\=:^\s*\1\>' + + " TODO: these probably aren't worth adding and really need syntax support + " '<\_s*script\_s*language\_s*=\_s*[''"]\=\_s*php\_s*[''"]\=\_s*>:<\_s*\_s*/\_s*script\_s*>,' .. + " '<%:%>,' .. + else + let b:match_skip = "PhpMatchSkip('php')" + return s:match_words + endif + endfunction + endif + if !exists("*PhpMatchSkip") + function! PhpMatchSkip(skip) + let name = synIDattr(synID(line('.'), col('.'), 1), 'name') + if a:skip == "html" + " ?> in line comments will also be correctly matched as Delimiter + return name =~? 'comment\|string' || name !~? 'php\|delimiter' + else " php + return name =~? 'comment\|string\|php' + endif + endfunction + endif + let b:undo_ftplugin ..= " | unlet! b:match_skip" +endif +" ### + +" Change the :browse e filter to primarily show PHP-related files. +if (has("gui_win32") || has("gui_gtk")) && exists("b:html_set_browsefilter") + let b:browsefilter = "PHP Files (*.php)\t*.php\n" .. + \ "PHP Test Files (*.phpt)\t*.phpt\n" .. + \ s:browsefilter +endif + +if !exists("no_plugin_maps") && !exists("no_php_maps") + " 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:section = escape('^\s*\zs\%(' .. s:function .. '\|' .. s:class .. '\|interface\|trait\|enum\)\>', "|") + + function! s:Jump(pattern, count, flags) + normal! m' + for i in range(a:count) + if !search(a:pattern, a:flags) + break + endif + endfor + endfunction + + for mode in ["n", "o", "x"] + exe mode .. "noremap <buffer> <silent> ]] <Cmd>call <SID>Jump('" .. s:section .. "', v:count1, 'W')<CR>" + exe mode .. "noremap <buffer> <silent> [[ <Cmd>call <SID>Jump('" .. s:section .. "', v:count1, 'bW')<CR>" + let b:undo_ftplugin ..= " | sil! exe '" .. mode .. "unmap <buffer> ]]'" .. + \ " | sil! exe '" .. mode .. "unmap <buffer> [['" + endfor +endif + +let b:undo_ftplugin ..= " | " .. s:undo_ftplugin + +" Restore the saved compatibility options. +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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/pod.vim b/runtime/ftplugin/pod.vim new file mode 100644 index 0000000..2a905ab --- /dev/null +++ b/runtime/ftplugin/pod.vim @@ -0,0 +1,71 @@ +" Vim filetype plugin file +" Language: Perl POD format +" Maintainer: vim-perl <vim-perl@googlegroups.com> +" Author: Doug Kearns <dougkearns@gmail.com> +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" License: Vim License (see :help license) +" Last Change: 2021 Oct 19 + +if exists("b:did_ftplugin") + finish +endif + +let s:save_cpo = &cpo +set cpo-=C + +setlocal comments=fb:=for\ comment +setlocal commentstring==for\ comment\ %s + +let b:undo_ftplugin = "setl com< cms<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = + \ '^=pod\>:^=cut\>,' . + \ '^=begin\s\+\(\S\+\):^=end\s\+\1,' . + \ '^=over\>:^=item\>:^=back\>,' . + \ '[IBCLEFSXZ]<<\%(\s\+\|$\)\@=:\%(\s\+\|^\)\@<=>>,' . + \ '[IBCLEFSXZ]<:>' + let b:undo_ftplugin .= " | unlet! b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "POD Source Files (*.pod)\t*.pod\n" . + \ "Perl Source Files (*.pl)\t*.pl\n" . + \ "Perl Modules (*.pm)\t*.pm\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +function! s:jumpToSection(backwards) + let flags = a:backwards ? 'bsWz' : 'sWz' + if has('syntax_items') + let skip = "synIDattr(synID(line('.'), col('.'), 1), 'name') !~# '\\<podCommand\\>'" + else + let skip = '' + endif + for i in range(v:count1) + call search('^=\a', flags, 0, 0, skip) + endfor +endfunction + +if !exists("no_plugin_maps") && !exists("no_pod_maps") + nnoremap <silent> <buffer> ]] <Cmd>call <SID>jumpToSection()<CR> + vnoremap <silent> <buffer> ]] <Cmd>call <SID>jumpToSection()<CR> + nnoremap <silent> <buffer> ][ <Cmd>call <SID>jumpToSection()<CR> + vnoremap <silent> <buffer> ][ <Cmd>call <SID>jumpToSection()<CR> + nnoremap <silent> <buffer> [[ <Cmd>call <SID>jumpToSection(1)<CR> + vnoremap <silent> <buffer> [[ <Cmd>call <SID>jumpToSection(1)<CR> + nnoremap <silent> <buffer> [] <Cmd>call <SID>jumpToSection(1)<CR> + vnoremap <silent> <buffer> [] <Cmd>call <SID>jumpToSection(1)<CR> + let b:undo_ftplugin .= + \ " | silent! exe 'nunmap <buffer> ]]' | silent! exe 'vunmap <buffer> ]]'" . + \ " | silent! exe 'nunmap <buffer> ][' | silent! exe 'vunmap <buffer> ]['" . + \ " | silent! exe 'nunmap <buffer> ]]' | silent! exe 'vunmap <buffer> ]]'" . + \ " | silent! exe 'nunmap <buffer> []' | silent! exe 'vunmap <buffer> []'" +endif + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: set expandtab: diff --git a/runtime/ftplugin/poefilter.vim b/runtime/ftplugin/poefilter.vim new file mode 100644 index 0000000..92c2def --- /dev/null +++ b/runtime/ftplugin/poefilter.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin +" Language: PoE item filter +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Oct 07 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:# commentstring=#\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/runtime/ftplugin/poke.vim b/runtime/ftplugin/poke.vim new file mode 100644 index 0000000..2be8669 --- /dev/null +++ b/runtime/ftplugin/poke.vim @@ -0,0 +1,32 @@ +" Vim filetype plugin file +" Language: GNU Poke +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 March 11 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s +setlocal formatoptions-=t formatoptions+=croql + +setlocal include=load +setlocal suffixesadd=.pk + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Poke Files (*.pk)\t*.pk\n" . + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl fo< com< cms< inc< sua<" . + \ " | 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/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/ps1.vim b/runtime/ftplugin/ps1.vim new file mode 100644 index 0000000..aac3bc9 --- /dev/null +++ b/runtime/ftplugin/ps1.vim @@ -0,0 +1,59 @@ +" Vim filetype plugin file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2021 Apr 02 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") | finish | endif + +" Don't load another plug-in for this buffer +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal tw=0 +setlocal commentstring=#%s +setlocal formatoptions=tcqro +" Enable autocompletion of hyphenated PowerShell commands, +" e.g. Get-Content or Get-ADUser +setlocal iskeyword+=- + +" Change the browse dialog on Win32 to show mainly PowerShell-related files +if has("gui_win32") + let b:browsefilter = + \ "All PowerShell Files (*.ps1, *.psd1, *.psm1, *.ps1xml)\t*.ps1;*.psd1;*.psm1;*.ps1xml\n" . + \ "PowerShell Script Files (*.ps1)\t*.ps1\n" . + \ "PowerShell Module Files (*.psd1, *.psm1)\t*.psd1;*.psm1\n" . + \ "PowerShell XML Files (*.ps1xml)\t*.ps1xml\n" . + \ "All Files (*.*)\t*.*\n" +endif + +" Look up keywords by Get-Help: +" check for PowerShell Core in Windows, Linux or MacOS +if executable('pwsh') | let s:pwsh_cmd = 'pwsh' + " on Windows Subsystem for Linux, check for PowerShell Core in Windows +elseif exists('$WSLENV') && executable('pwsh.exe') | let s:pwsh_cmd = 'pwsh.exe' + " check for PowerShell <= 5.1 in Windows +elseif executable('powershell.exe') | let s:pwsh_cmd = 'powershell.exe' +endif + +if exists('s:pwsh_cmd') + if !has('gui_running') && executable('less') && + \ !(exists('$ConEmuBuild') && &term =~? '^xterm') + " For exclusion of ConEmu, see https://github.com/Maximus5/ConEmu/issues/2048 + command! -buffer -nargs=1 GetHelp silent exe '!' . s:pwsh_cmd . ' -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command Get-Help -Full "<args>" | ' . (has('unix') ? 'LESS= less' : 'less') | redraw! + elseif has('terminal') + command! -buffer -nargs=1 GetHelp silent exe 'term ' . s:pwsh_cmd . ' -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command Get-Help -Full "<args>"' . (executable('less') ? ' | less' : '') + else + command! -buffer -nargs=1 GetHelp echo system(s:pwsh_cmd . ' -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command Get-Help -Full <args>') + endif +endif +setlocal keywordprg=:GetHelp + +" Undo the stuff we changed +let b:undo_ftplugin = "setlocal tw< cms< fo< iskeyword< keywordprg<" . + \ " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/ps1xml.vim b/runtime/ftplugin/ps1xml.vim new file mode 100644 index 0000000..837a330 --- /dev/null +++ b/runtime/ftplugin/ps1xml.vim @@ -0,0 +1,34 @@ +" Vim filetype plugin file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2021 Apr 02 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") | finish | endif + +" Don't load another plug-in for this buffer +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal tw=0 +setlocal commentstring=#%s +setlocal formatoptions=tcqro + +" Change the browse dialog on Win32 to show mainly PowerShell-related files +if has("gui_win32") + let b:browsefilter = + \ "All PowerShell Files (*.ps1, *.psd1, *.psm1, *.ps1xml)\t*.ps1;*.psd1;*.psm1;*.ps1xml\n" . + \ "PowerShell Script Files (*.ps1)\t*.ps1\n" . + \ "PowerShell Module Files (*.psd1, *.psm1)\t*.psd1;*.psm1\n" . + \ "PowerShell XML Files (*.ps1xml)\t*.ps1xml\n" . + \ "All Files (*.*)\t*.*\n" +endif + +" Undo the stuff we changed +let b:undo_ftplugin = "setlocal tw< cms< fo<" . + \ " | unlet! b:browsefilter" + +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/qb64.vim b/runtime/ftplugin/qb64.vim new file mode 100644 index 0000000..0fa36fc --- /dev/null +++ b/runtime/ftplugin/qb64.vim @@ -0,0 +1,26 @@ +" Vim filetype plugin file +" Language: QB64 +" Maintainer: Doug Kearns <dougkearns@gmail.com> + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +runtime! ftplugin/basic.vim + +let s:not_end = '\%(end\s\+\)\@<!' + +let b:match_words ..= ',' .. + \ s:not_end .. '\<declare\>:\<end\s\+declare\>,' .. + \ '\<select\s\+everycase\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' .. + \ '$IF\>:$\%(ELSEIF\|ELSE\)\>:$END\s*IF\>' + +unlet s:not_end + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: 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/quarto.vim b/runtime/ftplugin/quarto.vim new file mode 100644 index 0000000..a76bcc2 --- /dev/null +++ b/runtime/ftplugin/quarto.vim @@ -0,0 +1 @@ +runtime ftplugin/rmd.vim diff --git a/runtime/ftplugin/r.vim b/runtime/ftplugin/r.vim new file mode 100644 index 0000000..2896636 --- /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: Sun Apr 24, 2022 09:14AM + +" 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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "R Source Files (*.R)\t*.R\n" . + \ "Files that include R (*.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\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/racket.vim b/runtime/ftplugin/racket.vim new file mode 100644 index 0000000..3aa4133 --- /dev/null +++ b/runtime/ftplugin/racket.vim @@ -0,0 +1,82 @@ +" Vim filetype plugin +" Language: Racket +" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com> +" Previous Maintainer: Will Langstroth <will@langstroth.com> +" URL: https://github.com/benknoble/vim-racket +" Last Change: 2022 Aug 29 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +" quick hack to allow adding values +setlocal iskeyword=@,!,#-',*-:,<-Z,a-z,~,_,94 + +" Enable auto begin new comment line when continuing from an old comment line +setlocal comments=:;;;;,:;;;,:;;,:; +setlocal formatoptions+=r + +"setlocal commentstring=;;%s +setlocal commentstring=#\|\ %s\ \|# + +setlocal formatprg=raco\ fmt + +" Undo our settings when the filetype changes away from Racket +" (this should be amended if settings/mappings are added above!) +let b:undo_ftplugin = + \ "setlocal iskeyword< lispwords< lisp< comments< formatoptions< formatprg<" + \. " | setlocal commentstring<" + +if !exists("no_plugin_maps") && !exists("no_racket_maps") + " Simply setting keywordprg like this works: + " setlocal keywordprg=raco\ docs + " but then vim says: + " "press ENTER or type a command to continue" + " We avoid the annoyance of having to hit enter by remapping K directly. + function s:RacketDoc(word) abort + execute 'silent !raco docs --' shellescape(a:word) + redraw! + endfunction + nnoremap <buffer> <Plug>RacketDoc :call <SID>RacketDoc(expand('<cword>'))<CR> + nmap <buffer> K <Plug>RacketDoc + + " For the visual mode K mapping, it's slightly more convoluted to get the + " selected text: + function! s:Racket_visual_doc() + try + let l:old_a = @a + normal! gv"ay + call system("raco docs '". @a . "'") + redraw! + return @a + finally + let @a = l:old_a + endtry + endfunction + + xnoremap <buffer> <Plug>RacketDoc :call <SID>Racket_visual_doc()<cr> + xmap <buffer> K <Plug>RacketDoc + + let b:undo_ftplugin .= + \ " | silent! execute 'nunmap <buffer> K'" + \. " | silent! execute 'xunmap <buffer> K'" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = + \ "Racket Source Files (*.rkt *.rktl)\t*.rkt;*.rktl\n" + \. "All Files (*.*)\t*.*\n" + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = '#|:|#' + let b:undo_ftplugin .= " | unlet! b:match_words" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/raku.vim b/runtime/ftplugin/raku.vim new file mode 100644 index 0000000..941222b --- /dev/null +++ b/runtime/ftplugin/raku.vim @@ -0,0 +1,127 @@ +" Vim filetype plugin file +" Language: Raku +" Maintainer: vim-perl <vim-perl@googlegroups.com> +" Homepage: https://github.com/Raku/vim-raku +" Bugs/requests: https://github.com/Raku/vim-raku/issues +" Last Change: 2021-04-16 +" 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 + +" Provided by Ned Konz <ned at bike-nomad dot com> +"--------------------------------------------- +setlocal include=\\<\\(use\\\|require\\)\\> +setlocal includeexpr=substitute(v:fname,'::','/','g') +setlocal suffixesadd=.rakumod,.rakudoc,.pm6,.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/raku.vim file that contains +" set isfname-=: +set isfname+=: +setlocal iskeyword=@,48-57,_,192-255,- + +" Raku exposes its CompUnits through $*REPO, but mapping module names to +" compunit paths is nontrivial. Probably it's more convenient to rely on +" people using zef, which has a handy store of sources for modules it has +" installed. +func s:compareReverseFtime(a, b) + let atime = getftime(a:a) + let btime = getftime(a:b) + return atime > btime ? -1 : atime == btime ? 0 : 1 +endfunc + +let &l:path = "lib,." +if exists('$RAKULIB') + let &l:path = &l:path . "," . $RAKULIB +endif +let &l:path = &l:path . "," . join( + \ sort(glob("~/.zef/store/*/*/lib", 0, 1), "s:compareReverseFtime"), + \ ',') + +" Convert ascii-based ops into their single-character unicode equivalent +if get(g:, 'raku_unicode_abbrevs', 0) + iabbrev <buffer> !(<) ⊄ + iabbrev <buffer> !(<=) ⊈ + iabbrev <buffer> !(>) ⊅ + iabbrev <buffer> !(>=) ⊉ + iabbrev <buffer> !(cont) ∌ + iabbrev <buffer> !(elem) ∉ + iabbrev <buffer> != ≠ + iabbrev <buffer> (&) ∩ + iabbrev <buffer> (+) ⊎ + iabbrev <buffer> (-) ∖ + iabbrev <buffer> (.) ⊍ + iabbrev <buffer> (<) ⊂ + iabbrev <buffer> (<+) ≼ + iabbrev <buffer> (<=) ⊆ + iabbrev <buffer> (>) ⊃ + iabbrev <buffer> (>+) ≽ + iabbrev <buffer> (>=) ⊇ + iabbrev <buffer> (\|) ∪ + iabbrev <buffer> (^) ⊖ + iabbrev <buffer> (atomic) ⚛ + iabbrev <buffer> (cont) ∋ + iabbrev <buffer> (elem) ∈ + iabbrev <buffer> * × + iabbrev <buffer> **0 ⁰ + iabbrev <buffer> **1 ¹ + iabbrev <buffer> **2 ² + iabbrev <buffer> **3 ³ + iabbrev <buffer> **4 ⁴ + iabbrev <buffer> **5 ⁵ + iabbrev <buffer> **6 ⁶ + iabbrev <buffer> **7 ⁷ + iabbrev <buffer> **8 ⁸ + iabbrev <buffer> **9 ⁹ + iabbrev <buffer> ... … + iabbrev <buffer> / ÷ + iabbrev <buffer> << « + iabbrev <buffer> <<[=]<< «=« + iabbrev <buffer> <<[=]>> «=» + iabbrev <buffer> <= ≤ + iabbrev <buffer> =~= ≅ + iabbrev <buffer> >= ≥ + iabbrev <buffer> >> » + iabbrev <buffer> >>[=]<< »=« + iabbrev <buffer> >>[=]>> »=» + iabbrev <buffer> Inf ∞ + iabbrev <buffer> atomic-add-fetch ⚛+= + iabbrev <buffer> atomic-assign ⚛= + iabbrev <buffer> atomic-fetch ⚛ + iabbrev <buffer> atomic-dec-fetch --⚛ + iabbrev <buffer> atomic-fetch-dec ⚛-- + iabbrev <buffer> atomic-fetch-inc ⚛++ + iabbrev <buffer> atomic-inc-fetch ++⚛ + iabbrev <buffer> atomic-sub-fetch ⚛−= + iabbrev <buffer> e 𝑒 + iabbrev <buffer> o ∘ + iabbrev <buffer> pi π + iabbrev <buffer> set() ∅ + iabbrev <buffer> tau τ +endif + +" Undo the stuff we changed. +let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< isk< kp< path<" . + \ " | unlet! b:browsefilter" + +" Restore the saved compatibility options. +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/runtime/ftplugin/readline.vim b/runtime/ftplugin/readline.vim new file mode 100644 index 0000000..eba7122 --- /dev/null +++ b/runtime/ftplugin/readline.vim @@ -0,0 +1,36 @@ +" Vim filetype plugin file +" Language: readline(3) configuration file +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Last Change: 2022 Dec 09 + +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 + +let b:undo_ftplugin = "setl com< cms< fo<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 0 + let b:match_words = '$if:$else:$endif' + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Readline Intialization Files (inputrc .inputrc)\tinputrc;*.inputrc\n" .. + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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..29ecab0 --- /dev/null +++ b/runtime/ftplugin/reva.vim @@ -0,0 +1,27 @@ +" Vim ftplugin file +" Language: Reva Forth +" Version: 7.1 +" Last Change: 2022 Apr 27 +" 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 + +let b:undo_ftplugin = "setlocal sts< sw< com< fo< mps< isk<" diff --git a/runtime/ftplugin/rhelp.vim b/runtime/ftplugin/rhelp.vim new file mode 100644 index 0000000..2fde487 --- /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: Sun Apr 24, 2022 09:12AM + +" 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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\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..355b88f --- /dev/null +++ b/runtime/ftplugin/rmd.vim @@ -0,0 +1,74 @@ +" 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 Apr 24, 2022 09:12AM +" 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 + +function! SetRmdCommentStr() + if (search("^[ \t]*```[ ]*{r", "bncW") > search("^[ \t]*```$", "bncW")) || ((search('^---$', 'Wn') || search('^\.\.\.$', 'Wn')) && search('^---$', 'bnW')) + set commentstring=#\ %s + else + set commentstring=<!--\ %s\ --> + endif +endfunction + +" If you do not want both 'comments' and 'commentstring' 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() + augroup RmdCStr + autocmd! + autocmd CursorMoved <buffer> call SetRmdCommentStr() + augroup END +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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\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..cf1c092 --- /dev/null +++ b/runtime/ftplugin/rnoweb.vim @@ -0,0 +1,58 @@ +" Vim filetype plugin file +" Language: Rnoweb +" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> +" Homepage: https://github.com/jalvesaq/R-Vim-runtime +" Last Change: Sun Apr 24, 2022 09:13AM + +" 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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\n" . + \ "All Files (*.*)\t*.*\n" +endif + +function! SetRnwCommentStr() + if (search("^\s*<<.*>>=", "bncW") > search("^@", "bncW")) + set commentstring=#\ %s + else + set commentstring=%\ %s + endif +endfunction + +" If you do not want both 'comments' and 'commentstring' dynamically defined, +" put in your vimrc: let g:rnw_dynamic_comments = 0 +if !exists("g:rnw_dynamic_comments") || (exists("g:rnw_dynamic_comments") && g:rnw_dynamic_comments == 1) + augroup RnwCStr + autocmd! + autocmd CursorMoved <buffer> call SetRnwCommentStr() + augroup END +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/routeros.vim b/runtime/ftplugin/routeros.vim new file mode 100644 index 0000000..c6e4799 --- /dev/null +++ b/runtime/ftplugin/routeros.vim @@ -0,0 +1,29 @@ +" Vim filetype plugin file +" Language: MikroTik RouterOS Script +" Maintainer: zainin <z@wintr.dev> +" Last Change: 2021 Nov 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo-=C + +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setlocal com< cms< fo<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "RouterOS Script Files (*.rsc)\t*.rsc\n" .. + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:save_cpo +unlet! s:save_cpo + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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..19c67c4 --- /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: Sun Apr 24, 2022 09:13AM +" 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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\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..8c1f477 --- /dev/null +++ b/runtime/ftplugin/ruby.vim @@ -0,0 +1,445 @@ +" 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: 2022 Mar 21 + +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=b:# +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 = path . ',.,,' + elseif &g:path =~# ',\.,,$' + let path = &g:path[0:-4] . path . ',.,,' + elseif &g:path =~# ',,$' + let path = &g:path[0:-2] . path . ',,' + else + let path = substitute(&g:path, '[^,]\zs$', ',', '') . 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') && !empty($HOME) + 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> + cmap <buffer> <SID><cfile> <Plug><cfile> + cmap <buffer> <SID><ctag> <Plug><ctag> + + 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', '<script><silent>', '<C-]> <SID>:exe v:count1."tag <SID><ctag>"<SID>tagzv<CR>') + call s:map('n', '<script><silent>', 'g<C-]> <SID>:exe "tjump <SID><ctag>"<SID>tagzv<CR>') + call s:map('n', '<script><silent>', 'g] <SID>:exe "tselect <SID><ctag>"<SID>tagzv<CR>') + call s:map('n', '<script><silent>', '<C-W>] <SID>:exe v:count1."stag <SID><ctag>"<SID>tagzv<CR>') + call s:map('n', '<script><silent>', '<C-W><C-]> <SID>:exe v:count1."stag <SID><ctag>"<SID>tagzv<CR>') + call s:map('n', '<script><silent>', '<C-W>g<C-]> <SID>:exe "stjump <SID><ctag>"<SID>tagzv<CR>') + call s:map('n', '<script><silent>', '<C-W>g] <SID>:exe "stselect <SID><ctag>"<SID>tagzv<CR>') + call s:map('n', '<script><silent>', '<C-W>} <SID>:exe v:count1."ptag <SID><ctag>"<CR>') + call s:map('n', '<script><silent>', '<C-W>g} <SID>:exe "ptjump <SID><ctag>"<CR>') + + call s:map('n', '<script><silent>', 'gf <SID>c:find <SID><cfile><CR>') + call s:map('n', '<script><silent>', '<C-W>f <SID>c:sfind <SID><cfile><CR>') + call s:map('n', '<script><silent>', '<C-W><C-F> <SID>c:sfind <SID><cfile><CR>') + call s:map('n', '<script><silent>', '<C-W>gf <SID>c:tabfind <SID><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..b484df9 --- /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: 11 August 2021 +" ---------------------------------------------------------------------------- + +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/scdoc.vim b/runtime/ftplugin/scdoc.vim new file mode 100644 index 0000000..552c865 --- /dev/null +++ b/runtime/ftplugin/scdoc.vim @@ -0,0 +1,22 @@ +" scdoc filetype plugin +" Maintainer: Gregory Anders <contact@gpanders.com> +" Last Updated: 2022-05-09 +" Upstream: https://github.com/gpanders/vim-scdoc + +" 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 comments=b:; +setlocal commentstring=;%s +setlocal formatoptions+=t +setlocal noexpandtab +setlocal shiftwidth=0 +setlocal softtabstop=0 +setlocal textwidth=80 + +let b:undo_ftplugin = 'setl com< cms< fo< et< sw< sts< tw<' diff --git a/runtime/ftplugin/scheme.vim b/runtime/ftplugin/scheme.vim new file mode 100644 index 0000000..04655bc --- /dev/null +++ b/runtime/ftplugin/scheme.vim @@ -0,0 +1,58 @@ +" Vim filetype plugin file +" Language: Scheme (R7RS) +" Last Change: 2019-11-19 +" Author: Evan Hanson <evhan@foldling.org> +" Maintainer: Evan Hanson <evhan@foldling.org> +" Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com> +" Repository: https://git.foldling.org/vim-scheme.git +" 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') + runtime! 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..ef52125 --- /dev/null +++ b/runtime/ftplugin/sgml.vim @@ -0,0 +1,42 @@ +" Vim filetype plugin file +" Language: sgml +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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..b6fdb8f --- /dev/null +++ b/runtime/ftplugin/sh.vim @@ -0,0 +1,48 @@ +" Vim filetype plugin file +" Language: sh +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2022 Sep 07 + +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 comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setl com< cms< fo<" + +" Shell: thanks to Johannes Zellner +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 0 + 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\>' + unlet s:sol + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" +endif + +" Change the :browse e filter to primarily show shell-related files. +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + 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" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +" Restore the saved compatibility options. +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: nowrap sw=2 sts=2 ts=8 noet: 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/solution.vim b/runtime/ftplugin/solution.vim new file mode 100644 index 0000000..bd30c7b --- /dev/null +++ b/runtime/ftplugin/solution.vim @@ -0,0 +1,37 @@ +" Vim filetype plugin file +" Language: Microsoft Visual Studio Solution +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Dec 15 + +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 + +let b:undo_ftplugin = "setl com< cms<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = + \ '\<Project\>:\<EndProject\>,' .. + \ '\<ProjectSection\>:\<EndProjectSection\>,' .. + \ '\<Global\>:\<EndGlobal\>,' .. + \ '\<GlobalSection\>:\<EndGlobalSection\>' + let b:undo_ftplugin ..= " | unlet! b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Microsoft Visual Studio Solution Files\t*.sln\n" .. + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/spec.vim b/runtime/ftplugin/spec.vim new file mode 100644 index 0000000..9040e19 --- /dev/null +++ b/runtime/ftplugin/spec.vim @@ -0,0 +1,209 @@ +" 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 +" Update by Zdenek Dohnal, 2022 May 17 + +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/ssa.vim b/runtime/ftplugin/ssa.vim new file mode 100644 index 0000000..04cc7a9 --- /dev/null +++ b/runtime/ftplugin/ssa.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin +" Language: SubStation Alpha +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Oct 10 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:;,:!: commentstring=;\ %s + +let b:undo_ftplugin = 'setl com< cms<' 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..6f16b1a --- /dev/null +++ b/runtime/ftplugin/svg.vim @@ -0,0 +1,42 @@ +" Vim filetype plugin file +" Language: svg +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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/swayconfig.vim b/runtime/ftplugin/swayconfig.vim new file mode 100644 index 0000000..45d6bdb --- /dev/null +++ b/runtime/ftplugin/swayconfig.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin file +" Language: sway config file +" Original Author: James Eapen <james.eapen@vai.org> +" Maintainer: James Eapen <james.eapen@vai.org> +" Version: 0.1 +" Last Change: 2022 June 07 + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setlocal cms<" + +setlocal commentstring=#\ %s 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..38ed1ad --- /dev/null +++ b/runtime/ftplugin/systemverilog.vim @@ -0,0 +1,44 @@ +" Vim filetype plugin file +" Language: SystemVerilog +" Maintainer: kocha <kocha.lsifrontend@gmail.com> +" Last Change: 07-May-2021 + +if exists("b:did_ftplugin") + finish +endif + +" Behaves just like Verilog +runtime! ftplugin/verilog.vim + +let s:cpo_save = &cpo +set cpo&vim + +" Add SystemVerilog keywords for matchit plugin. +if exists("loaded_matchit") + 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\>\|\<join_any\>\|\<join_none\>,' . + \ '\<primitive\>:\<endprimitive\>,' . + \ '\<table\>:\<endtable\>,' . + \ '\<checker\>:\<endchecker\>,' . + \ '\<class\>:\<endclass\>,' . + \ '\<clocking\>:\<endclocking\>,' . + \ '\<group\>:\<endgroup\>,' . + \ '\<interface\>:\<endinterface\>,' . + \ '\<package\>:\<endpackage\>,' . + \ '\<program\>:\<endprogram\>,' . + \ '\<property\>:\<endproperty\>,' . + \ '\<sequence\>:\<endsequence\>' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/tap.vim b/runtime/ftplugin/tap.vim new file mode 100644 index 0000000..c165c0c --- /dev/null +++ b/runtime/ftplugin/tap.vim @@ -0,0 +1,27 @@ +" Vim filetype plugin file +" Language: Verbose TAP Output +" 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 +" License: Vim License (see :help license) +" Last Change: 2021 Oct 22 + +" Only do this when not done yet for this buffer +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal foldtext=TAPTestLine_foldtext() +function! TAPTestLine_foldtext() + let line = getline(v:foldstart) + let sub = substitute(line, '/\*\|\*/\|{{{\d\=', '', 'g') + return sub +endfunction + +setlocal foldminlines=5 +setlocal foldcolumn=2 +setlocal foldenable +setlocal foldmethod=syntax + +let b:undo_ftplugin = 'setlocal foldtext< foldminlines< foldcolumn< foldenable< foldmethod<' 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..85d3873 --- /dev/null +++ b/runtime/ftplugin/tcsh.vim @@ -0,0 +1,35 @@ +" Vim filetype plugin file +" Language: tcsh +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2021 Oct 15 + +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 = "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 + +if (has("gui_win32") || has("gui_gtk")) + let b:browsefilter="tcsh Scripts (*.tcsh)\t*.tcsh\n" .. s:browsefilter +endif + +let b:undo_ftplugin = "unlet! b:browsefilter | " .. s:undo_ftplugin + +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..0d68b51 --- /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 included 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..5c3461f --- /dev/null +++ b/runtime/ftplugin/tmux.vim @@ -0,0 +1,15 @@ +" 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 + +let b:undo_ftplugin = "setlocal comments< commentstring<" + +setlocal comments=:# +setlocal commentstring=#\ %s diff --git a/runtime/ftplugin/toml.vim b/runtime/ftplugin/toml.vim new file mode 100644 index 0000000..1ef09a1 --- /dev/null +++ b/runtime/ftplugin/toml.vim @@ -0,0 +1,23 @@ +" Vim filetype plugin +" Language: TOML +" Homepage: https://github.com/cespare/vim-toml +" Maintainer: Aman Verma +" Author: Kevin Ballard <kevin@sb.org> +" Last Change: Sep 21, 2021 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&vim +let b:undo_ftplugin = 'setlocal commentstring< comments<' + +setlocal commentstring=#\ %s +setlocal comments=:# + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: et sw=2 sts=2 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..0407dbb --- /dev/null +++ b/runtime/ftplugin/tt2html.vim @@ -0,0 +1,15 @@ +" Vim filetype plugin file +" Language: TT2 embedded with HTML +" 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 +" License: Vim License (see :help license) +" Last Change: 2018 Mar 28 + +" 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..5a95481 --- /dev/null +++ b/runtime/ftplugin/vb.vim @@ -0,0 +1,71 @@ +" Vim filetype plugin file +" Language: Visual Basic (ft=vb) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Johannes Zellner <johannes@zellner.org> +" Last Change: 2021 Nov 17 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=sr:'\ -,mb:'\ \ ,el:'\ \ ,:' +setlocal commentstring='\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setlocal com< cms< fo<" + +" we need this wrapper, as call doesn't allow a count +function! s:VbSearch(pattern, flags) + let cnt = v:count1 + while cnt > 0 + call search(a:pattern, a:flags) + let cnt = cnt - 1 + endwhile +endfunction + +if !exists("no_plugin_maps") && !exists("no_vb_maps") + nnoremap <buffer> <silent> [[ <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sbW')<CR> + vnoremap <buffer> <silent> [[ <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sbW')<CR> + nnoremap <buffer> <silent> ]] <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sW')<CR> + vnoremap <buffer> <silent> ]] <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sW')<CR> + nnoremap <buffer> <silent> [] <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sbW')<CR> + vnoremap <buffer> <silent> [] <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sbW')<CR> + nnoremap <buffer> <silent> ][ <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sW')<CR> + vnoremap <buffer> <silent> ][ <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sW')<CR> + let b:undo_ftplugin .= " | sil! exe 'nunmap <buffer> [[' | sil! exe 'vunmap <buffer> [['" . + \ " | sil! exe 'nunmap <buffer> ]]' | sil! exe 'vunmap <buffer> ]]'" . + \ " | sil! exe 'nunmap <buffer> []' | sil! exe 'vunmap <buffer> []'" . + \ " | sil! exe 'nunmap <buffer> ][' | sil! exe 'vunmap <buffer> ]['" +endif + +" TODO: line start anchors are almost certainly overly restrictive - allow +" after statement separators. Even in QuickBasic only block IF statements +" were required to be at the start of a line. +if exists("loaded_matchit") && !exists("b:match_words") + 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\>' + let b:undo_ftplugin .= " | unlet! b:match_words b:match_ignorecase" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Visual Basic Source Files (*.bas)\t*.bas\n" . + \ "Visual Basic Form Files (*.frm)\t*.frm\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/vdf.vim b/runtime/ftplugin/vdf.vim new file mode 100644 index 0000000..973d7c0 --- /dev/null +++ b/runtime/ftplugin/vdf.vim @@ -0,0 +1,14 @@ +" Vim filetype plugin +" Language: Valve Data Format +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Sep 15 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=:// commentstring=//\ %s +setl foldmethod=syntax + +let b:undo_ftplugin = 'setl com< cms< fdm<' 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..1ae1d23 --- /dev/null +++ b/runtime/ftplugin/vim.vim @@ -0,0 +1,125 @@ +" Vim filetype plugin +" Language: Vim +" Maintainer: Bram Moolenaar <Bram@vim.org> +" Last Change: 2023 Feb 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 + +if !exists('*VimFtpluginUndo') + func VimFtpluginUndo() + setl fo< isk< com< tw< commentstring< include< define< + 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 + +" Comments starts with # in Vim9 script. We have to guess which one to use. +if "\n" .. getline(1, 10)->join("\n") =~# '\n\s*vim9\%[script]\>' + setlocal commentstring=#%s +else + setlocal commentstring=\"%s +endif + +" Set 'comments' to format dashed lists in comments, both in Vim9 and legacy +" script. +setlocal com=sO:#\ -,mO:#\ \ ,eO:##,:#,sO:\"\ -,mO:\"\ \ ,eO:\"\",:\" + +" set 'include' to recognize import commands +setlocal include=\\v^\\s*import\\s*(autoload)? + +" set 'define' to recognize export commands +setlocal define=\\v^\\s*export\\s*(def\|const\|var\|final) + +" 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]\\|\(export\s\+\)\?def\)\>', "bW")<CR> + vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|\(export\s\+\)\?def\)\>', "bW")<CR> + nnoremap <silent><buffer> ]] m':call search('^\s*\(fu\%[nction]\\|\(export\s\+\)\?def\)\>', "W")<CR> + vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|\(export\s\+\)\?def\)\>', "W")<CR> + nnoremap <silent><buffer> [] m':call search('^\s*end\(f\%[unction]\\|\(export\s\+\)\?def\)\>', "bW")<CR> + vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|\(export\s\+\)\?def\)\>', "bW")<CR> + nnoremap <silent><buffer> ][ m':call search('^\s*end\(f\%[unction]\\|\(export\s\+\)\?def\)\>', "W")<CR> + vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|\(export\s\+\)\?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\+\s*(:\%(\%(^\||\)\s*\)\@<=\<retu\%[rn]\>:\%(\%(^\||\)\s*\)\@<=\<\%(endf\%[unction]\|enddef\)\>,' .. + \ '\<\%(wh\%[ile]\|for\)\>:\%(\%(^\||\)\s*\)\@<=\<brea\%[k]\>:\%(\%(^\||\)\s*\)\@<=\<con\%[tinue]\>:\%(\%(^\||\)\s*\)\@<=\<end\%(w\%[hile]\|fo\%[r]\)\>,' .. + \ '\<if\>:\%(\%(^\||\)\s*\)\@<=\<el\%[seif]\>:\%(\%(^\||\)\s*\)\@<=\<en\%[dif]\>,' .. + \ '{:},' .. + \ '\<try\>:\%(\%(^\||\)\s*\)\@<=\<cat\%[ch]\>:\%(\%(^\||\)\s*\)\@<=\<fina\%[lly]\>:\%(\%(^\||\)\s*\)\@<=\<endt\%[ry]\>,' .. + \ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,' .. + \ '\<class\>:\<endclass\>,' .. + \ '\<inte\%[rface]\>:\<endinterface\>,' .. + \ '\<enu\%[m]\>:\<endenum\>,' + + " Ignore syntax region commands and settings, any 'en*' would clobber + " if-endif. + " - set spl=de,en + " - au! FileType javascript syntax region foldBraces start=/{/ end=/}/ … + " Also ignore here-doc and dictionary keys (vimVar). + let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name") + \ =~? "comment\\|string\\|vimSynReg\\|vimSet\\|vimLetHereDoc\\|vimVar"' +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/vue.vim b/runtime/ftplugin/vue.vim new file mode 100644 index 0000000..e883374 --- /dev/null +++ b/runtime/ftplugin/vue.vim @@ -0,0 +1,24 @@ +" Vim filetype plugin file +" Language: vue + +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 + +" Copied from ftplugin/html.vim +" Original 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 + +" Restore the saved compatibility options. +let &cpo = s:save_cpo +unlet s:save_cpo 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/wget.vim b/runtime/ftplugin/wget.vim new file mode 100644 index 0000000..7a10221 --- /dev/null +++ b/runtime/ftplugin/wget.vim @@ -0,0 +1,29 @@ +" Vim filetype plugin file +" Language: Wget configuration file (/etc/wgetrc ~/.wgetrc) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Apr 28 + +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 + +let b:undo_ftplugin = "setl fo< com< cms<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Wget Configuration File (wgetrc, .wgetrc)\twgetrc;.wgetrc\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 diff --git a/runtime/ftplugin/wget2.vim b/runtime/ftplugin/wget2.vim new file mode 100644 index 0000000..a6845f6 --- /dev/null +++ b/runtime/ftplugin/wget2.vim @@ -0,0 +1,29 @@ +" Vim filetype plugin file +" Language: Wget2 configuration file (/etc/wget2rc ~/.wget2rc) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Apr 28 + +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 + +let b:undo_ftplugin = "setl fo< com< cms<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Wget2 Configuration File (wget2rc, .wget2rc)\twget2rc;.wget2rc\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 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..d2a1c0b --- /dev/null +++ b/runtime/ftplugin/xhtml.vim @@ -0,0 +1,69 @@ +" Vim filetype plugin file +" Language: xhtml +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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..9aa188c --- /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 +" 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..206fbc2 --- /dev/null +++ b/runtime/ftplugin/xs.vim @@ -0,0 +1,15 @@ +" Vim filetype plugin file +" Language: XS (Perl extension interface language) +" 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 +" License: Vim License (see :help license) +" Last Change: 2018 Mar 28 + +" 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..7d3efbb --- /dev/null +++ b/runtime/ftplugin/xsd.vim @@ -0,0 +1,41 @@ +" Vim filetype plugin file +" Language: xsd +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 20 Jan 2009 + +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..47e78eb --- /dev/null +++ b/runtime/ftplugin/xslt.vim @@ -0,0 +1,18 @@ +" Vim filetype plugin file +" Language: XSLT +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2022 Apr 25 + +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") || has("gui_gtk")) && 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/zig.vim b/runtime/ftplugin/zig.vim new file mode 100644 index 0000000..e740a52 --- /dev/null +++ b/runtime/ftplugin/zig.vim @@ -0,0 +1,66 @@ +" Vim filetype plugin file +" Language: Zig +" Upstream: https://github.com/ziglang/zig.vim + +" 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_orig = &cpo +set cpo&vim + +compiler zig_build + +" Match Zig builtin fns +setlocal iskeyword+=@-@ + +" Recomended code style, no tabs and 4-space indentation +setlocal expandtab +setlocal tabstop=8 +setlocal softtabstop=4 +setlocal shiftwidth=4 + +setlocal formatoptions-=t formatoptions+=croql + +setlocal suffixesadd=.zig,.zir + +if has('comments') + setlocal comments=:///,://!,://,:\\\\ + setlocal commentstring=//\ %s +endif + +if has('find_in_path') + let &l:includeexpr='substitute(v:fname, "^([^.])$", "\1.zig", "")' + let &l:include='\v(\@import>|\@cInclude>|^\s*\#\s*include)' +endif + +let &l:define='\v(<fn>|<const>|<var>|^\s*\#\s*define)' + +if !exists('g:zig_std_dir') && exists('*json_decode') && executable('zig') + silent let s:env = system('zig env') + if v:shell_error == 0 + let g:zig_std_dir = json_decode(s:env)['std_dir'] + endif + unlet! s:env +endif + +if exists('g:zig_std_dir') + let &l:path = &l:path . ',' . g:zig_std_dir +endif + +let b:undo_ftplugin = + \ 'setl isk< et< ts< sts< sw< fo< sua< mp< com< cms< inex< inc< pa<' + +augroup vim-zig + autocmd! * <buffer> + autocmd BufWritePre <buffer> if get(g:, 'zig_fmt_autosave', 1) | call zig#fmt#Format() | endif +augroup END + +let b:undo_ftplugin .= '|au! vim-zig * <buffer>' + +let &cpo = s:cpo_orig +unlet s:cpo_orig +" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab diff --git a/runtime/ftplugin/zimbu.vim b/runtime/ftplugin/zimbu.vim new file mode 100644 index 0000000..9d9fa6f --- /dev/null +++ b/runtime/ftplugin/zimbu.vim @@ -0,0 +1,206 @@ +" Vim filetype plugin file +" Language: Zimbu +" Maintainer: Bram Moolenaar <Bram@vim.org> +" Last Change: 2022 Sep 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 + +" 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:#\ \ ,exO:#/,s:/*,m:\ ,ex:*/,:#=,:#-,:#%,:# + +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. +if exists("loaded_matchit") && !exists("b:match_words") + 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' + let b:undo_ftplugin ..= " | unlet! b:match_words b:match_skip" +endif + +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") + +let b:undo_ftplugin ..= + \ " | iunabbr <buffer> alias" .. + \ " | iunabbr <buffer> arg" .. + \ " | iunabbr <buffer> break" .. + \ " | iunabbr <buffer> case" .. + \ " | iunabbr <buffer> catch" .. + \ " | iunabbr <buffer> check" .. + \ " | iunabbr <buffer> class" .. + \ " | iunabbr <buffer> interface" .. + \ " | iunabbr <buffer> implements" .. + \ " | iunabbr <buffer> shared" .. + \ " | iunabbr <buffer> continue" .. + \ " | iunabbr <buffer> default" .. + \ " | iunabbr <buffer> extends" .. + \ " | iunabbr <buffer> do" .. + \ " | iunabbr <buffer> else" .. + \ " | iunabbr <buffer> elseif" .. + \ " | iunabbr <buffer> enum" .. + \ " | iunabbr <buffer> exit" .. + \ " | iunabbr <buffer> false" .. + \ " | iunabbr <buffer> fail" .. + \ " | iunabbr <buffer> finally" .. + \ " | iunabbr <buffer> for" .. + \ " | iunabbr <buffer> func" .. + \ " | iunabbr <buffer> if" .. + \ " | iunabbr <buffer> import" .. + \ " | iunabbr <buffer> in" .. + \ " | iunabbr <buffer> io" .. + \ " | iunabbr <buffer> main" .. + \ " | iunabbr <buffer> module" .. + \ " | iunabbr <buffer> new" .. + \ " | iunabbr <buffer> nil" .. + \ " | iunabbr <buffer> ok" .. + \ " | iunabbr <buffer> proc" .. + \ " | iunabbr <buffer> proceed" .. + \ " | iunabbr <buffer> return" .. + \ " | iunabbr <buffer> step" .. + \ " | iunabbr <buffer> switch" .. + \ " | iunabbr <buffer> sys" .. + \ " | iunabbr <buffer> this" .. + \ " | iunabbr <buffer> throw" .. + \ " | iunabbr <buffer> try" .. + \ " | iunabbr <buffer> to" .. + \ " | iunabbr <buffer> true" .. + \ " | iunabbr <buffer> until" .. + \ " | iunabbr <buffer> while" .. + \ " | iunabbr <buffer> repeat" + +if !exists("no_plugin_maps") && !exists("no_zimbu_maps") + nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR> + nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR> + let b:undo_ftplugin ..= + \ " | silent! exe 'nunmap <buffer> [['" .. + \ " | silent! exe 'nunmap <buffer> ]]'" +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..0ca8077 --- /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: 2021-04-03 +" 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') && &shell !~# '/\%(nologin\|false\)$' + if !has('gui_running') && executable('less') + command! -buffer -nargs=1 RunHelp silent exe '!MANPAGER= zsh -c "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 -c "autoload -Uz run-help; run-help <args>"' + else + command! -buffer -nargs=1 RunHelp echo system('zsh -c "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 |