diff options
Diffstat (limited to 'mnv/runtime/ftplugin')
431 files changed, 18348 insertions, 0 deletions
diff --git a/mnv/runtime/ftplugin/8th.mnv b/mnv/runtime/ftplugin/8th.mnv new file mode 100644 index 0000000000..c1a0b50e7a --- /dev/null +++ b/mnv/runtime/ftplugin/8th.mnv @@ -0,0 +1,27 @@ +" MNV 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.mnv 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/mnv/runtime/ftplugin/README.txt b/mnv/runtime/ftplugin/README.txt new file mode 100644 index 0000000000..e9ec638fc9 --- /dev/null +++ b/mnv/runtime/ftplugin/README.txt @@ -0,0 +1,24 @@ +The ftplugin directory is for MNV plugin scripts that are only used for a +specific filetype. + +All files ending in .mnv in this directory and subdirectories will be sourced +by MNV 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.mnv + c_extra.mnv + c/settings.mnv + +Note that the "_" in "c_extra.mnv" 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 MNV. diff --git a/mnv/runtime/ftplugin/a2ps.mnv b/mnv/runtime/ftplugin/a2ps.mnv new file mode 100644 index 0000000000..e0bbd68a6c --- /dev/null +++ b/mnv/runtime/ftplugin/a2ps.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/aap.mnv b/mnv/runtime/ftplugin/aap.mnv new file mode 100644 index 0000000000..7235fef9ac --- /dev/null +++ b/mnv/runtime/ftplugin/aap.mnv @@ -0,0 +1,38 @@ +" MNV filetype plugin file +" Language: Aap recipe +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2024 Jan 14 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" 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\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif diff --git a/mnv/runtime/ftplugin/abap.mnv b/mnv/runtime/ftplugin/abap.mnv new file mode 100644 index 0000000000..32dfbf2b19 --- /dev/null +++ b/mnv/runtime/ftplugin/abap.mnv @@ -0,0 +1,41 @@ +" MNV 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 MNV itself +" Last Change: 2023 Aug 28 by MNV Project (undo_ftplugin) +" 2024 Jan 14 by MNV Project (browsefilter) +" 2025 Jun 08 by Riley Bruins <ribru17@gmail.com> ('comments', 'commentstring') +" -------------------------------------------------------------------------- + +" 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&mnv + +setlocal softtabstop=2 shiftwidth=2 +setlocal suffixesadd=.abap +setlocal commentstring=\"\ %s +setlocal comments=:\",:* + +let b:undo_ftplugin = "setl sts< sua< sw< com< cms<" + +" Windows allows you to filter the open file dialog +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "ABAP Source Files (*.abap)\t*.abap\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: set sw=4 sts=4 et tw=80 : diff --git a/mnv/runtime/ftplugin/abaqus.mnv b/mnv/runtime/ftplugin/abaqus.mnv new file mode 100644 index 0000000000..cbbf031109 --- /dev/null +++ b/mnv/runtime/ftplugin/abaqus.mnv @@ -0,0 +1,124 @@ +" MNV filetype plugin file +" Language: Abaqus finite element input file (www.abaqus.com) +" Maintainer: Carl Osterwisch <costerwi@gmail.com> +" Last Change: 2022 Oct 08 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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 mnv defaults +let s:cpo_save = &cpoptions +set cpoptions&mnv + +" 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + 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&mnv|" + \ . 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/mnv/runtime/ftplugin/abnf.mnv b/mnv/runtime/ftplugin/abnf.mnv new file mode 100644 index 0000000000..7c91f23aee --- /dev/null +++ b/mnv/runtime/ftplugin/abnf.mnv @@ -0,0 +1,17 @@ +" Language: abnf +" Maintainer: A4-Tacks <wdsjxhno1001@163.com> +" Last Change: 2025-05-02 +" Upstream: https://github.com/A4-Tacks/abnf.mnv + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = 'setlocal iskeyword< comments< commentstring<' + +setlocal iskeyword=@,48-57,_,-,192-255 +setlocal comments=:;;,:; +setlocal commentstring=;%s + +" mnv:ts=8 diff --git a/mnv/runtime/ftplugin/ada.mnv b/mnv/runtime/ftplugin/ada.mnv new file mode 100644 index 0000000000..85712b55b2 --- /dev/null +++ b/mnv/runtime/ftplugin/ada.mnv @@ -0,0 +1,221 @@ +"------------------------------------------------------------------------------ +" Description: Perform Ada specific completion & tagging. +" Language: Ada (2005) +" $Id: ada.mnv 887 2008-07-08 14:29:01Z krischik $ +" Maintainer: This runtime file is looking for a new maintainer. +" Previous 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/mnv/ftplugin/ada.mnv $ +" History: 24.05.2006 MK Unified Headers +" 26.05.2006 MK ' should not be in iskeyword. +" 16.07.2006 MK Ada-Mode as mnv-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. +" 05.09.2025 do not globally set 'ignorecase'/'smartcase' option +" set undo_ftplugin +" mark as unmaintained +" use buffer-local abbreviation +" 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' mnv 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.mnv 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 <buffer> ret return + iabbrev <buffer> proc procedure + iabbrev <buffer> pack package + iabbrev <buffer> 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 +" +" Section: b:undo_ftplugin {{{1 +let b:undo_ftplugin = "setl fo< comments< tw< commentstring< complete< " + \ . "| setl completefunc< omnifunc< ts< sts< sw< fdm< fde< fdi< " + \ . "| setl fdm< fde< fdi< fdn< " + \ . "| unlet! b:match_words " + +" 1}}} +" Reset cpoptions +let &cpoptions = s:cpoptions +unlet s:cpoptions + +finish " 1}}} + +"------------------------------------------------------------------------------ +" Copyright (C) 2006 Martin Krischik +" +" MNV is Charityware - see ":help license" or uganda.txt for licence details. +"------------------------------------------------------------------------------ +" mnv: textwidth=78 nowrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab +" mnv: foldmethod=marker diff --git a/mnv/runtime/ftplugin/alsaconf.mnv b/mnv/runtime/ftplugin/alsaconf.mnv new file mode 100644 index 0000000000..570bb876e4 --- /dev/null +++ b/mnv/runtime/ftplugin/alsaconf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/ant.mnv b/mnv/runtime/ftplugin/ant.mnv new file mode 100644 index 0000000000..80fd70f7fc --- /dev/null +++ b/mnv/runtime/ftplugin/ant.mnv @@ -0,0 +1,51 @@ +" MNV filetype plugin file +" Language: ant +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif + +runtime! ftplugin/xml.mnv ftplugin/xml_*.mnv ftplugin/xml/*.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/antlr4.mnv b/mnv/runtime/ftplugin/antlr4.mnv new file mode 100644 index 0000000000..a17cc6df38 --- /dev/null +++ b/mnv/runtime/ftplugin/antlr4.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: ANTLR4, ANother Tool for Language Recognition v4 <www.antlr.org> +" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com> +" Last Change: 2024 July 09 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/apache.mnv b/mnv/runtime/ftplugin/apache.mnv new file mode 100644 index 0000000000..3896ec8e31 --- /dev/null +++ b/mnv/runtime/ftplugin/apache.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin +" Language: apache configuration file +" Maintainer: Per Juchtmans <dubgeiser+mnvNOSPAM@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<" + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/arch.mnv b/mnv/runtime/ftplugin/arch.mnv new file mode 100644 index 0000000000..8827f47090 --- /dev/null +++ b/mnv/runtime/ftplugin/arch.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/arduino.mnv b/mnv/runtime/ftplugin/arduino.mnv new file mode 100644 index 0000000000..e2e0694685 --- /dev/null +++ b/mnv/runtime/ftplugin/arduino.mnv @@ -0,0 +1,67 @@ +" MNV filetype plugin file +" Language: Arduino +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Ken Takata <https://github.com/k-takata> +" Last Change: 2024 Apr 12 +" 2024 Jun 02 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" +" Most of the part was copied from c.mnv. + +" 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 !exists("g:arduino_recommended_style") || g:arduino_recommended_style != 0 + " Use the default setting of Arduino IDE. + setlocal expandtab tabstop=2 softtabstop=2 shiftwidth=2 + let b:undo_ftplugin ..= " et< ts< sts< sw<" +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=/*\ %s\ */ 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:*/,:///,:// + +" 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 and GTK can filter files in the browse dialog +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Arduino Source Files (*.ino, *.pde)\t*.ino;*.pde\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "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/mnv/runtime/ftplugin/art.mnv b/mnv/runtime/ftplugin/art.mnv new file mode 100644 index 0000000000..e44a659cb2 --- /dev/null +++ b/mnv/runtime/ftplugin/art.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin +" Language: ART-IM and ART*Enterprise +" Maintainer: Dorai Sitaram <ds26@gte.com> +" URL: http://www.ccs.neu.edu/~dorai/mnvplugins/mnvplugins.html +" Last Change: Apr 2, 2003 +" 2023 Aug 28 by MNV Project (undo_ftplugin) + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +run ftplugin/lisp.mnv + +setl lw-=if +setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,for,schema,while + +let b:undo_ftplugin ..= " | setl lw<" diff --git a/mnv/runtime/ftplugin/asciidoc.mnv b/mnv/runtime/ftplugin/asciidoc.mnv new file mode 100644 index 0000000000..4c29c6f34d --- /dev/null +++ b/mnv/runtime/ftplugin/asciidoc.mnv @@ -0,0 +1,68 @@ +" MNV filetype plugin file +" Original Author: Maxim Kim <habamax@gmail.com> +" Previous Maintainer: Luca Saccarola <github.e41mv@aleeas.com> +" Maintainer: This runtime file is looking for a new maintainer. +" Language: asciidoc +" Last Change: 2025 Aug 05 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= "|setl cms< com< fo< flp< inex< efm< cfu< fde< fdm<" +else + let b:undo_ftplugin = "setl cms< com< fo< flp< inex< efm< cfu< fde< fdm<" +endif + +" gf to open include::file.ext[] and link:file.ext[] files +setlocal includeexpr=substitute(v:fname,'\\(link:\\\|include::\\)\\(.\\{-}\\)\\[.*','\\2','g') + +setlocal comments= +setlocal commentstring=//\ %s + +setlocal formatoptions+=cqn +setlocal formatlistpat=^\\s*[\\[({]\\?\\([0-9]\\+ +setlocal formatlistpat+=\\\|[a-zA-Z]\\)[\\]:.)}]\\s\\+ +setlocal formatlistpat+=\\\|^\\s*-\\s\\+ +setlocal formatlistpat+=\\\|^\\s*[*]\\+\\s\\+ +setlocal formatlistpat+=\\\|^\\s*[.]\\+\\s\\+ + +function AsciidocFold() + let line = getline(v:lnum) + + if (v:lnum == 1) && (line =~ '^----*$') + return ">1" + endif + + let nested = get(g:, "asciidoc_foldnested", 1) + + " Regular headers + let depth = match(line, '\(^=\+\)\@<=\( .*$\)\@=') + + " Do not fold nested regular headers + if depth > 1 && !nested + let depth = 1 + endif + + if depth > 0 + " fold all sections under title + if depth > 1 && !get(g:, "asciidoc_fold_under_title", 1) + let depth -= 1 + endif + " check syntax, it should be asciidocTitle or asciidocH + let syncode = synstack(v:lnum, 1) + if len(syncode) > 0 && synIDattr(syncode[0], 'name') =~ 'asciidoc\%(H[1-6]\)\|Title' + return ">" . depth + endif + endif + + return "=" +endfunction + +if has("folding") && get(g:, 'asciidoc_folding', 0) + setlocal foldexpr=AsciidocFold() + setlocal foldmethod=expr + let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<" +endif diff --git a/mnv/runtime/ftplugin/asm.mnv b/mnv/runtime/ftplugin/asm.mnv new file mode 100644 index 0000000000..628af4988e --- /dev/null +++ b/mnv/runtime/ftplugin/asm.mnv @@ -0,0 +1,25 @@ +" MNV filetype plugin file +" Language: asm +" Maintainer: Colin Caine <cmcaine at the common googlemail domain> +" Last Change: 2020 May 23 +" 2023 Aug 28 by MNV Project (undo_ftplugin) +" 2024 Apr 09 by MNV Project (add Matchit support) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" 2026 Jan 19 by MNV Project (add # as comment symbol) + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +setl include=^\\s*%\\s*include +setl comments=:;,s1:/*,mb:*,ex:*/,://,:# +setl commentstring=;\ %s + +let b:undo_ftplugin = "setl commentstring< comments< include<" + +" Matchit support +if !exists('b:match_words') + let b:match_skip = 's:comment\|string\|character\|special' + let b:match_words = '^\s*%\s*if\%(\|num\|idn\|nidn\)\>:^\s*%\s*elif\>:^\s*%\s*else\>:^\s*%\s*endif\>,^\s*%\s*macro\>:^\s*%\s*endmacro\>,^\s*%\s*rep\>:^\s*%\s*endrep\>' + let b:match_ignorecase = 1 + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:match_skip" +endif diff --git a/mnv/runtime/ftplugin/aspvbs.mnv b/mnv/runtime/ftplugin/aspvbs.mnv new file mode 100644 index 0000000000..b4c34c987e --- /dev/null +++ b/mnv/runtime/ftplugin/aspvbs.mnv @@ -0,0 +1,67 @@ +" MNV filetype plugin file +" Language: aspvbs +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif +let s:match_words = "" + +runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/astro.mnv b/mnv/runtime/ftplugin/astro.mnv new file mode 100644 index 0000000000..57fcca9237 --- /dev/null +++ b/mnv/runtime/ftplugin/astro.mnv @@ -0,0 +1,192 @@ +" MNV filetype plugin file +" Language: Astro +" Maintainer: Romain Lafourcade <romainlafourcade@gmail.com> +" Last Change: 2024 Apr 21 +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" 2025 Aug 29 by MNV project, add try/catch around json_decode(), #18141 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo-=C + +function! s:IdentifyScope(start, end) abort + let pos_start = searchpairpos(a:start, '', a:end, 'bnW') + let pos_end = searchpairpos(a:start, '', a:end, 'nW') + + return pos_start != [0, 0] + \ && pos_end != [0, 0] + \ && pos_start[0] != getpos('.')[1] +endfunction + +function! s:AstroComments() abort + if s:IdentifyScope('^---\n\s*\S', '^---\n\n') + \ || s:IdentifyScope('^\s*<script', '^\s*<\/script>') + " ECMAScript comments + setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// + setlocal commentstring=//\ %s + + elseif s:IdentifyScope('^\s*<style', '^\s*<\/style>') + " CSS comments + setlocal comments=s1:/*,mb:*,ex:*/ + setlocal commentstring=/*\ %s\ */ + + else + " HTML comments + setlocal comments=s:<!--,m:\ \ \ \ ,e:--> + setlocal commentstring=<!--\ %s\ --> + endif +endfunction + +" https://code.visualstudio.com/docs/languages/jsconfig +function! s:CollectPathsFromConfig() abort + let config_json = findfile('tsconfig.json', '.;') + + if empty(config_json) + let config_json = findfile('jsconfig.json', '.;') + + if empty(config_json) + return + endif + endif + + try + let paths_from_config = config_json + \ ->readfile() + \ ->filter({ _, val -> val =~ '^\s*[\[\]{}"0-9]' }) + \ ->join() + \ ->json_decode() + \ ->get('compilerOptions', {}) + \ ->get('paths', {}) + catch /^MNV\%((\a\+)\)\=:E491:/ " invalid json + let paths_from_config = {} + endtry + + if !empty(paths_from_config) + let b:astro_paths = paths_from_config + \ ->map({key, val -> [ + \ key->glob2regpat(), + \ val[0]->substitute('\/\*$', '', '') + \ ]}) + \ ->values() + endif + + let b:undo_ftplugin ..= " | unlet! b:astro_paths" +endfunction + +function! s:AstroInclude(filename) abort + let decorated_filename = a:filename + \ ->substitute("^", "@", "") + + let found_path = b: + \ ->get("astro_paths", []) + \ ->indexof({ key, val -> decorated_filename =~ val[0]}) + + if found_path != -1 + let alias = b:astro_paths[found_path][0] + let path = b:astro_paths[found_path][1] + \ ->substitute('\(\/\)*$', '/', '') + + return decorated_filename + \ ->substitute(alias, path, '') + endif + + return a:filename +endfunction + +let b:undo_ftplugin = "setlocal" + \ .. " formatoptions<" + \ .. " path<" + \ .. " suffixesadd<" + \ .. " matchpairs<" + \ .. " comments<" + \ .. " commentstring<" + \ .. " iskeyword<" + \ .. " define<" + \ .. " include<" + \ .. " includeexpr<" + +" Create self-resetting autocommand group +augroup Astro + autocmd! * <buffer> +augroup END + +" Set 'formatoptions' to break comment lines but not other lines, +" and insert the comment leader when hitting <CR> or using "o". +setlocal formatoptions-=t +setlocal formatoptions+=croql + +" Remove irrelevant part of 'path'. +setlocal path-=/usr/include + +" Seed 'path' with default directories for :find, gf, etc. +setlocal path+=src/** +setlocal path+=public/** + +" Help MNV find extension-less filenames +let &l:suffixesadd = + \ ".astro" + \ .. ",.js,.jsx,.es,.es6,.cjs,.mjs,.jsm" + \ .. ",.json" + \ .. ",.scss,.sass,.css" + \ .. ",.svelte" + \ .. ",.ts,.tsx,.d.ts" + \ .. ",.vue" + +" From $MNVRUNTIME/ftplugin/html.mnv +setlocal matchpairs+=<:> + +" Matchit configuration +if exists("loaded_matchit") + let b:match_ignorecase = 0 + + " From $MNVRUNTIME/ftplugin/javascript.mnv + let b:match_words = + \ '\<do\>:\<while\>,' + \ .. '<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,' + \ .. '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>' + + " From $MNVRUNTIME/ftplugin/html.mnv + let b:match_words ..= + \ '<!--:-->,' + \ .. '<:>,' + \ .. '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' + \ .. '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' + \ .. '<\@<=\([^/!][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' + + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" +endif + +" Change what constitutes a word, mainly useful for CSS/SASS +setlocal iskeyword+=- +setlocal iskeyword+=$ +setlocal iskeyword+=% + +" Define paths/aliases for module resolution +call s:CollectPathsFromConfig() + +" Find ESM imports +setlocal include=^\\s*\\(import\\\|import\\s\\+[^\/]\\+from\\)\\s\\+['\"] + +" Process aliases if file can't be found +setlocal includeexpr=s:AstroInclude(v:fname) + +" Set 'define' to a comprehensive value +" From $MNVRUNTIME/ftplugin/javascript.mnv and +" $MNVRUNTIME/ftplugin/sass.mnv +let &l:define = + \ '\(^\s*(*async\s\+function\|(*function\)' + \ .. '\|^\s*\(\*\|static\|async\|get\|set\|\i\+\.\)' + \ .. '\|^\s*\(\ze\i\+\)\(([^)]*).*{$\|\s*[:=,]\)' + + +" Set &comments and &commentstring according to current scope +autocmd Astro CursorMoved <buffer> call s:AstroComments() + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: textwidth=78 tabstop=8 shiftwidth=4 softtabstop=4 expandtab diff --git a/mnv/runtime/ftplugin/asy.mnv b/mnv/runtime/ftplugin/asy.mnv new file mode 100644 index 0000000000..5ac4d51b3e --- /dev/null +++ b/mnv/runtime/ftplugin/asy.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: Asymptote +" Maintainer: AvidSeeker <avidseeker7@protonmail.com> +" Last Change: 2024 Jul 13 +" + +if exists("b:did_ftplugin") + finish +endif +let g:did_ftplugin = 1 + +setlocal commentstring=/*\ %s\ */ + +let b:undo_ftplugin = "setl commentstring<" diff --git a/mnv/runtime/ftplugin/autohotkey.mnv b/mnv/runtime/ftplugin/autohotkey.mnv new file mode 100644 index 0000000000..0b1627433e --- /dev/null +++ b/mnv/runtime/ftplugin/autohotkey.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: AutoHotkey +" Maintainer: Peter Aronoff <peteraronoff@fastmail.com> +" Last Changed: 2024 Jul 25 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:; +setlocal commentstring=;\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/automake.mnv b/mnv/runtime/ftplugin/automake.mnv new file mode 100644 index 0000000000..5825a828ec --- /dev/null +++ b/mnv/runtime/ftplugin/automake.mnv @@ -0,0 +1,16 @@ +" MNV 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&mnv + +runtime! ftplugin/make.mnv ftplugin/make_*.mnv ftplugin/make/*.mnv + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/autopkgtest.mnv b/mnv/runtime/ftplugin/autopkgtest.mnv new file mode 100644 index 0000000000..74799241a8 --- /dev/null +++ b/mnv/runtime/ftplugin/autopkgtest.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: Debian autopkgtest control files +" Maintainer: Debian MNV Maintainers +" Last Change: 2025 Jul 05 +" URL: https://salsa.debian.org/mnv-team/mnv-debian/blob/main/ftplugin/autopkgtest.mnv + +" Do these settings once per buffer +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin=1 + +setlocal comments=:# +setlocal commentstring=#\ %s + +" Clean unloading +let b:undo_ftplugin = 'setlocal comments< commentstring<' diff --git a/mnv/runtime/ftplugin/awk.mnv b/mnv/runtime/ftplugin/awk.mnv new file mode 100644 index 0000000000..a6f2ae6a04 --- /dev/null +++ b/mnv/runtime/ftplugin/awk.mnv @@ -0,0 +1,63 @@ +" MNV filetype plugin +" Language: awk, nawk, gawk, mawk +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Antonio Colombo <azc100@gmail.com> +" Last Change: 2024 Jan 14 + +" 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&mnv + +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<" + +" TODO: set this in scripts.mnv? +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 + + " Disabled by default for security reasons. + if dist#mnv#IsSafeExecutable('awk', 'gawk') + let path = system("gawk 'BEGIN { printf ENVIRON[\"AWKPATH\"] }'") + let path = substitute(path, '^\.\=:\|:\.\=$\|:\.\=:', ',,', 'g') " POSIX cwd + let path = substitute(path, ':', ',', 'g') + + let &l:path = path + endif + 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/bash.mnv b/mnv/runtime/ftplugin/bash.mnv new file mode 100644 index 0000000000..7068e16463 --- /dev/null +++ b/mnv/runtime/ftplugin/bash.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin file +" Language: bash +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Changed: 2023 Aug 13 +" +" 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.mnv ftplugin/sh_*.mnv ftplugin/sh/*.mnv + +" mnv: ts=8 diff --git a/mnv/runtime/ftplugin/basic.mnv b/mnv/runtime/ftplugin/basic.mnv new file mode 100644 index 0000000000..391e008dde --- /dev/null +++ b/mnv/runtime/ftplugin/basic.mnv @@ -0,0 +1,61 @@ +" MNV filetype plugin file +" Language: BASIC (QuickBASIC 4.5) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + 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 + +" mnv: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/mnv/runtime/ftplugin/bdf.mnv b/mnv/runtime/ftplugin/bdf.mnv new file mode 100644 index 0000000000..b42dfd964a --- /dev/null +++ b/mnv/runtime/ftplugin/bdf.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/bicep-params.mnv b/mnv/runtime/ftplugin/bicep-params.mnv new file mode 100644 index 0000000000..575b30e0b8 --- /dev/null +++ b/mnv/runtime/ftplugin/bicep-params.mnv @@ -0,0 +1,3 @@ +" Placeholder for maximum compatibility. While bicepparam files are treated as distinct filetypes, +" they are should share the same ftplugin settings as bicep files. +runtime! ftplugin/bicep.mnv diff --git a/mnv/runtime/ftplugin/bicep.mnv b/mnv/runtime/ftplugin/bicep.mnv new file mode 100644 index 0000000000..cf0605779c --- /dev/null +++ b/mnv/runtime/ftplugin/bicep.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: Bicep +" Maintainer: Scott McKendry <me@scottmckendry.tech> +" Last Change: 2025 Dec 27 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" diff --git a/mnv/runtime/ftplugin/bindzone.mnv b/mnv/runtime/ftplugin/bindzone.mnv new file mode 100644 index 0000000000..d7af2eaf89 --- /dev/null +++ b/mnv/runtime/ftplugin/bindzone.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: bind zone file +" Maintainer: This runtime file is looking for a new maintainer. +" Last Change: 2024 Jul 06 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin=1 + +setlocal comments=b:; +setlocal commentstring=;\ %s +setlocal formatoptions-=t +setlocal formatoptions+=crq + +let b:undo_ftplugin = "setlocal com< cms< fo<" diff --git a/mnv/runtime/ftplugin/bitbake.mnv b/mnv/runtime/ftplugin/bitbake.mnv new file mode 100644 index 0000000000..3ec01d9161 --- /dev/null +++ b/mnv/runtime/ftplugin/bitbake.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: Bitbake +" Maintainer: Gregory Anders <greg@gpanders.com> +" Repository: https://github.com/openembedded/bitbake +" Latest Revision: 2022-07-23 +" 2024-05-23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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/mnv/runtime/ftplugin/bp.mnv b/mnv/runtime/ftplugin/bp.mnv new file mode 100644 index 0000000000..d7d89e9f39 --- /dev/null +++ b/mnv/runtime/ftplugin/bp.mnv @@ -0,0 +1,14 @@ +" Blueprint build system filetype plugin file +" Language: Blueprint +" Maintainer: Bruno BELANYI <bruno.mnv@belanyi.fr> +" Latest Revision: 2024-04-19 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=b://,s1:/*,mb:*,ex:*/ +setlocal commentstring=//\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" diff --git a/mnv/runtime/ftplugin/bpftrace.mnv b/mnv/runtime/ftplugin/bpftrace.mnv new file mode 100644 index 0000000000..20aa6067a7 --- /dev/null +++ b/mnv/runtime/ftplugin/bpftrace.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin +" Language: bpftrace +" Maintainer: Stanislaw Gruszka <stf_xl@wp.pl> +" Last Change: 2025 Dec 23 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setlocal comments< commentstring< formatoptions<" diff --git a/mnv/runtime/ftplugin/brighterscript.mnv b/mnv/runtime/ftplugin/brighterscript.mnv new file mode 100644 index 0000000000..1f49983baa --- /dev/null +++ b/mnv/runtime/ftplugin/brighterscript.mnv @@ -0,0 +1,11 @@ +" MNV filetype plugin +" Language: Brighterscript +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Jun 17 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +runtime! ftplugin/brightscript.mnv diff --git a/mnv/runtime/ftplugin/brightscript.mnv b/mnv/runtime/ftplugin/brightscript.mnv new file mode 100644 index 0000000000..bc3ca4d1ab --- /dev/null +++ b/mnv/runtime/ftplugin/brightscript.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: Brightscript +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Jun 17 + +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/mnv/runtime/ftplugin/bst.mnv b/mnv/runtime/ftplugin/bst.mnv new file mode 100644 index 0000000000..31c34ace43 --- /dev/null +++ b/mnv/runtime/ftplugin/bst.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin file +" Language: bst +" Author: Tim Pope <mnvNOSPAM@tpope.info> +" $Id: bst.mnv,v 1.1 2007/05/05 17:37:57 mnvboss 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/mnv/runtime/ftplugin/btm.mnv b/mnv/runtime/ftplugin/btm.mnv new file mode 100644 index 0000000000..2eaf0031d6 --- /dev/null +++ b/mnv/runtime/ftplugin/btm.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin file +" Language: BTM +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +" Behaves just like dosbatch +runtime! ftplugin/dosbatch.mnv ftplugin/dosbatch_*.mnv ftplugin/dosbatch/*.mnv diff --git a/mnv/runtime/ftplugin/bzl.mnv b/mnv/runtime/ftplugin/bzl.mnv new file mode 100644 index 0000000000..68d38a3b11 --- /dev/null +++ b/mnv/runtime/ftplugin/bzl.mnv @@ -0,0 +1,101 @@ +" MNV filetype plugin file +" Language: Bazel (http://bazel.io) +" Maintainer: David Barnett (https://github.com/google/mnv-ft-bzl) +" Last Change: 2021 Jan 19 +" 2023 Aug 28 by MNV Project (undo_ftplugin) + +"" +" @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 + + +" MNV 7.4.051 has opinionated settings in ftplugin/python.mnv 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: MNV versions before 7.3.511 had a ftplugin/python.mnv that was broken +" for compatible mode. +let s:save_cpo = &cpo +set cpo&mnv + +" Load base python ftplugin (also defines b:did_ftplugin). +source $MNVRUNTIME/ftplugin/python.mnv + +" NOTE: MNV versions before 7.4.104 and later set this in ftplugin/python.mnv. +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 + +" Initially defined in the python ftplugin sourced above +let b:undo_ftplugin .= " | setlocal fo<" + +" 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() + let b:undo_ftplugin .= " | setlocal fdm< fdt<" +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/mnv/runtime/ftplugin/c.mnv b/mnv/runtime/ftplugin/c.mnv new file mode 100644 index 0000000000..a2ad5ece51 --- /dev/null +++ b/mnv/runtime/ftplugin/c.mnv @@ -0,0 +1,93 @@ +" MNV filetype plugin file +" Language: C +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2026 Feb 3 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" 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=/*\ %s\ */ define& include& + +" Set completion with CTRL-X CTRL-O to autoloaded function. +if exists('&ofu') && has("mnv9script") + 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 + +" Use terminal window for gui +if has('gui_running') && exists(':terminal') == 2 && executable("man") + setlocal keywordprg=:CKeywordPrg + + command! -buffer -nargs=1 -count CKeywordPrg call s:CKeywordPrg(<q-args>, <count>) + + function! s:CKeywordPrg(arg, count) abort + if a:count > 0 + exe printf('term ++close man -s %d %s', a:count, a:arg) + else + exe printf('term ++close man %s', a:arg) + endif + endfunction + + let b:undo_ftplugin .= ' | setl kp< | sil! delc -buffer CKeywordPrg' +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\%(\|def\|ndef\)\>:^\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 and GTK 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" + 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" + 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" + endif + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "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/mnv/runtime/ftplugin/c3.mnv b/mnv/runtime/ftplugin/c3.mnv new file mode 100644 index 0000000000..4bd5abfccd --- /dev/null +++ b/mnv/runtime/ftplugin/c3.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: C3 +" Maintainer: Turiiya <34311583+ttytm@users.noreply.github.com> +" Last Change: 2024 Nov 24 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// +setl commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/cabal.mnv b/mnv/runtime/ftplugin/cabal.mnv new file mode 100644 index 0000000000..a1a70c6315 --- /dev/null +++ b/mnv/runtime/ftplugin/cabal.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin file +" Language: Haskell Cabal Build file +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 +" 2026 Jan 13 by MNV project: set compiler #19152 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +compiler cabal + +let b:undo_ftplugin = 'compiler make' + +setl comments=:-- commentstring=--\ %s + +let b:undo_ftplugin .= '| setl com< cms<' diff --git a/mnv/runtime/ftplugin/calendar.mnv b/mnv/runtime/ftplugin/calendar.mnv new file mode 100644 index 0000000000..1452b2ce74 --- /dev/null +++ b/mnv/runtime/ftplugin/calendar.mnv @@ -0,0 +1,21 @@ +" MNV filetype plugin file +" Language: calendar(1) input file +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2008-07-09 +" 2024-06-02 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< inc< fo<" + +setlocal comments=s1:/*,mb:*,ex:*/ commentstring=/*\ %s\ */ include& +setlocal formatoptions-=t formatoptions+=croql + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/cdrdaoconf.mnv b/mnv/runtime/ftplugin/cdrdaoconf.mnv new file mode 100644 index 0000000000..49c324a33f --- /dev/null +++ b/mnv/runtime/ftplugin/cdrdaoconf.mnv @@ -0,0 +1,18 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/cedar.mnv b/mnv/runtime/ftplugin/cedar.mnv new file mode 100644 index 0000000000..6a11f6a249 --- /dev/null +++ b/mnv/runtime/ftplugin/cedar.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: Cedar +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 4 + +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/mnv/runtime/ftplugin/cfg.mnv b/mnv/runtime/ftplugin/cfg.mnv new file mode 100644 index 0000000000..4074f2a9fd --- /dev/null +++ b/mnv/runtime/ftplugin/cfg.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/cgdbrc.mnv b/mnv/runtime/ftplugin/cgdbrc.mnv new file mode 100644 index 0000000000..947d778aa8 --- /dev/null +++ b/mnv/runtime/ftplugin/cgdbrc.mnv @@ -0,0 +1,22 @@ +" MNV filetype plugin file +" Language: cgdbrc +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Documentation: https://cgdb.github.io/docs/Configuring-CGDB.html +" Latest Revision: 2024-04-09 +" 2024-05-23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpoptions = &cpoptions +set cpoptions&mnv + +let b:undo_ftplugin = 'setl com< cms<' + +setlocal commentstring=#\ %s +setlocal comments=:# + +let &cpoptions = s:save_cpoptions +unlet s:save_cpoptions diff --git a/mnv/runtime/ftplugin/ch.mnv b/mnv/runtime/ftplugin/ch.mnv new file mode 100644 index 0000000000..7aa0781900 --- /dev/null +++ b/mnv/runtime/ftplugin/ch.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: Ch +" Maintainer: SoftIntegration, Inc. <info@softintegration.com> +" URL: http://www.softintegration.com/download/mnv/ftplugin/ch.mnv +" Last change: 2004 May 16 +" Created based on cpp.mnv +" +" 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.mnv ftplugin/c_*.mnv ftplugin/c/*.mnv diff --git a/mnv/runtime/ftplugin/changelog.mnv b/mnv/runtime/ftplugin/changelog.mnv new file mode 100644 index 0000000000..cdccc7e1ad --- /dev/null +++ b/mnv/runtime/ftplugin/changelog.mnv @@ -0,0 +1,313 @@ +" MNV 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.mnv' 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&mnv + + " 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 s:default_login = 'unknown' + + " Disabled by default for security reasons. + if dist#mnv#IsSafeExecutable('changelog', 'whoami') + let login = s:login() + else + let login = s:default_login + endif + return printf('%s <%s@%s>', s:name(login), login, s:hostname()) + endfunction + + function! s:login() + return s:trimmed_system_with_default('whoami', s:default_login) + 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 a: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&mnv + + 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/mnv/runtime/ftplugin/chatito.mnv b/mnv/runtime/ftplugin/chatito.mnv new file mode 100644 index 0000000000..90f0f5b0e3 --- /dev/null +++ b/mnv/runtime/ftplugin/chatito.mnv @@ -0,0 +1,15 @@ +" MNV 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/mnv/runtime/ftplugin/chicken.mnv b/mnv/runtime/ftplugin/chicken.mnv new file mode 100644 index 0000000000..0778b95e9a --- /dev/null +++ b/mnv/runtime/ftplugin/chicken.mnv @@ -0,0 +1,55 @@ +" CHICKEN-specific MNV customizations +" Last Change: 2024 Jun 21 +" Author: Evan Hanson <evhan@foldling.org> +" Maintainer: Evan Hanson <evhan@foldling.org> +" Repository: https://git.foldling.org/mnv-scheme.git +" URL: https://foldling.org/mnv/ftplugin/chicken.mnv +" Notes: These are supplemental settings, to be loaded after the +" core Scheme ftplugin file (ftplugin/scheme.mnv). 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/mnv/runtime/ftplugin/clojure.mnv b/mnv/runtime/ftplugin/clojure.mnv new file mode 100644 index 0000000000..8830295c84 --- /dev/null +++ b/mnv/runtime/ftplugin/clojure.mnv @@ -0,0 +1,85 @@ +" MNV 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-mnv/clojure.mnv +" License: MNV (see :h license) +" Last Change: 2022-03-24 +" 2024 Jan 14 by MNV Project (browsefilter) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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-mnv/clojure.mnv/blob/fd280e33e84c88e97860930557dba3ff80b1a82d/clj/src/mnv_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 = "Clojure Files\t*.clj;*.cljc;*.cljs;*.cljx\n" . + \ "EDN Files\t*.edn\n" . + \ "Java Files\t*.java\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= ' | unlet! b:browsefilter' +endif + +let &cpo = s:cpo_save + +unlet! s:cpo_save s:setting s:dir + +" mnv:sts=8:sw=8:ts=8:noet diff --git a/mnv/runtime/ftplugin/cmake.mnv b/mnv/runtime/ftplugin/cmake.mnv new file mode 100644 index 0000000000..90755359f4 --- /dev/null +++ b/mnv/runtime/ftplugin/cmake.mnv @@ -0,0 +1,37 @@ +" MNV filetype plugin +" Language: CMake +" Maintainer: Keith Smiley <keithbsmiley@gmail.com> +" Last Change: 2018 Aug 30 +" 2024 Apr 20 - add include and suffixadd (MNV Project) + +" 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&mnv + +" Don't load another plugin for this buffer +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setl inc< sua< 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 include=\s*include +setlocal suffixesadd=.cmake,-config.cmake +setlocal commentstring=#\ %s + +" restore 'cpo' and clean up buffer variable +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/cmakecache.mnv b/mnv/runtime/ftplugin/cmakecache.mnv new file mode 100644 index 0000000000..40cb35407c --- /dev/null +++ b/mnv/runtime/ftplugin/cmakecache.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: cmakecache - CMakeCache.txt files generated by CMake +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +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/mnv/runtime/ftplugin/cobol.mnv b/mnv/runtime/ftplugin/cobol.mnv new file mode 100644 index 0000000000..74be3b1f09 --- /dev/null +++ b/mnv/runtime/ftplugin/cobol.mnv @@ -0,0 +1,274 @@ +" MNV filetype plugin file +" Language: cobol +" Maintainer: Ankit Jain <ajatkj@yahoo.co.in> +" (formerly Tim Pope <mnvNOSPAM@tpope.info>) +" Last Update: By Ankit Jain (add gtk support) on 15.08.2020 +" 2024 Jan 14 by MNV Project (browsefilter) + +" 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&mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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/mnv/runtime/ftplugin/codeowners.mnv b/mnv/runtime/ftplugin/codeowners.mnv new file mode 100644 index 0000000000..c2d6c75f06 --- /dev/null +++ b/mnv/runtime/ftplugin/codeowners.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: codeowners +" Maintainer: Jon Parise <jon@indelible.org> +" Last Change: 2025 Sep 14 +" +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=:# commentstring=#\ %s +setl formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = 'setl com< cms< fo<' diff --git a/mnv/runtime/ftplugin/conf.mnv b/mnv/runtime/ftplugin/conf.mnv new file mode 100644 index 0000000000..472db6a905 --- /dev/null +++ b/mnv/runtime/ftplugin/conf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/config.mnv b/mnv/runtime/ftplugin/config.mnv new file mode 100644 index 0000000000..1e463c223d --- /dev/null +++ b/mnv/runtime/ftplugin/config.mnv @@ -0,0 +1,49 @@ +" MNV filetype plugin file +" Language: config +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif +let s:match_words = "" + +runtime! ftplugin/sh.mnv ftplugin/sh_*.mnv ftplugin/sh/*.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/confini.mnv b/mnv/runtime/ftplugin/confini.mnv new file mode 100644 index 0000000000..9a30c7eada --- /dev/null +++ b/mnv/runtime/ftplugin/confini.mnv @@ -0,0 +1,10 @@ +" MNV 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.mnv diff --git a/mnv/runtime/ftplugin/context.mnv b/mnv/runtime/ftplugin/context.mnv new file mode 100644 index 0000000000..187e9278fd --- /dev/null +++ b/mnv/runtime/ftplugin/context.mnv @@ -0,0 +1,117 @@ +mnv9script + +# MNV filetype plugin file +# Language: ConTeXt typesetting engine +# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> +# Former Maintainers: Nikolai Weibull <now@bitwi.se> +# Latest Revision: 2026 Jan 10 + +if exists("b:did_ftplugin") + finish +endif + +import autoload '../autoload/context.mnv' + +b:did_ftplugin = 1 + +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 + +if !exists('current_compiler') + b:undo_ftplugin ..= "| compiler make" + compiler context +endif + +b:undo_ftplugin ..= "| sil! delc -buffer ConTeXt | sil! delc -buffer ConTeXtLog | sil! delc -buffer ConTeXtJobStatus | sil! delc -buffer ConTeXtStopJobs" +# Commands for asynchronous typesetting +command! -buffer -nargs=? -complete=buffer ConTeXt context.Typeset(<q-args>) +command! -buffer -nargs=0 ConTeXtLog context.Log(bufname('%')) +command! -nargs=0 ConTeXtJobStatus context.JobStatus() +command! -nargs=0 ConTeXtStopJobs context.StopJobs() + +# mnv: sw=2 fdm=marker diff --git a/mnv/runtime/ftplugin/cook.mnv b/mnv/runtime/ftplugin/cook.mnv new file mode 100644 index 0000000000..3ffb009bb9 --- /dev/null +++ b/mnv/runtime/ftplugin/cook.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: Cooklang +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Nov 03 + +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/mnv/runtime/ftplugin/corn.mnv b/mnv/runtime/ftplugin/corn.mnv new file mode 100644 index 0000000000..15ab73a87d --- /dev/null +++ b/mnv/runtime/ftplugin/corn.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin +" Language: Corn +" Original Author: Jake Stanger (mail@jstanger.dev) +" License: MIT +" Last Change: 2023 May 28 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal formatoptions-=t + +" Set comment (formatting) related options. +setlocal commentstring=//\ %s comments=:// + +" Let MNV know how to disable the plug-in. +let b:undo_ftplugin = 'setlocal commentstring< comments< formatoptions<' diff --git a/mnv/runtime/ftplugin/cpp.mnv b/mnv/runtime/ftplugin/cpp.mnv new file mode 100644 index 0000000000..5c3f746359 --- /dev/null +++ b/mnv/runtime/ftplugin/cpp.mnv @@ -0,0 +1,22 @@ +" MNV filetype plugin file +" Language: C++ +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2024 Jun 06 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" 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.mnv ftplugin/c_*.mnv ftplugin/c/*.mnv + +" Change 'commentstring' to "C++ style"/"mono-line" comments +setlocal commentstring=//\ %s +let b:undo_ftplugin ..= ' | setl commentstring<' + +" 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/mnv/runtime/ftplugin/crm.mnv b/mnv/runtime/ftplugin/crm.mnv new file mode 100644 index 0000000000..010769dfe2 --- /dev/null +++ b/mnv/runtime/ftplugin/crm.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/crontab.mnv b/mnv/runtime/ftplugin/crontab.mnv new file mode 100644 index 0000000000..901a1327cb --- /dev/null +++ b/mnv/runtime/ftplugin/crontab.mnv @@ -0,0 +1,16 @@ +" MNV 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/mnv/runtime/ftplugin/cs.mnv b/mnv/runtime/ftplugin/cs.mnv new file mode 100644 index 0000000000..280723b6bb --- /dev/null +++ b/mnv/runtime/ftplugin/cs.mnv @@ -0,0 +1,51 @@ +" MNV filetype plugin file +" Language: C# +" Maintainer: Nick Jensen <nickspoon@gmail.com> +" Former Maintainer: Johannes Zellner <johannes@zellner.org> +" Last Change: 2025-03-14 +" License: MNV (see :h license) +" Repository: https://github.com/nickspoons/mnv-cs + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpoptions +set cpoptions&mnv + +" 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 cinoptions=J1 + +let b:undo_ftplugin = 'setl com< fo< cino<' + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= ' | unlet! b:browsefilter' +endif + +let &cpoptions = s:save_cpo +unlet s:save_cpo + +" mnv:et:sw=2:sts=2 diff --git a/mnv/runtime/ftplugin/csc.mnv b/mnv/runtime/ftplugin/csc.mnv new file mode 100644 index 0000000000..d4b23da1d8 --- /dev/null +++ b/mnv/runtime/ftplugin/csc.mnv @@ -0,0 +1,29 @@ +" MNV 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/mnv/runtime/ftplugin/csh.mnv b/mnv/runtime/ftplugin/csh.mnv new file mode 100644 index 0000000000..8af49bd51d --- /dev/null +++ b/mnv/runtime/ftplugin/csh.mnv @@ -0,0 +1,82 @@ +" MNV filetype plugin file +" Language: csh +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Contributor: Johannes Zellner <johannes@zellner.org> +" Riley Bruins <ribru17@gmail.com> +" Last Change: 2026 Jan 16 + +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<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 0 + let b:match_words = "CshMatchWords()" + let b:match_skip = "CshMatchSkip()" + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_skip b:match_words" +endif + +" skip single line 'if' commands +function CshMatchSkip() + return getline(".") =~# '^\s*if\>' && !s:CshIsIfThenCommand() +endfunction + +function CshMatchWords() + let line_start = '\%(^\s*\)\@<=' + let match_words = + \ line_start .. '\%(foreach\s\+\h\w*\s*(\|while\>\):' .. + \ '\<break\>:\<continue\>:' .. + \ line_start .. 'end\>,' .. + \ line_start .. 'switch\s*(:' .. + \ line_start .. 'case\s\+:' .. line_start .. 'default\>:\<breaksw\>:' .. + \ line_start .. 'endsw\>' + + if expand("<cword>") =~# '\<if\>' && !s:CshIsIfThenCommand() + return match_words + else + return match_words .. "," .. + \ line_start .. 'if\>:' .. + \ line_start .. 'else\s\+if\>:' .. line_start .. 'else\>:' .. + \ line_start .. 'endif\>' + endif +endfunction + +function s:CshIsIfThenCommand() + let lnum = line(".") + let line = getline(lnum) + + " join continued lines + while lnum < line("$") && line =~ '^\%([^\\]\|\\\\\)*\\$' + let lnum += 1 + let line = substitute(line, '\\$', '', '') .. getline(lnum) + endwhile + + " TODO: confirm with syntax checks when the highlighting is more accurate + return line =~# '^\s*if\>.*\<then\s*\%(#.*\)\=$' +endfunction + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "csh Scripts (*.csh)\t*.csh\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:csh_set_browsefilter = 1 + let b:undo_ftplugin ..= " | unlet! b:browsefilter b:csh_set_browsefilter" +endif + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/mnv/runtime/ftplugin/css.mnv b/mnv/runtime/ftplugin/css.mnv new file mode 100644 index 0000000000..08664f8919 --- /dev/null +++ b/mnv/runtime/ftplugin/css.mnv @@ -0,0 +1,26 @@ +" MNV filetype plugin file +" Language: CSS +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Last Change: 2020 Dec 21 +" 2024 Jun 02 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< inc< fo< ofu< isk<" + +setlocal comments=s1:/*,mb:*,ex:*/ commentstring=/*\ %s\ */ +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/mnv/runtime/ftplugin/csv.mnv b/mnv/runtime/ftplugin/csv.mnv new file mode 100644 index 0000000000..5e76e86412 --- /dev/null +++ b/mnv/runtime/ftplugin/csv.mnv @@ -0,0 +1,23 @@ +mnv9script + +# Maintainer: Maxim Kim <habamax@gmail.com> +# Last Update: 2024-06-18 + +if !exists("b:csv_delimiter") + # detect delimiter + var delimiters = ",;\t|" + + var max = 0 + for d in delimiters + var count = getline(1)->split(d)->len() + getline(2)->split(d)->len() + if count > max + max = count + b:csv_delimiter = d + endif + endfor +endif + +if exists("b:did_ftplugin") + finish +endif +b:did_ftplugin = 1 diff --git a/mnv/runtime/ftplugin/cucumber.mnv b/mnv/runtime/ftplugin/cucumber.mnv new file mode 100644 index 0000000000..2ba874bc33 --- /dev/null +++ b/mnv/runtime/ftplugin/cucumber.mnv @@ -0,0 +1,150 @@ +" MNV filetype plugin +" Language: Cucumber +" Maintainer: Tim Pope <mnvNOSPAM@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&mnv + +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 mnvpattern = substitute(substitute(pattern,'\\\@<!(?:','%(','g'),'\\\@<!\*?','{-}','g') + if a:target =~# '\v'.mnvpattern + return 1 + endif + catch + endtry + if has("ruby") && pattern !~ '\\\@<!#{' + ruby MNV.command("return #{if (begin; Kernel.eval('/'+MNV.evaluate('pattern')+'/'); rescue SyntaxError; end) === MNV.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 + +" mnv:set sts=2 sw=2: diff --git a/mnv/runtime/ftplugin/cuda.mnv b/mnv/runtime/ftplugin/cuda.mnv new file mode 100644 index 0000000000..84304345f8 --- /dev/null +++ b/mnv/runtime/ftplugin/cuda.mnv @@ -0,0 +1,11 @@ +" MNV filetype plugin +" Language: CUDA +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 29 + +if exists('b:did_ftplugin') + finish +endif + +" Behaves mostly just like C++ +runtime! ftplugin/cpp.mnv diff --git a/mnv/runtime/ftplugin/cvsrc.mnv b/mnv/runtime/ftplugin/cvsrc.mnv new file mode 100644 index 0000000000..8298c74031 --- /dev/null +++ b/mnv/runtime/ftplugin/cvsrc.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/dart.mnv b/mnv/runtime/ftplugin/dart.mnv new file mode 100644 index 0000000000..6437913fcc --- /dev/null +++ b/mnv/runtime/ftplugin/dart.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: dart +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 18 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +" Set 'comments' to format dashed lists in comments. +" Also include ///, used for Doxygen. +setl comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/dax.mnv b/mnv/runtime/ftplugin/dax.mnv new file mode 100644 index 0000000000..5f6957a3fd --- /dev/null +++ b/mnv/runtime/ftplugin/dax.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin +" Language: Data Analysis Expressions (DAX) +" Maintainer: Anarion Dunedain <anarion80@gmail.com> +" Last Change: 2025 Apr 2 + +if exists('b:did_ftplugin') + finish +endif + +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// + +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/deb822sources.mnv b/mnv/runtime/ftplugin/deb822sources.mnv new file mode 100644 index 0000000000..d7f2e5ec21 --- /dev/null +++ b/mnv/runtime/ftplugin/deb822sources.mnv @@ -0,0 +1,16 @@ +" Language: Debian sources.list +" Maintainer: Debian MNV Maintainers <team+mnv@tracker.debian.org> +" Last Change: 2024 May 25 +" License: MNV License +" URL: https://salsa.debian.org/mnv-team/mnv-debian/blob/main/ftplugin/deb822sources.mnv + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin=1 + +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t + +let b:undo_ftplugin = 'setlocal comments< commentstring< formatoptions<' diff --git a/mnv/runtime/ftplugin/debchangelog.mnv b/mnv/runtime/ftplugin/debchangelog.mnv new file mode 100644 index 0000000000..141d868875 --- /dev/null +++ b/mnv/runtime/ftplugin/debchangelog.mnv @@ -0,0 +1,394 @@ +" MNV filetype plugin file (GUI menu, folding and completion) +" Language: Debian Changelog +" Maintainer: Debian MNV Maintainers <team+mnv@tracker.debian.org> +" Former Maintainers: Michael Piefel <piefel@informatik.hu-berlin.de> +" Stefano Zacchiroli <zack@debian.org> +" Last Change: 2023 Aug 18 +" License: MNV License +" URL: https://salsa.debian.org/mnv-team/mnv-debian/blob/main/ftplugin/debchangelog.mnv + +" 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&mnv + +" {{{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' doesn't support key annotation (<c-a>) directly. + " MNV'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 'mnv must be built with Python support to use LP bug completion' + return + endif + let pkgsrc = DebGetPkgSrcName(line('.')) + python << EOF +import mnv +try: + from launchpadlib.launchpad import Launchpad + from lazr.restfulclient.errors import HTTPError + # login anonymously + lp = Launchpad.login_anonymously('debchangelog.mnv', 'production') + ubuntu = lp.distributions['ubuntu'] + try: + sp = ubuntu.getSourcePackage(name=mnv.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 += ']' + mnv.command('silent let bug_lines = %s' % liststr.encode('utf-8')) + except HTTPError: + pass +except ImportError: + mnv.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 + +" mnv: set foldmethod=marker: diff --git a/mnv/runtime/ftplugin/debcontrol.mnv b/mnv/runtime/ftplugin/debcontrol.mnv new file mode 100644 index 0000000000..7f4c6ea1ea --- /dev/null +++ b/mnv/runtime/ftplugin/debcontrol.mnv @@ -0,0 +1,73 @@ +" MNV filetype plugin file (GUI menu and folding) +" Language: Debian control files +" Maintainer: Debian MNV Maintainers +" Former Maintainer: Pierre Habouzit <madcoder@debian.org> +" Last Change: 2024 May 25 +" URL: https://salsa.debian.org/mnv-team/mnv-debian/blob/main/ftplugin/debcontrol.mnv + +" 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 + +setlocal comments=:# +setlocal commentstring=#\ %s + +" Clean unloading +let b:undo_ftplugin = 'setlocal tw< foldmethod< foldexpr< foldtext< comments< commentstring<' + +" }}}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/mnv/runtime/ftplugin/debsources.mnv b/mnv/runtime/ftplugin/debsources.mnv new file mode 100644 index 0000000000..23239ca108 --- /dev/null +++ b/mnv/runtime/ftplugin/debsources.mnv @@ -0,0 +1,16 @@ +" Language: Debian sources.list +" Maintainer: Debian MNV Maintainers <team+mnv@tracker.debian.org> +" Last Change: 2024 May 25 +" License: MNV License +" URL: https://salsa.debian.org/mnv-team/mnv-debian/blob/main/ftplugin/debsources.mnv + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin=1 + +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t + +let b:undo_ftplugin = 'setlocal comments< commentstring< formatoptions<' diff --git a/mnv/runtime/ftplugin/denyhosts.mnv b/mnv/runtime/ftplugin/denyhosts.mnv new file mode 100644 index 0000000000..49c324a33f --- /dev/null +++ b/mnv/runtime/ftplugin/denyhosts.mnv @@ -0,0 +1,18 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/desktop.mnv b/mnv/runtime/ftplugin/desktop.mnv new file mode 100644 index 0000000000..715f82b6f7 --- /dev/null +++ b/mnv/runtime/ftplugin/desktop.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: XDG desktop entry +" Maintainer: Eisuke Kawashima ( e.kawaschima+mnv AT gmail.com ) +" Last Change: 2022-07-26 +" 2024-05-24 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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/mnv/runtime/ftplugin/dictconf.mnv b/mnv/runtime/ftplugin/dictconf.mnv new file mode 100644 index 0000000000..faeaf47c4d --- /dev/null +++ b/mnv/runtime/ftplugin/dictconf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/dictdconf.mnv b/mnv/runtime/ftplugin/dictdconf.mnv new file mode 100644 index 0000000000..6043192885 --- /dev/null +++ b/mnv/runtime/ftplugin/dictdconf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/diff.mnv b/mnv/runtime/ftplugin/diff.mnv new file mode 100644 index 0000000000..15692af16e --- /dev/null +++ b/mnv/runtime/ftplugin/diff.mnv @@ -0,0 +1,29 @@ +" MNV filetype plugin file +" Language: Diff +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2023 Aug 22 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" 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\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif diff --git a/mnv/runtime/ftplugin/dircolors.mnv b/mnv/runtime/ftplugin/dircolors.mnv new file mode 100644 index 0000000000..242a6bf5c0 --- /dev/null +++ b/mnv/runtime/ftplugin/dircolors.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/dnsmasq.mnv b/mnv/runtime/ftplugin/dnsmasq.mnv new file mode 100644 index 0000000000..c6a8e612e5 --- /dev/null +++ b/mnv/runtime/ftplugin/dnsmasq.mnv @@ -0,0 +1,11 @@ +" MNV filetype plugin +" Language: dnsmasq +" Maintainer: dringsim <dringsim@qq.com> +" Last Change: 2025-02-18 + +if exists('b:did_ftplugin') + finish +endif + +" Behaves mostly just like cfg +runtime! ftplugin/cfg.mnv diff --git a/mnv/runtime/ftplugin/docbk.mnv b/mnv/runtime/ftplugin/docbk.mnv new file mode 100644 index 0000000000..ae6d5ece02 --- /dev/null +++ b/mnv/runtime/ftplugin/docbk.mnv @@ -0,0 +1,24 @@ +" MNV 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.mnv ftplugin/sgml_*.mnv ftplugin/sgml/*.mnv +else + runtime! ftplugin/xml.mnv ftplugin/xml_*.mnv ftplugin/xml/*.mnv +endif + +let b:undo_ftplugin = "unlet! b:docbk_type" diff --git a/mnv/runtime/ftplugin/dockerfile.mnv b/mnv/runtime/ftplugin/dockerfile.mnv new file mode 100644 index 0000000000..c830f232d1 --- /dev/null +++ b/mnv/runtime/ftplugin/dockerfile.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin +" Language: Dockerfile +" Maintainer: Honza Pokorny <http://honza.ca> +" Last Change: 2025 Feb 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 comments=:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setl comments< commentstring<" diff --git a/mnv/runtime/ftplugin/dosbatch.mnv b/mnv/runtime/ftplugin/dosbatch.mnv new file mode 100644 index 0000000000..8034debdbe --- /dev/null +++ b/mnv/runtime/ftplugin/dosbatch.mnv @@ -0,0 +1,54 @@ +" MNV filetype plugin file +" Language: MS-DOS/Windows .bat files +" Maintainer: Mike Williams <mrmrdubya@gmail.com> +" Last Change: 12th February 2023 +" 2024 Jan 14 by MNV Project (browsefilter) +" +" 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&mnv + +" 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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +endif + +let b:undo_ftplugin = "setlocal comments< formatoptions< keywordprg<" + \ . "| unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/dosini.mnv b/mnv/runtime/ftplugin/dosini.mnv new file mode 100644 index 0000000000..47e78256fe --- /dev/null +++ b/mnv/runtime/ftplugin/dosini.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin file +" Language: Configuration File (ini file) for MS-DOS/MS Windows +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025 Feb 20 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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/mnv/runtime/ftplugin/dtd.mnv b/mnv/runtime/ftplugin/dtd.mnv new file mode 100644 index 0000000000..13b1cd5774 --- /dev/null +++ b/mnv/runtime/ftplugin/dtd.mnv @@ -0,0 +1,48 @@ +" MNV filetype plugin file +" Language: dtd +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter="DTD Files (*.dtd)\t*.dtd\n" . + \ "XML Files (*.xml)\t*.xml\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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/mnv/runtime/ftplugin/dtrace.mnv b/mnv/runtime/ftplugin/dtrace.mnv new file mode 100644 index 0000000000..a276b310a3 --- /dev/null +++ b/mnv/runtime/ftplugin/dtrace.mnv @@ -0,0 +1,41 @@ +" Language: D script as described in "Solaris Dynamic Tracing Guide", +" http://docs.sun.com/app/docs/doc/817-6223 +" Last Change: 2008/03/20 +" 2024/05/23 by Riley Bruins <ribru17@gmail.com ('commentstring') +" 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/mnv/runtime/ftplugin/dts.mnv b/mnv/runtime/ftplugin/dts.mnv new file mode 100644 index 0000000000..1fc5278e16 --- /dev/null +++ b/mnv/runtime/ftplugin/dts.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: dts/dtsi (device tree files) +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Latest Revision: 2024 Apr 12 +" 2024 Jun 02 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = 'setl inc< cms< com<' + +setlocal include=^\\%(#include\\\|/include/\\) +" same as C +setlocal commentstring=/*\ %s\ */ +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// diff --git a/mnv/runtime/ftplugin/dune.mnv b/mnv/runtime/ftplugin/dune.mnv new file mode 100644 index 0000000000..0ecdec6595 --- /dev/null +++ b/mnv/runtime/ftplugin/dune.mnv @@ -0,0 +1,24 @@ +" Language: Dune buildsystem +" Maintainer: Markus Mottl <markus.mottl@gmail.com> +" Anton Kochkov <anton.kochkov@gmail.com> +" URL: https://github.com/ocaml/mnv-ocaml +" Last Change: +" 2023 Aug 28 - Added undo_ftplugin (MNV Project) +" 2018 Nov 03 - Added commentstring (Markus Mottl) +" 2017 Sep 06 - Initial version (Etienne Millon) +" 2024 Nov 09 - use setl instead of :set + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin=1 + +setl lisp + +" Comment string +setl commentstring=;\ %s +setl comments=:; + +setl iskeyword+=#,?,.,/ + +let b:undo_ftplugin = "setl lisp< cms< com< isk<" diff --git a/mnv/runtime/ftplugin/editorconfig.mnv b/mnv/runtime/ftplugin/editorconfig.mnv new file mode 100644 index 0000000000..ce7314dacc --- /dev/null +++ b/mnv/runtime/ftplugin/editorconfig.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: EditorConfig +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Jan 10 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=:#,:; commentstring=#\ %s + +setl omnifunc=syntaxcomplete#Complete + +let b:undo_ftplugin = 'setl com< cms< ofu<' diff --git a/mnv/runtime/ftplugin/eiffel.mnv b/mnv/runtime/ftplugin/eiffel.mnv new file mode 100644 index 0000000000..05ed7dd258 --- /dev/null +++ b/mnv/runtime/ftplugin/eiffel.mnv @@ -0,0 +1,100 @@ +" MNV filetype plugin +" Language: Eiffel +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if (exists("b:did_ftplugin")) + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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 + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/elinks.mnv b/mnv/runtime/ftplugin/elinks.mnv new file mode 100644 index 0000000000..cf6e7a4d3f --- /dev/null +++ b/mnv/runtime/ftplugin/elinks.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/elixir.mnv b/mnv/runtime/ftplugin/elixir.mnv new file mode 100644 index 0000000000..159ca7ba30 --- /dev/null +++ b/mnv/runtime/ftplugin/elixir.mnv @@ -0,0 +1,39 @@ +" Elixir filetype plugin +" Language: Elixir +" Maintainer: Mitchell Hanberg <mnvNOSPAM@mitchellhanberg.com> +" Last Change: 2023 Dec 27 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&mnv + +" 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 + +setlocal indentkeys=0#,!^F,o,O +" Enable keys for blocks +setlocal indentkeys+=0=after,0=catch,0=do,0=else,0=end,0=rescue +" Enable keys that are usually the first keys in a line +setlocal indentkeys+=0->,0\|>,0},0],0),> + +let b:undo_ftplugin = 'setlocal sw< sts< et< isk< com< cms< indk<' + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/mnv/runtime/ftplugin/elm.mnv b/mnv/runtime/ftplugin/elm.mnv new file mode 100644 index 0000000000..5ffcdce456 --- /dev/null +++ b/mnv/runtime/ftplugin/elm.mnv @@ -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&mnv + +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/mnv/runtime/ftplugin/env.mnv b/mnv/runtime/ftplugin/env.mnv new file mode 100644 index 0000000000..54479d8106 --- /dev/null +++ b/mnv/runtime/ftplugin/env.mnv @@ -0,0 +1,19 @@ +" MNV filetype plugin file +" Language: env +" Maintainer: This runtime file is looking for a new maintainer. +" Last Change: 2026 Feb 27 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< fo<" + +setlocal comments=b:# commentstring=#\ %s formatoptions-=t formatoptions+=croql + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/erlang.mnv b/mnv/runtime/ftplugin/erlang.mnv new file mode 100644 index 0000000000..7538a1eef3 --- /dev/null +++ b/mnv/runtime/ftplugin/erlang.mnv @@ -0,0 +1,120 @@ +" MNV 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) +" Paweł Zacharek (http://github.com/subc2) +" Riley Bruins (http://github.com/ribru17) ('commentstring') +" Last Update: 2024 May 23 +" License: MNV license +" URL: https://github.com/mnv-erlang/mnv-erlang-runtime + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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 = '^\l[A-Za-z0-9_@]*(.*$' +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 + +" The following lines enable the macros/matchit.mnv plugin for extended +" matching with the % key. +let b:match_ignorecase = 0 +let b:match_words = + \ '\<\%(begin\|case\|fun\|if\|maybe\|receive\|try\)\>' . + \ ':\<\%(after\|catch\|else\|of\)\>' . + \ ':\<end\>,' . + \ '^\l[A-Za-z0-9_@]*' . + \ ':^\%(\%(\t\| \{' . shiftwidth() . + \ '}\)\%([^\t\ %][^%]*\)\?\)\?;\s*\%(%.*\)\?$\|\.[\t\ %]\|\.$' +let b:match_skip = 's:comment\|string\|erlangmodifier\|erlangquotedatom' + +let b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<" + \ . " comments< commentstring< formatoptions< suffixesadd< include<" + \ . " define<" + \ . " | unlet b:match_ignorecase b:match_words b:match_skip" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: sw=2 et diff --git a/mnv/runtime/ftplugin/eruby.mnv b/mnv/runtime/ftplugin/eruby.mnv new file mode 100644 index 0000000000..3c84f7e17d --- /dev/null +++ b/mnv/runtime/ftplugin/eruby.mnv @@ -0,0 +1,141 @@ +" MNV filetype plugin +" Language: eRuby +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" URL: https://github.com/mnv-ruby/mnv-ruby +" Last Change: 2022 May 15 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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 = "" +if has("win32") + let s:browsefilter = "All Files (*.*)\t*\n" +else + let s:browsefilter = "All Files (*)\t*\n" +endif +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.".mnv ftplugin/".b:eruby_subtype."_*.mnv ftplugin/".b:eruby_subtype."/*.mnv" +else + runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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.mnv ftplugin/ruby_*.mnv ftplugin/ruby/*.mnv +let b:did_ftplugin = 1 + +" Combine the new set of values with those previously included. +if !exists('b:undo_ftplugin') + " No-op + let b:undo_ftplugin = 'exe' +endif +if !empty(s:undo_ftplugin) + let 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 and GTK to show mainly eRuby-related files +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter="eRuby Files (*.erb, *.rhtml)\t*.erb;*.rhtml\n" . s:browsefilter +endif + +" Load the combined list of match_words for matchit.mnv +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 | " . b: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 + +" mnv: nowrap sw=2 sts=2 ts=8: diff --git a/mnv/runtime/ftplugin/eterm.mnv b/mnv/runtime/ftplugin/eterm.mnv new file mode 100644 index 0000000000..bcd87cd4d8 --- /dev/null +++ b/mnv/runtime/ftplugin/eterm.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/expect.mnv b/mnv/runtime/ftplugin/expect.mnv new file mode 100644 index 0000000000..25073d0ac7 --- /dev/null +++ b/mnv/runtime/ftplugin/expect.mnv @@ -0,0 +1,28 @@ +" MNV filetype plugin file +" Language: Expect +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif + +" Syntax is similar to Tcl +runtime! ftplugin/tcl.mnv + +let s:cpo_save = &cpo +set cpo&mnv + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Expect Command Files (*.exp)\t*.exp\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/exports.mnv b/mnv/runtime/ftplugin/exports.mnv new file mode 100644 index 0000000000..03b4ec3b6f --- /dev/null +++ b/mnv/runtime/ftplugin/exports.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: exports(5) configuration file +" Maintainer: Matt Perry <matt@mattperry.com> +" Last Change: 2025 Feb 13 + +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/mnv/runtime/ftplugin/falcon.mnv b/mnv/runtime/ftplugin/falcon.mnv new file mode 100644 index 0000000000..9099fa77ce --- /dev/null +++ b/mnv/runtime/ftplugin/falcon.mnv @@ -0,0 +1,54 @@ +" MNV 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 MNV itself +" Last Update: 2020 Oct 10 +" 2024 Jan 14 by MNV Project (browsefilter) +" -------------------------------------------------------------------------- + +" 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&mnv + +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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Falcon Source Files (*.fal, *.ftd)\t*.fal;*.ftd\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +endif + +let b:undo_ftplugin = "setlocal tabstop< shiftwidth< expandtab< fileencoding<" + \ . " suffixesadd< comments<" + \ . "| unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: set sw=4 sts=4 et tw=80 : diff --git a/mnv/runtime/ftplugin/fennel.mnv b/mnv/runtime/ftplugin/fennel.mnv new file mode 100644 index 0000000000..d475ef785e --- /dev/null +++ b/mnv/runtime/ftplugin/fennel.mnv @@ -0,0 +1,19 @@ +" MNV filetype plugin file +" Language: Fennel +" Maintainer: Gregory Anders <greg[NOSPAM]@gpanders.com> +" Last Update: 2023 Jun 9 +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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,case,case-try,collect,do,doto,each,eval-compiler,faccumulate,fcollect,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/mnv/runtime/ftplugin/fetchmail.mnv b/mnv/runtime/ftplugin/fetchmail.mnv new file mode 100644 index 0000000000..d84a78d999 --- /dev/null +++ b/mnv/runtime/ftplugin/fetchmail.mnv @@ -0,0 +1,16 @@ +" MNV 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/mnv/runtime/ftplugin/fga.mnv b/mnv/runtime/ftplugin/fga.mnv new file mode 100644 index 0000000000..48df73eae7 --- /dev/null +++ b/mnv/runtime/ftplugin/fga.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: FGA +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Jul 14 + +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/mnv/runtime/ftplugin/fish.mnv b/mnv/runtime/ftplugin/fish.mnv new file mode 100644 index 0000000000..20f1d572ba --- /dev/null +++ b/mnv/runtime/ftplugin/fish.mnv @@ -0,0 +1,41 @@ +" MNV filetype plugin file +" Language: fish +" Maintainer: Nicholas Boyle (github.com/nickeb96) +" Repository: https://github.com/nickeb96/fish.mnv +" Last Change: February 1, 2023 +" 2023 Aug 28 by MNV Project (undo_ftplugin) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" 2026 Mar 16 by Phạm Bình An (add matchit support) + +if exists("b:did_ftplugin") + finish +endif + +let s:saved_cpo = &cpo +set cpo-=C + +let b:did_ftplugin = 1 + +setlocal iskeyword=@,48-57,_,192-255,-,. +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions+=crjq + +let b:undo_ftplugin = "setl cms< com< fo< isk<" + +" Define patterns for the matchit plugin +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = + \ '\<\%(else\s\+\)\@<!if\>\|\<\%(switch\|begin\|function\|while\|for\)\>:' .. + \ '\<else\%(\s\+if\)\?\>\|\<case\>:' .. + \ '\<end\>' + + let b:match_ignorecase = 0 + let b:match_skip = "S:keyword" + + let b:undo_ftplugin ..= " | unlet! b:match_words b:match_ignorecase b:match_skip" +endif + +" Restore 'cpo' to its original value +let &cpo = s:saved_cpo +unlet s:saved_cpo diff --git a/mnv/runtime/ftplugin/flexwiki.mnv b/mnv/runtime/ftplugin/flexwiki.mnv new file mode 100644 index 0000000000..01bb4c03fc --- /dev/null +++ b/mnv/runtime/ftplugin/flexwiki.mnv @@ -0,0 +1,59 @@ +" MNV filetype plugin file +" Language: FlexWiki, http://www.flexwiki.com/ +" Maintainer: George V. Reilly <george@reilly.org> +" Home: http://www.georgevreilly.com/mnv/flexwiki/ +" Other Home: http://www.mnv.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/mnv/runtime/ftplugin/forth.mnv b/mnv/runtime/ftplugin/forth.mnv new file mode 100644 index 0000000000..b8ebd02680 --- /dev/null +++ b/mnv/runtime/ftplugin/forth.mnv @@ -0,0 +1,77 @@ +" MNV filetype plugin +" Language: Forth +" Maintainer: Johan Kotlinski <kotlinski@gmail.com> +" Last Change: 2023 Sep 15 +" 2024 Jan 14 by MNV Project (browsefilter) +" URL: https://github.com/jkotlinski/forth.mnv + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal commentstring=\\\ %s +setlocal comments=s:(,mb:\ ,e:),b:\\ +setlocal iskeyword=33-126,128-255 + +let s:include_patterns =<< trim EOL + + \<\%(INCLUDE\|REQUIRE\)\>\s\+\zs\k\+\ze + \<S"\s\+\zs[^"]*\ze"\s\+\%(INCLUDED\|REQUIRED\)\> +EOL +let &l:include = $'\c{ s:include_patterns[1:]->join('\|') }' + +let s:define_patterns =<< trim EOL + : + [2F]\=CONSTANT + [2F]\=VALUE + [2F]\=VARIABLE + BEGIN-STRUCTURE + BUFFER: + CODE + CREATE + MARKER + SYNONYM +EOL +let &l:define = $'\c\<\%({ s:define_patterns->join('\|') }\)' + +" assume consistent intra-project file extensions +let &l:suffixesadd = "." .. expand("%:e") + +let b:undo_ftplugin = "setl cms< com< def< inc< isk< sua<" + +if exists("loaded_matchit") && !exists("b:match_words") + let s:matchit_patterns =<< trim EOL + + \<\:\%(NONAME\)\=\>:\<EXIT\>:\<;\> + \<IF\>:\<ELSE\>:\<THEN\> + \<\[IF]\>:\<\[ELSE]\>:\<\[THEN]\> + \<?\=DO\>:\<LEAVE\>:\<+\=LOOP\> + \<CASE\>:\<ENDCASE\> + \<OF\>:\<ENDOF\> + \<BEGIN\>:\<WHILE\>:\<\%(AGAIN\|REPEAT\|UNTIL\)\> + \<CODE\>:\<END-CODE\> + \<BEGIN-STRUCTURE\>:\<END-STRUCTURE\> + EOL + let b:match_ignorecase = 1 + let b:match_words = s:matchit_patterns[1:]->join(',') + let b:undo_ftplugin ..= "| unlet! b:match_ignorecase b:match_words" + unlet s:matchit_patterns +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Forth Source Files (*.f, *.fs, *.ft, *.fth, *.4th)\t*.f;*.fs;*.ft;*.fth;*.4th\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save +unlet s:define_patterns s:include_patterns diff --git a/mnv/runtime/ftplugin/fortran.mnv b/mnv/runtime/ftplugin/fortran.mnv new file mode 100644 index 0000000000..cbce31fcde --- /dev/null +++ b/mnv/runtime/ftplugin/fortran.mnv @@ -0,0 +1,155 @@ +" MNV settings file +" Language: Fortran 2023 (and Fortran 2018, 2008, 2003, 95, 90, 77, 66) +" Version: (v55) 2023 December 22 +" Maintainers: Ajit J. Thakkar <ajit@unb.ca>; <https://ajit.ext.unb.ca/> +" Joshua Hollett <j.hollett@uwinnipeg.ca> +" Usage: For instructions, do :help fortran-plugin from MNV +" 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. +" Last Change: 2023 Dec 22 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" Only do these settings when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +let s:cposet=&cpoptions +set cpoptions&mnv + +" 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 compilers still allow 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 + else + " The use of columns 73-80 for sequence numbers is obsolete + " so almost all compilers allow a textwidth of 80 + setlocal tw=80 + " 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 81 and uncomment the next line + " setlocal tw=81 + 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 = + \ '(:),' . + \ s:notend .'\<select\s\+type\>:' . s:notselect. '\<type\|class\>:\<end\s*select\>,' . + \ s:notend .'\<select\s\+rank\>:' . s:notselect. '\<rank\>:\<end\s*select\>,' . + \ s:notend .'\<select\>:' . 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 . '\<change\s\+team\>:\<end\s*team\>,'. + \ s:notend . '\<critical\>:\<end\s*critical\>,'. + \ s:notend . '\<block\>:\<end\s*block\>,'. + \ 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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 + +" mnv:sw=2 diff --git a/mnv/runtime/ftplugin/fpcmake.mnv b/mnv/runtime/ftplugin/fpcmake.mnv new file mode 100644 index 0000000000..585df14283 --- /dev/null +++ b/mnv/runtime/ftplugin/fpcmake.mnv @@ -0,0 +1,29 @@ +" MNV filetype plugin file +" Language: Free Pascal Makefile Generator +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&mnv + +runtime! ftplugin/make.mnv + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Free Pascal Makefile Definition Files (*.fpc)\t*.fpc\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/framescript.mnv b/mnv/runtime/ftplugin/framescript.mnv new file mode 100644 index 0000000000..32249cd583 --- /dev/null +++ b/mnv/runtime/ftplugin/framescript.mnv @@ -0,0 +1,30 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/freebasic.mnv b/mnv/runtime/ftplugin/freebasic.mnv new file mode 100644 index 0000000000..18b14e9b9d --- /dev/null +++ b/mnv/runtime/ftplugin/freebasic.mnv @@ -0,0 +1,85 @@ +" MNV filetype plugin file +" Language: FreeBASIC +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2023 Aug 22 + +" Setup {{{1 +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&mnv + +runtime! ftplugin/basic.mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +endif + +" Cleanup {{{1 +let &cpo = s:cpo_save +unlet s:cpo_save s:dialect + +" mnv: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/mnv/runtime/ftplugin/fstab.mnv b/mnv/runtime/ftplugin/fstab.mnv new file mode 100644 index 0000000000..2c681d3619 --- /dev/null +++ b/mnv/runtime/ftplugin/fstab.mnv @@ -0,0 +1,30 @@ +" MNV ftplugin file +" Language: fstab file +" Maintainer: Radu Dineiu <radu.dineiu@gmail.com> +" URL: https://raw.github.com/rid9/mnv-fstab/master/ftplugin/fstab.mnv +" Last Change: 2025 Aug 21 +" Version: 1.1.0 +" +" Changelog: +" - 2025 Aug 21 added support for mtab +" - 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" - 2025 Mar 31 added setlocal formatoptions-=t +" +" Credits: +" Subhaditya Nath <sn03.general@gmail.com> + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=#\ %s +setlocal formatoptions-=t + +if expand('%:t') == 'mtab' + let b:fstab_enable_mtab = 1 +endif + +let b:undo_ftplugin = "setlocal commentstring< | setlocal formatoptions<" + +" mnv: ts=8 ft=mnv diff --git a/mnv/runtime/ftplugin/fvwm.mnv b/mnv/runtime/ftplugin/fvwm.mnv new file mode 100644 index 0000000000..89e1a8317a --- /dev/null +++ b/mnv/runtime/ftplugin/fvwm.mnv @@ -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/mnv/runtime/ftplugin/gdb.mnv b/mnv/runtime/ftplugin/gdb.mnv new file mode 100644 index 0000000000..89353af37a --- /dev/null +++ b/mnv/runtime/ftplugin/gdb.mnv @@ -0,0 +1,54 @@ +" MNV filetype plugin file +" Language: gdb +" Maintainer: Michaël Peeters <NOSPAMm.mnv@noekeon.org> +" Contributors: Riley Bruins +" Last Changed: 2017 Oct 26 +" 2024 Apr 10: add Matchit support (by MNV Project) +" 2024 Apr 23: add space to commentstring (by Riley Bruins) ('commentstring') +" 2026 Feb 08: add browsefilter, comment formatting, and improve matchit support (by MNV Project) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t +setlocal formatoptions+=croql +setlocal include=^\\s*source + +" Undo the stuff we changed. +let b:undo_ftplugin = "setlocal com< cms< fo< inc<" + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 0 + let s:line_start = '\%(^\s*\)\@<=' + let b:match_words = + \ s:line_start .. '\%(commands\|define\|document\|if\|while\|' .. + \ '\%(py\%[thon]\|gu\%[ile]\)\%(\s*$\)\@=\|' .. + \ '\%(compi\%[le]\|exp\%[ression]\)\s\+\%(c\%[ode]\|p\%[rint]\)\)\>:' .. + \ s:line_start .. '\%(else\|loop_continue\|loop_break\)\>:' .. + \ s:line_start .. 'end\>' + unlet s:line_start + 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 = + \ "GDB Init Files (.gdbinit gdbinit .gdbearlyinit gdbearlyinit)\t" .. + \ ".gdbinit;gdbinit;.gdbearlyinit;gdbearlyinit\n" .. + \ "GDB Command Files (*.gdb)\t*.gdb\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "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/mnv/runtime/ftplugin/gdscript.mnv b/mnv/runtime/ftplugin/gdscript.mnv new file mode 100644 index 0000000000..91e3614db0 --- /dev/null +++ b/mnv/runtime/ftplugin/gdscript.mnv @@ -0,0 +1,65 @@ +mnv9script + +# MNV filetype plugin file +# Language: gdscript (Godot game engine scripting language) +# Maintainer: Maxim Kim <habamax@gmail.com> +# Website: https://github.com/habamax/mnv-gdscript +# Last Change: 2024 Jul 14 + +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() + +if get(g:, 'gdscript_recommended_style', 1) + setlocal noexpandtab tabstop=4 softtabstop=0 shiftwidth=0 + b:undo_ftplugin ..= ' | setlocal expandtab< tabstop< softtabstop< shiftwidth<' +endif + + +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/mnv/runtime/ftplugin/gdshader.mnv b/mnv/runtime/ftplugin/gdshader.mnv new file mode 100644 index 0000000000..317c10b6f9 --- /dev/null +++ b/mnv/runtime/ftplugin/gdshader.mnv @@ -0,0 +1,16 @@ +mnv9script + +# MNV filetype plugin file +# Language: Godot shading language +# Maintainer: Maxim Kim <habamax@gmail.com> +# Website: https://github.com/habamax/mnv-gdscript +# Last Update: 2025-06-09 + +if exists("b:did_ftplugin") | finish | endif +b:did_ftplugin = 1 + +b:undo_ftplugin = 'setlocal suffixesadd< comments< commentstring<' + +setlocal suffixesadd=.gdshader +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s diff --git a/mnv/runtime/ftplugin/gel.mnv b/mnv/runtime/ftplugin/gel.mnv new file mode 100644 index 0000000000..52f27187a7 --- /dev/null +++ b/mnv/runtime/ftplugin/gel.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin file +" Language: TI Code Composer Studio General Extension Language +" Document: https://downloads.ti.com/ccs/esd/documents/users_guide/ccs_debug-gel.html +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Last Change: 2024 Dec 25 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// +setlocal commentstring=/*\ %s\ */ + +let b:undo_ftplugin = "setl commentstring< comments<" diff --git a/mnv/runtime/ftplugin/git.mnv b/mnv/runtime/ftplugin/git.mnv new file mode 100644 index 0000000000..36f8040c41 --- /dev/null +++ b/mnv/runtime/ftplugin/git.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: generic git output +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" Last Change: 2023 Mar 26 + +" Only do this when not done yet for this buffer +if (exists("b:did_ftplugin")) + finish +endif + +let b:did_ftplugin = 1 + +setlocal nomodeline + +let b:undo_ftplugin = "setl modeline<" diff --git a/mnv/runtime/ftplugin/gitattributes.mnv b/mnv/runtime/ftplugin/gitattributes.mnv new file mode 100644 index 0000000000..c1b6859367 --- /dev/null +++ b/mnv/runtime/ftplugin/gitattributes.mnv @@ -0,0 +1,13 @@ +" MNV 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/mnv/runtime/ftplugin/gitcommit.mnv b/mnv/runtime/ftplugin/gitcommit.mnv new file mode 100644 index 0000000000..1667f15b67 --- /dev/null +++ b/mnv/runtime/ftplugin/gitcommit.mnv @@ -0,0 +1,60 @@ +" MNV filetype plugin +" Language: git commit file +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" Last Change: 2023 Dec 28 + +" 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*\\d\\+[\\]:.)}]\\s\\+\\\|^\\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:setupdiff() abort + 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 + +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 +call\ s:setupdiff()' fnameescape(name) + silent! wincmd P +endfunction diff --git a/mnv/runtime/ftplugin/gitconfig.mnv b/mnv/runtime/ftplugin/gitconfig.mnv new file mode 100644 index 0000000000..7e8632684c --- /dev/null +++ b/mnv/runtime/ftplugin/gitconfig.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: git config file +" Maintainer: Tim Pope <mnvNOSPAM@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/mnv/runtime/ftplugin/gitignore.mnv b/mnv/runtime/ftplugin/gitignore.mnv new file mode 100644 index 0000000000..bec26d0474 --- /dev/null +++ b/mnv/runtime/ftplugin/gitignore.mnv @@ -0,0 +1,13 @@ +" MNV 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/mnv/runtime/ftplugin/gitrebase.mnv b/mnv/runtime/ftplugin/gitrebase.mnv new file mode 100644 index 0000000000..5696e8e574 --- /dev/null +++ b/mnv/runtime/ftplugin/gitrebase.mnv @@ -0,0 +1,45 @@ +" MNV filetype plugin +" Language: git rebase --interactive +" Maintainer: Tim Pope <mnvNOSPAM@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/mnv/runtime/ftplugin/gitsendemail.mnv b/mnv/runtime/ftplugin/gitsendemail.mnv new file mode 100644 index 0000000000..95afd1a348 --- /dev/null +++ b/mnv/runtime/ftplugin/gitsendemail.mnv @@ -0,0 +1,6 @@ +" MNV filetype plugin +" Language: git send-email message +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" Last Change: 2009 Dec 24 + +runtime! ftplugin/mail.mnv diff --git a/mnv/runtime/ftplugin/gleam.mnv b/mnv/runtime/ftplugin/gleam.mnv new file mode 100644 index 0000000000..8886ab1c01 --- /dev/null +++ b/mnv/runtime/ftplugin/gleam.mnv @@ -0,0 +1,33 @@ +" MNV filetype plugin file +" Language: Gleam +" Maintainer: Kirill Morozov <kirill@robotix.pro> +" Previous Maintainer: Trilowy (https://github.com/trilowy) +" Based On: https://github.com/gleam-lang/gleam.mnv +" Last Change: 2025 Apr 21 +" 2026 Feb 13 by MNV Project (remove 'formatprg' #19108) + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:////,:///,:// +setlocal commentstring=//\ %s +setlocal suffixesadd=.gleam +let b:undo_ftplugin = "setlocal com< cms< sua<" + +if get(g:, "gleam_recommended_style", 1) + setlocal expandtab + setlocal shiftwidth=2 + setlocal smartindent + setlocal softtabstop=2 + setlocal tabstop=2 + let b:undo_ftplugin ..= " | setlocal et< sw< si< sts< ts<" +endif + +if !exists('current_compiler') + compiler gleam_build + let b:undo_ftplugin ..= "| compiler make" +endif + +" mnv: sw=2 sts=2 et diff --git a/mnv/runtime/ftplugin/go.mnv b/mnv/runtime/ftplugin/go.mnv new file mode 100644 index 0000000000..74505a962d --- /dev/null +++ b/mnv/runtime/ftplugin/go.mnv @@ -0,0 +1,86 @@ +" MNV filetype plugin file +" Language: Go +" Maintainer: David Barnett (https://github.com/google/mnv-ft-go is archived) +" Last Change: 2014 Aug 16 +" 2024 Jul 16 by MNV Project (add recommended indent style) +" 2025 Mar 07 by MNV Project (add formatprg and keywordprg option #16804) +" 2025 Mar 18 by MNV Project (use :term for 'keywordprg' #16911) +" 2025 Apr 16 by MNV Project (set 'cpoptions' for line continuation, #17121) +" 2025 Jul 02 by MNV Project (add section movement mappings #17641) +" 2025 Jul 05 by MNV Project (update b:undo_ftplugin #17664) +" 2026 Feb 13 by MNV Project (remove formatprg #19108) + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal formatoptions-=t + +setlocal comments=s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s +setlocal keywordprg=:GoKeywordPrg + +command! -buffer -nargs=* GoKeywordPrg call s:GoKeywordPrg() + +let b:undo_ftplugin = 'setl fo< com< cms< kp<' + \ . '| delcommand -buffer GoKeywordPrg' + +if get(g:, 'go_recommended_style', 1) + setlocal noexpandtab softtabstop=0 shiftwidth=0 + let b:undo_ftplugin .= ' | setl et< sts< sw<' +endif + +if !exists('*' . expand('<SID>') . 'GoKeywordPrg') + func! s:GoKeywordPrg() + let temp_isk = &l:iskeyword + setl iskeyword+=. + try + let cmd = 'go doc -C ' . shellescape(expand('%:h')) . ' ' . shellescape(expand('<cword>')) + if has('gui_running') || has('nmnv') + exe 'hor term' cmd + else + exe '!' . cmd + endif + finally + let &l:iskeyword = temp_isk + endtry + endfunc +endif + +if !exists("no_plugin_maps") && !exists("no_go_maps") + noremap <silent> <buffer> ]] <Cmd>call <SID>GoFindSection('next_start', v:count1)<CR> + noremap <silent> <buffer> ][ <Cmd>call <SID>GoFindSection('next_end', v:count1)<CR> + noremap <silent> <buffer> [[ <Cmd>call <SID>GoFindSection('prev_start', v:count1)<CR> + noremap <silent> <buffer> [] <Cmd>call <SID>GoFindSection('prev_end', v:count1)<CR> + let b:undo_ftplugin .= '' + \ . "| silent! exe 'unmap <buffer> ]]'" + \ . "| silent! exe 'unmap <buffer> ]['" + \ . "| silent! exe 'unmap <buffer> [['" + \ . "| silent! exe 'unmap <buffer> []'" +endif + +function! <SID>GoFindSection(dir, count) + mark ' + let c = a:count + while c > 0 + if a:dir == 'next_start' + keepjumps call search('^\(type\|func\)\>', 'W') + elseif a:dir == 'next_end' + keepjumps call search('^}', 'W') + elseif a:dir == 'prev_start' + keepjumps call search('^\(type\|func\)\>', 'bW') + elseif a:dir == 'prev_end' + keepjumps call search('^}', 'bW') + endif + let c -= 1 + endwhile +endfunction + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: sw=2 sts=2 et diff --git a/mnv/runtime/ftplugin/goaccess.mnv b/mnv/runtime/ftplugin/goaccess.mnv new file mode 100644 index 0000000000..60476b060a --- /dev/null +++ b/mnv/runtime/ftplugin/goaccess.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: GoAccess configuration +" Maintainer: Adam Monsen <haircut@gmail.com> +" Last Change: 2024 Aug 1 + +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/mnv/runtime/ftplugin/gomod.mnv b/mnv/runtime/ftplugin/gomod.mnv new file mode 100644 index 0000000000..04519b4e7e --- /dev/null +++ b/mnv/runtime/ftplugin/gomod.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: go module file +" Maintainer: YU YUK KUEN <yukkuen.yu719@gmail.com> +" Last Change: 2024-06-21 +" 2024 Jul 16 by MNV Project (noexpandtab) + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal noexpandtab +setlocal formatoptions-=t formatoptions-=c +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl et< fo< cms<' diff --git a/mnv/runtime/ftplugin/gpg.mnv b/mnv/runtime/ftplugin/gpg.mnv new file mode 100644 index 0000000000..3d0378cf11 --- /dev/null +++ b/mnv/runtime/ftplugin/gpg.mnv @@ -0,0 +1,29 @@ +" MNV filetype plugin file +" Language: gpg(1) configuration file +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025-07-22 (use :hor term #17822) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< fo<" + +setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql + +if has('unix') && executable('less') && exists(':terminal') == 2 + command -buffer -nargs=1 GpgKeywordPrg + \ silent exe ':hor term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s+--' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'gpg' + setlocal iskeyword+=- + setlocal keywordprg=:GpgKeywordPrg + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword< | sil! delc -buffer GpgKeywordPrg' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + diff --git a/mnv/runtime/ftplugin/gprof.mnv b/mnv/runtime/ftplugin/gprof.mnv new file mode 100644 index 0000000000..1afba1490f --- /dev/null +++ b/mnv/runtime/ftplugin/gprof.mnv @@ -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 + +" mnv:sw=2 fdm=indent diff --git a/mnv/runtime/ftplugin/graphql.mnv b/mnv/runtime/ftplugin/graphql.mnv new file mode 100644 index 0000000000..96d78fa0c6 --- /dev/null +++ b/mnv/runtime/ftplugin/graphql.mnv @@ -0,0 +1,22 @@ +" MNV filetype plugin +" Language: graphql +" Maintainer: Jon Parise <jon@indelible.org> +" Filenames: *.graphql *.graphqls *.gql +" URL: https://github.com/jparise/mnv-graphql +" License: MIT <https://opensource.org/license/mit> +" Last Change: 2024 Dec 21 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t +setlocal iskeyword+=$,@-@ +setlocal softtabstop=2 +setlocal shiftwidth=2 +setlocal expandtab + +let b:undo_ftplugin = 'setlocal com< cms< fo< isk< sts< sw< et<' diff --git a/mnv/runtime/ftplugin/groff.mnv b/mnv/runtime/ftplugin/groff.mnv new file mode 100644 index 0000000000..586dd1a1e7 --- /dev/null +++ b/mnv/runtime/ftplugin/groff.mnv @@ -0,0 +1,19 @@ +" MNV syntax file +" Language: groff(7) +" Maintainer: Eisuke Kawashima ( e.kawaschima+mnv AT gmail.com ) +" Last Change: 2025 Apr 24 +" 2025 Jun 18 by MNV Project: update commentstring option (#17516) + +if exists('b:did_ftplugin') + finish +endif + +let b:nroff_is_groff = 1 + +runtime! ftplugin/nroff.mnv + +setlocal commentstring=\\#\ %s +setlocal comments=:\\#,:.\\\",:\\\",:'\\\",:''' + +let b:undo_ftplugin .= '| unlet! b:nroff_is_groff' +let b:did_ftplugin = 1 diff --git a/mnv/runtime/ftplugin/groovy.mnv b/mnv/runtime/ftplugin/groovy.mnv new file mode 100644 index 0000000000..60cd6a1473 --- /dev/null +++ b/mnv/runtime/ftplugin/groovy.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin file +" Language: groovy +" Maintainer: Justin M. Keyes <justinkz@gmail.com> +" Last Change: 2016 May 22 +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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/mnv/runtime/ftplugin/group.mnv b/mnv/runtime/ftplugin/group.mnv new file mode 100644 index 0000000000..12d6b573f9 --- /dev/null +++ b/mnv/runtime/ftplugin/group.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/grub.mnv b/mnv/runtime/ftplugin/grub.mnv new file mode 100644 index 0000000000..c04abf5075 --- /dev/null +++ b/mnv/runtime/ftplugin/grub.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/gyp.mnv b/mnv/runtime/ftplugin/gyp.mnv new file mode 100644 index 0000000000..a4153265e5 --- /dev/null +++ b/mnv/runtime/ftplugin/gyp.mnv @@ -0,0 +1,14 @@ +" MNV 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/mnv/runtime/ftplugin/haml.mnv b/mnv/runtime/ftplugin/haml.mnv new file mode 100644 index 0000000000..8a40994107 --- /dev/null +++ b/mnv/runtime/ftplugin/haml.mnv @@ -0,0 +1,76 @@ +" MNV filetype plugin +" Language: Haml +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" Last Change: 2019 Dec 05 +" 2024 Jan 14 by MNV Project (browsefilter) + +" 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 = "" +if has("win32") + let s:browsefilter = "All Files (*.*)\t*\n" +else + let s:browsefilter = "All Files (*)\t*\n" +endif +let s:match_words = "" + +runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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.mnv ftplugin/ruby_*.mnv ftplugin/ruby/*.mnv +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 and GTK to show mainly Haml-related files +if has("gui_win32") || has("gui_gtk") + 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.mnv +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 + +" mnv:set sw=2: diff --git a/mnv/runtime/ftplugin/hamster.mnv b/mnv/runtime/ftplugin/hamster.mnv new file mode 100644 index 0000000000..041e62b0a8 --- /dev/null +++ b/mnv/runtime/ftplugin/hamster.mnv @@ -0,0 +1,67 @@ +" MNV filetype plugin +" Language: Hamster Script +" Version: 2.0.6.0 +" Maintainer: David Fishburn <dfishburn dot mnv at gmail dot com> +" Last Change: 2021 Jan 19 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" 2025 Sep 05 by MNV Project, disable setting global ignorecase + +" 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&mnv + +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/mnv/runtime/ftplugin/hare.mnv b/mnv/runtime/ftplugin/hare.mnv new file mode 100644 index 0000000000..6f7c4cc20b --- /dev/null +++ b/mnv/runtime/ftplugin/hare.mnv @@ -0,0 +1,51 @@ +mnv9script + +# MNV filetype plugin. +# Language: Hare +# Maintainer: Amelia Clarke <selene@perilune.dev> +# Last Change: 2026 Jan 24 +# Upstream: https://git.sr.ht/~sircmpwn/hare.mnv + +if exists('b:did_ftplugin') + finish +endif +b:did_ftplugin = 1 + +# Use the Hare compiler. +compiler hare +b:undo_ftplugin = 'compiler make' + +# Formatting settings. +setlocal comments=:// +setlocal commentstring=//\ %s +setlocal formatlistpat=^\\s*-\\s\\+ +setlocal formatoptions+=croqnlj/ formatoptions-=t +b:undo_ftplugin ..= ' | setl cms< com< flp< fo<' + +# Locate Hare modules. +&l:include = '\v^\s*use\s+%(\h\w*\s*\=)?' +&l:includeexpr = 'trim(v:fname, ":", 2)->substitute("::", "/", "g")' +setlocal isfname+=: +&l:path = ',,' .. hare#GetPath() +b:undo_ftplugin ..= ' | setl inc< inex< isf< pa<' + +# Follow the official style guide by default. +if get(g:, 'hare_recommended_style', 1) + setlocal noexpandtab + setlocal shiftwidth=8 + setlocal softtabstop=0 + setlocal tabstop=8 + setlocal textwidth=80 + b:undo_ftplugin ..= ' | setl et< sts< sw< ts< tw<' +endif + +# Highlight incorrect whitespace outside of insert mode. +if get(g:, 'hare_space_error', 1) + augroup HareSpaceError + autocmd! + autocmd InsertEnter * hi link hareSpaceError NONE + autocmd InsertLeave * hi link hareSpaceError Error + augroup END +endif + +# mnv: et sts=2 sw=2 ts=8 tw=80 diff --git a/mnv/runtime/ftplugin/haredoc.mnv b/mnv/runtime/ftplugin/haredoc.mnv new file mode 100644 index 0000000000..271d5d3cc2 --- /dev/null +++ b/mnv/runtime/ftplugin/haredoc.mnv @@ -0,0 +1,50 @@ +mnv9script + +# MNV filetype plugin. +# Language: Haredoc (Hare documentation format) +# Maintainer: Amelia Clarke <selene@perilune.dev> +# Last Change: 2026 Jan 24 +# Upstream: https://git.sr.ht/~sircmpwn/hare.mnv + +if exists('b:did_ftplugin') + finish +endif +b:did_ftplugin = 1 + +# Use the Hare compiler. +compiler hare +b:undo_ftplugin = 'compiler make' + +# Formatting settings. +setlocal comments=:\ +setlocal commentstring=\ %s +setlocal formatlistpat=^\\s*-\\s\\+ +setlocal formatoptions+=tnlj formatoptions-=c formatoptions-=q +b:undo_ftplugin ..= ' | setl cms< com< flp< fo<' + +# Locate Hare modules. +&l:includeexpr = 'trim(v:fname, ":", 2)->substitute("::", "/", "g")' +setlocal isfname+=: +&l:path = ',,' .. hare#GetPath() +b:undo_ftplugin ..= ' | setl inex< isf< pa<' + +# Follow the official style guide by default. +if get(g:, 'hare_recommended_style', 1) + setlocal noexpandtab + setlocal shiftwidth=8 + setlocal softtabstop=0 + setlocal tabstop=8 + setlocal textwidth=80 + b:undo_ftplugin ..= ' | setl et< sts< sw< ts< tw<' +endif + +# Highlight incorrect whitespace outside of insert mode. +if get(g:, 'hare_space_error', 1) + augroup HaredocSpaceError + autocmd! + autocmd InsertEnter * hi link haredocSpaceError NONE + autocmd InsertLeave * hi link haredocSpaceError Error + augroup END +endif + +# mnv: et sts=2 sw=2 ts=8 tw=80 diff --git a/mnv/runtime/ftplugin/haskell.mnv b/mnv/runtime/ftplugin/haskell.mnv new file mode 100644 index 0000000000..bd819841f8 --- /dev/null +++ b/mnv/runtime/ftplugin/haskell.mnv @@ -0,0 +1,32 @@ +" MNV filetype plugin file +" Language: Haskell +" Maintainer: Daniel Campoverde <alx@sillybytes.net> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2018-08-27 +" 2025 Jul 09 by MNV Project revert setting iskeyword #8191 +" 2026 Jan 18 by MNV Project add include-search and define support #19143 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< fo< su< sua< inex< inc< def<" + +setlocal comments=s1fl:{-,mb:-,ex:-},:-- commentstring=--\ %s +setlocal formatoptions-=t formatoptions+=croql +setlocal omnifunc=haskellcomplete#Complete + +setlocal suffixes+=.hi +setlocal suffixesadd=.hs,.lhs,.hsc + +setlocal includeexpr=findfile(tr(v:fname,'.','/'),'.;') +setlocal include=^import\\>\\%(\\s\\+safe\\>\\)\\?\\%(\\s\\+qualified\\>\\)\\? + +setlocal define=^\\%(data\\>\\\|class\\>\\%(.*=>\\)\\?\\\|\\%(new\\)\\?type\\>\\\|\\ze\\k\\+\\s*\\%(::\\\|=\\)\\) + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/hcl.mnv b/mnv/runtime/ftplugin/hcl.mnv new file mode 100644 index 0000000000..90ed8a6345 --- /dev/null +++ b/mnv/runtime/ftplugin/hcl.mnv @@ -0,0 +1,10 @@ +" MNV filetype plugin +" Language: HCL +" Maintainer: Gregory Anders +" Last Change: 2024-09-03 + +if exists('b:did_ftplugin') + finish +endif + +runtime! ftplugin/terraform.mnv diff --git a/mnv/runtime/ftplugin/heex.mnv b/mnv/runtime/ftplugin/heex.mnv new file mode 100644 index 0000000000..e0223a4f9d --- /dev/null +++ b/mnv/runtime/ftplugin/heex.mnv @@ -0,0 +1,34 @@ +" Elixir filetype plugin +" Language: HEEx +" Maintainer: Mitchell Hanberg <mnvNOSPAM@mitchellhanberg.com> +" Last Change: 2022 Sep 21 +" 2025 Apr 16 by MNV Project (set 'cpoptions' for line continuation, #17121) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal shiftwidth=2 softtabstop=2 expandtab + +setlocal comments=:<%!-- +setlocal commentstring=<%!--\ %s\ --%> + +let b:undo_ftplugin = 'set sw< sts< et< com< cms<' + +" 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:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/help.mnv b/mnv/runtime/ftplugin/help.mnv new file mode 100644 index 0000000000..8764a5bb0a --- /dev/null +++ b/mnv/runtime/ftplugin/help.mnv @@ -0,0 +1,47 @@ +" MNV filetype plugin file +" Language: MNV help file +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Last Change: 2025 Apr 08 +" 2025 Apr 08 by MNV project (set 'omnifunc' and 'iskeyword', #17073) +" 2025 Aug 08 by MNV project (unset comment options, #17889) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl isk< fo< tw< cole< cocu< keywordprg< omnifunc< comments< cms<" + +setl comments= cms= + +setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=s:HelpComplete +let &l:iskeyword='!-~,^*,^|,^",192-255' +if has("conceal") + setlocal cole=2 cocu=nc +endif + +if !exists('*s:HelpComplete') + func s:HelpComplete(findstart, base) + if a:findstart + let colnr = col('.') - 1 " Get the column number before the cursor + let line = getline('.') + for i in range(colnr - 1, 0, -1) + if line[i] ==# '|' + return i + 1 " Don't include the `|` in base + elseif line[i] ==# "'" + return i " Include the `'` in base + endif + endfor + else + return taglist('^' .. a:base) + \ ->map({_, item -> #{word: item->get('name'), kind: item->get('kind')}}) + \ ->extend(getcompletion(a:base, 'help')) + endif + endfunc +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/hgcommit.mnv b/mnv/runtime/ftplugin/hgcommit.mnv new file mode 100644 index 0000000000..be70a5179d --- /dev/null +++ b/mnv/runtime/ftplugin/hgcommit.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin file +" Language: hg (Mercurial) commit file +" Maintainer: Ken Takata <kentkt at csc dot jp> +" Last Change: 2025 Jun 8 +" Filenames: hg-editor-*.txt +" License: MNV License +" URL: https://github.com/k-takata/hg-mnv +" 2025 Jun 18 by MNV Project: update commentstring option (#17480) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal nomodeline + +setlocal comments=:HG\: +setlocal commentstring=HG:\ %s + +let b:undo_ftplugin = 'setl modeline< com< cms<' diff --git a/mnv/runtime/ftplugin/hlsplaylist.mnv b/mnv/runtime/ftplugin/hlsplaylist.mnv new file mode 100644 index 0000000000..fd12086468 --- /dev/null +++ b/mnv/runtime/ftplugin/hlsplaylist.mnv @@ -0,0 +1,37 @@ +" MNV filetype plugin +" Language: HLS/M3U Playlist +" Maintainer: AvidSeeker <avidseeker7@protonmail.com> +" Last Change: 2024 Jul 07 +" + +if exists("b:did_ftplugin") + finish +endif +let g:did_ftplugin = 1 + +setlocal commentstring=#%s + +let b:undo_ftplugin = "setl commentstring<" + +function! M3UFold() abort + let line = getline(v:lnum) + if line =~# '^#EXTGRP' + return ">1" + endif + return "=" +endfunction + +function! M3UFoldText() abort + let start_line = getline(v:foldstart) + let title = substitute(start_line, '^#EXTGRP:*', '', '') + let foldsize = (v:foldend - v:foldstart + 1) + let linecount = '['.foldsize.' lines]' + return title.' '.linecount +endfunction + +if has("folding") + setlocal foldexpr=M3UFold() + setlocal foldmethod=expr + setlocal foldtext=M3UFoldText() + let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<" +endif diff --git a/mnv/runtime/ftplugin/hog.mnv b/mnv/runtime/ftplugin/hog.mnv new file mode 100644 index 0000000000..60d0798ee9 --- /dev/null +++ b/mnv/runtime/ftplugin/hog.mnv @@ -0,0 +1,40 @@ +" MNV filetype plugin +" Language: hog (snort.conf) +" Maintainer: . Victor Roemer, <vroemer@badsec.org>. +" Last Change: Mar 1, 2013 +" 2025 Dec 03 by MNV Project: set undo_ftplugin correctly #18727 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setl fo< com< cms< def< inc<" + +let s:cpo_save = &cpo +set cpo&mnv + +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/mnv/runtime/ftplugin/hostconf.mnv b/mnv/runtime/ftplugin/hostconf.mnv new file mode 100644 index 0000000000..49c324a33f --- /dev/null +++ b/mnv/runtime/ftplugin/hostconf.mnv @@ -0,0 +1,18 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/hostsaccess.mnv b/mnv/runtime/ftplugin/hostsaccess.mnv new file mode 100644 index 0000000000..3bd77f8a7a --- /dev/null +++ b/mnv/runtime/ftplugin/hostsaccess.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/html.mnv b/mnv/runtime/ftplugin/html.mnv new file mode 100644 index 0000000000..1fe30d2690 --- /dev/null +++ b/mnv/runtime/ftplugin/html.mnv @@ -0,0 +1,111 @@ +" MNV filetype plugin file +" Language: HTML +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2025 Sep 12 + +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:--> + +if exists('b:undo_ftplugin') + " no whitespace before |, handle possible :unmap at end of current value + let b:undo_ftplugin ..= "| setlocal comments< commentstring< matchpairs<" +else + let b:undo_ftplugin = "setlocal comments< commentstring< matchpairs<" +endif + +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*.html;*.htm\n" .. + \ "JavaScript Files (*.js)\t*.js\n" .. + \ "Cascading StyleSheets (*.css)\t*.css\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:html_set_browsefilter = 1 + let b:undo_ftplugin ..= " | unlet! b:browsefilter b:html_set_browsefilter" +endif + +if has("folding") && get(g:, "html_expr_folding", 0) + function! HTMLTagFold() abort + if empty(get(b:, "foldsmap", {})) + if empty(get(b:, "current_syntax", '')) + return '0' + else + let b:foldsmap = htmlfold#MapBalancedTags() + endif + endif + + return get(b:foldsmap, v:lnum, '=') + endfunction + + setlocal foldexpr=HTMLTagFold() + setlocal foldmethod=expr + let b:undo_ftplugin ..= " | setlocal foldexpr< foldmethod<" + + if !get(g:, "html_expr_folding_without_recomputation", 0) + augroup htmltagfold + autocmd! htmltagfold + autocmd TextChanged,InsertLeave <buffer> let b:foldsmap = {} + augroup END + + " XXX: Keep ":autocmd" last in "b:undo_ftplugin" (see ":help :bar"). + let b:undo_ftplugin ..= " | silent! autocmd! htmltagfold * <buffer>" + endif +endif + +let &cpo = s:save_cpo +unlet s:save_cpo + +" See ":help mnv9-mix". +if !has("mnv9script") + finish +endif + +if exists("*g:HTMLTagFold") + def! g:HTMLTagFold(): string + if empty(get(b:, "foldsmap", {})) + if empty(get(b:, "current_syntax", '')) + return '0' + else + b:foldsmap = g:htmlfold#MapBalancedTags() + endif + endif + + return get(b:foldsmap, v:lnum, '=') + enddef +endif diff --git a/mnv/runtime/ftplugin/htmlangular.mnv b/mnv/runtime/ftplugin/htmlangular.mnv new file mode 100644 index 0000000000..8f6c330c99 --- /dev/null +++ b/mnv/runtime/ftplugin/htmlangular.mnv @@ -0,0 +1,12 @@ +" MNV filetype plugin file +" Language: Angular HTML Template +" Maintainer: Dennis van den Berg <dennis@vdberg.dev> +" Last Change: 2024 Jul 9 + +" Only use this filetype plugin when no other was loaded. +if exists("b:did_ftplugin") + finish +endif + +" source the HTML ftplugin +runtime! ftplugin/html.mnv diff --git a/mnv/runtime/ftplugin/htmldjango.mnv b/mnv/runtime/ftplugin/htmldjango.mnv new file mode 100644 index 0000000000..3f34f2abe0 --- /dev/null +++ b/mnv/runtime/ftplugin/htmldjango.mnv @@ -0,0 +1,13 @@ +" MNV 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.mnv +runtime! ftplugin/django.mnv diff --git a/mnv/runtime/ftplugin/http.mnv b/mnv/runtime/ftplugin/http.mnv new file mode 100644 index 0000000000..6af6507695 --- /dev/null +++ b/mnv/runtime/ftplugin/http.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: HTTP +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Sep 28 + +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/mnv/runtime/ftplugin/hurl.mnv b/mnv/runtime/ftplugin/hurl.mnv new file mode 100644 index 0000000000..cd4774080e --- /dev/null +++ b/mnv/runtime/ftplugin/hurl.mnv @@ -0,0 +1,11 @@ +" MNV filetype plugin file +" Language: hurl +" Maintainer: Melker Ulander <melker.ulander@pm.me> +" Last Changed: 2024 01 26 + +if exists("b:did_ftplugin") | finish | endif + +let b:did_ftplugin = 1 +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal commentstring<" diff --git a/mnv/runtime/ftplugin/hyprlang.mnv b/mnv/runtime/ftplugin/hyprlang.mnv new file mode 100644 index 0000000000..a3f9c551fb --- /dev/null +++ b/mnv/runtime/ftplugin/hyprlang.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: hyprlang +" Maintainer: ribru17 <ribru17@gmail.com> +" Last Change: 2024 May 18 + +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/mnv/runtime/ftplugin/i3config.mnv b/mnv/runtime/ftplugin/i3config.mnv new file mode 100644 index 0000000000..93f28a705c --- /dev/null +++ b/mnv/runtime/ftplugin/i3config.mnv @@ -0,0 +1,13 @@ +" MNV 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/mnv/runtime/ftplugin/icon.mnv b/mnv/runtime/ftplugin/icon.mnv new file mode 100644 index 0000000000..0c32dfc1a4 --- /dev/null +++ b/mnv/runtime/ftplugin/icon.mnv @@ -0,0 +1,40 @@ +" MNV filetype plugin file +" Language: Icon +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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_ignorecase b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Icon Source Files (*.icn)\t*.icn\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/idris2.mnv b/mnv/runtime/ftplugin/idris2.mnv new file mode 100644 index 0000000000..72f632a20f --- /dev/null +++ b/mnv/runtime/ftplugin/idris2.mnv @@ -0,0 +1,34 @@ +" MNV ftplugin file +" Language: Idris 2 +" Last Change: 2024 Nov 05 +" Maintainer: Idris Hackers (https://github.com/edwinb/idris2-mnv), Serhii Khoma <srghma@gmail.com> +" License: MNV (see :h license) +" Repository: https://github.com/ShinKage/idris2-nmnv +" +" Based on ftplugin/idris2.mnv from https://github.com/edwinb/idris2-mnv + +if exists("b:did_ftplugin") + finish +endif + +setlocal shiftwidth=2 +setlocal tabstop=2 + +" Set g:idris2#allow_tabchar = 1 to use tabs instead of spaces +if exists('g:idris2#allow_tabchar') && g:idris2#allow_tabchar != 0 + setlocal noexpandtab +else + setlocal expandtab +endif + +setlocal comments=s1:{-,mb:-,ex:-},:\|\|\|,:-- +setlocal commentstring=--\ %s + +" makes ? a part of a word, e.g. for named holes `vzipWith f [] [] = ?vzipWith_rhs_3`, uncomment if want to reenable +" setlocal iskeyword+=? + +setlocal wildignore+=*.ibc + +let b:undo_ftplugin = "setlocal shiftwidth< tabstop< expandtab< comments< commentstring< iskeyword< wildignore<" + +let b:did_ftplugin = 1 diff --git a/mnv/runtime/ftplugin/indent.mnv b/mnv/runtime/ftplugin/indent.mnv new file mode 100644 index 0000000000..a536fd8368 --- /dev/null +++ b/mnv/runtime/ftplugin/indent.mnv @@ -0,0 +1,22 @@ +" MNV 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 +" 2024-06-02 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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/mnv/runtime/ftplugin/initex.mnv b/mnv/runtime/ftplugin/initex.mnv new file mode 100644 index 0000000000..3251bcd4d6 --- /dev/null +++ b/mnv/runtime/ftplugin/initex.mnv @@ -0,0 +1,40 @@ +" 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 +" Last Change: Thu 23 May 2024 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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&mnv + +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 MNV to recognize \input bar : +let &l:include = '\\input' +setlocal suffixesadd=.tex + +let &cpo = s:save_cpo +unlet s:save_cpo + +" mnv:sts=2:sw=2: diff --git a/mnv/runtime/ftplugin/ipkg.mnv b/mnv/runtime/ftplugin/ipkg.mnv new file mode 100644 index 0000000000..34f302af1d --- /dev/null +++ b/mnv/runtime/ftplugin/ipkg.mnv @@ -0,0 +1,19 @@ +" MNV ftplugin file +" Language: Ipkg +" Maintainer: Idris Hackers (https://github.com/edwinb/idris2-mnv), Serhii Khoma <srghma@gmail.com> +" Last Change: 2024 Nov 05 +" Author: ShinKage +" License: MNV (see :h license) +" Repository: https://github.com/ShinKage/idris2-nmnv + +if exists("b:did_ftplugin") + finish +endif + +setlocal comments=:-- +setlocal commentstring=--\ %s +setlocal wildignore+=*.ibc + +let b:undo_ftplugin = "setlocal shiftwidth< tabstop< expandtab< comments< commentstring< iskeyword< wildignore<" + +let b:did_ftplugin = 1 diff --git a/mnv/runtime/ftplugin/ishd.mnv b/mnv/runtime/ftplugin/ishd.mnv new file mode 100644 index 0000000000..5ad581c514 --- /dev/null +++ b/mnv/runtime/ftplugin/ishd.mnv @@ -0,0 +1,45 @@ +" MNV filetype plugin file +" Language: InstallShield (ft=ishd) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Johannes Zellner <johannes@zellner.org> +" Last Change: 2025 Jun 18 +" 2025 Jun 18 by MNV Project: set comments and commentstring option (#17490) + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +" Using line continuation here. +let s:cpo_save = &cpo +set cpo-=C + +setlocal foldmethod=syntax +setlocal commentstring=//\ %s +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// + +let b:undo_ftplugin = "setl fdm< com< cms" + +" 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*$' + 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 = "InstallShield Files (*.rul)\t*.rul\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "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/mnv/runtime/ftplugin/j.mnv b/mnv/runtime/ftplugin/j.mnv new file mode 100644 index 0000000000..28f232a790 --- /dev/null +++ b/mnv/runtime/ftplugin/j.mnv @@ -0,0 +1,88 @@ +" MNV filetype plugin +" Language: J +" Maintainer: David Bürgin <dbuergin@gluet.ch> +" URL: https://gitlab.com/glts/mnv-j +" Last Change: 2022-08-06 +" 2024 Jan 14 by MNV Project (browsefilter) + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + 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/mnv/runtime/ftplugin/java.mnv b/mnv/runtime/ftplugin/java.mnv new file mode 100644 index 0000000000..01d0e2e08e --- /dev/null +++ b/mnv/runtime/ftplugin/java.mnv @@ -0,0 +1,418 @@ +" MNV filetype plugin file +" Language: Java +" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com> +" Former Maintainer: Dan Sharp +" Repository: https://github.com/zzzyxwvut/java-mnv.git +" Last Change: 2025 May 08 + +" Make sure the continuation lines below do not cause problems in +" compatibility mode. +let s:save_cpo = &cpo +set cpo-=C + +if (exists("g:java_ignore_javadoc") || exists("g:java_ignore_markdown")) && + \ exists("*javaformat#RemoveCommonMarkdownWhitespace") + delfunction javaformat#RemoveCommonMarkdownWhitespace + unlet! g:loaded_javaformat +endif + +if exists("b:did_ftplugin") + let &cpo = s:save_cpo + unlet s:save_cpo + finish +endif + +let b:did_ftplugin = 1 + +" For filename completion, prefer the .java extension over the .class +" extension. +set suffixes+=.class + +" Set up "&define" and "&include". +let s:peek = '' + +try + " Since v7.3.1037. + if 'ab' !~ 'a\@1<!b' + let s:peek = string(strlen('instanceof') + 8) + endif +catch /\<E59:/ +endtry + +" Treat "s:common" as a non-backtracking unit to avoid matching constructor +" declarations whose package-private headers are indistinguishable from method +" invocation. Note that "[@-]" must not and "$" may not be in "&l:iskeyword". +let s:common = '\%(\%(\%(@\%(interface\)\@!\%(\K\k*\.\)*\K\k*\)\s\+\)*' . + \ '\%(p\%(rivate\|rotected\|ublic\)\s\+\)\=\)\@>' +let s:types = '\%(\%(abstract\|final\|non-sealed\|s\%(ealed\|tatic\|trictfp\)\)\s\+\)*' . + \ '\%(class\|enum\|@\=interface\|record\)\s\+\ze\K\k*\>' +let s:methods = '\%(\%(abstract\|default\|final\|native\|s\%(tatic\|trictfp\|ynchronized\)\)\s\+\)*' . + \ '\%(<.\{-1,}>\s\+\)\=\%(\K\k*\.\)*\K\k*\s*\%(<.\{-1,}>\%(\s\|\[\)\@=\)\=\s*\%(\[\]\s*\)*' . + \ '\s\+\ze\%(\<\%(assert\|case\|instanceof\|new\|return\|throw\|when\)\s\+\)\@' . + \ s:peek . '<!\K\k*\s*(' +let &l:define = printf('\C\m^\s*%s\%%(%s\|%s\)', s:common, s:types, s:methods) +let &l:include = '\C\m^\s*import\s\+\ze\%(\K\k*\.\)\+\K\k*;' +unlet s:methods s:types s:common s:peek + +" 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 + +" Clean up in case this file is sourced again. +unlet! s:zip_func_upgradable + +"""" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST MNV 7.0. + +" Documented in ":help ft-java-plugin". +if exists("g:ftplugin_java_source_path") && + \ type(g:ftplugin_java_source_path) == type("") + if filereadable(g:ftplugin_java_source_path) + if exists("#zip") && + \ g:ftplugin_java_source_path =~# '.\.\%(jar\|zip\)$' + if !exists("s:zip_files") + let s:zip_files = {} + endif + + let s:zip_files[bufnr('%')] = g:ftplugin_java_source_path + let s:zip_files[0] = g:ftplugin_java_source_path + let s:zip_func_upgradable = 1 + + function! JavaFileTypeZipFile() abort + let @/ = substitute(v:fname, '\.', '\\/', 'g') . '.java' + return get(s:zip_files, bufnr('%'), s:zip_files[0]) + endfunction + + " E120 for "inex=s:JavaFileTypeZipFile()" before v8.2.3900. + setlocal includeexpr=JavaFileTypeZipFile() + setlocal suffixesadd< + endif + else + let &l:path = g:ftplugin_java_source_path . ',' . &l:path + endif +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 Markdown Javadoc comments and dashed lists +" in other multi-line comments (it 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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter="Java Files (*.java)\t*.java\n" . + \ "Properties Files (*.prop*)\t*.prop*\n" . + \ "Manifest Files (*.mf)\t*.mf\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +"""" Support pre- and post-compiler actions for SpotBugs. +if (!empty(get(g:, 'spotbugs_properties', {})) || + \ !empty(get(b:, 'spotbugs_properties', {}))) && + \ filereadable($MNVRUNTIME . '/compiler/spotbugs.mnv') + + function! s:SpotBugsGetProperty(name, default) abort + return get( + \ {s:spotbugs_properties_scope}spotbugs_properties, + \ a:name, + \ a:default) + endfunction + + function! s:SpotBugsHasProperty(name) abort + return has_key( + \ {s:spotbugs_properties_scope}spotbugs_properties, + \ a:name) + endfunction + + function! s:SpotBugsGetProperties() abort + return {s:spotbugs_properties_scope}spotbugs_properties + endfunction + + " Work around ":bar"s and ":autocmd"s. + function! JavaFileTypeExecuteActionOnce(cleanup_cmd, action_cmd) abort + try + execute a:cleanup_cmd + finally + execute a:action_cmd + endtry + endfunction + + if exists("b:spotbugs_properties") + let s:spotbugs_properties_scope = 'b:' + + " Merge global entries, if any, in buffer-local entries, favouring + " defined buffer-local ones. + call extend( + \ b:spotbugs_properties, + \ get(g:, 'spotbugs_properties', {}), + \ 'keep') + elseif exists("g:spotbugs_properties") + let s:spotbugs_properties_scope = 'g:' + endif + + let s:commands = {} + + for s:name in ['DefaultPreCompilerCommand', + \ 'DefaultPreCompilerTestCommand', + \ 'DefaultPostCompilerCommand'] + if s:SpotBugsHasProperty(s:name) + let s:commands[s:name] = remove( + \ s:SpotBugsGetProperties(), + \ s:name) + endif + endfor + + if s:SpotBugsHasProperty('compiler') + " XXX: Postpone loading the script until all state, if any, has been + " collected. + if !empty(s:commands) + let g:spotbugs#state = { + \ 'compiler': remove(s:SpotBugsGetProperties(), 'compiler'), + \ 'commands': copy(s:commands), + \ } + else + let g:spotbugs#state = { + \ 'compiler': remove(s:SpotBugsGetProperties(), 'compiler'), + \ } + endif + + " Merge default entries in global (or buffer-local) entries, favouring + " defined global (or buffer-local) ones. + call extend( + \ {s:spotbugs_properties_scope}spotbugs_properties, + \ spotbugs#DefaultProperties(), + \ 'keep') + elseif !empty(s:commands) + " XXX: Postpone loading the script until all state, if any, has been + " collected. + let g:spotbugs#state = {'commands': copy(s:commands)} + endif + + unlet s:commands s:name + let s:request = 0 + + if s:SpotBugsHasProperty('PostCompilerAction') + let s:request += 4 + endif + + if s:SpotBugsHasProperty('PreCompilerTestAction') + let s:dispatcher = printf('call call(%s, [])', + \ string(s:SpotBugsGetProperties().PreCompilerTestAction)) + let s:request += 2 + endif + + if s:SpotBugsHasProperty('PreCompilerAction') + let s:dispatcher = printf('call call(%s, [])', + \ string(s:SpotBugsGetProperties().PreCompilerAction)) + let s:request += 1 + endif + + " Adapt the tests for "s:FindClassFiles()" from "compiler/spotbugs.mnv". + if (s:request == 3 || s:request == 7) && + \ (!empty(s:SpotBugsGetProperty('sourceDirPath', [])) && + \ !empty(s:SpotBugsGetProperty('classDirPath', [])) && + \ !empty(s:SpotBugsGetProperty('testSourceDirPath', [])) && + \ !empty(s:SpotBugsGetProperty('testClassDirPath', []))) + function! s:DispatchAction(paths_action_pairs) abort + let name = expand('%:p') + + for [paths, Action] in a:paths_action_pairs + for path in paths + if name =~# (path . '.\{-}\.java\=$') + call Action() + return + endif + endfor + endfor + endfunction + + let s:dir_cnt = min([ + \ len(s:SpotBugsGetProperties().sourceDirPath), + \ len(s:SpotBugsGetProperties().classDirPath)]) + let s:test_dir_cnt = min([ + \ len(s:SpotBugsGetProperties().testSourceDirPath), + \ len(s:SpotBugsGetProperties().testClassDirPath)]) + + " Do not break up path pairs with filtering! + let s:dispatcher = printf('call s:DispatchAction(%s)', + \ string([[s:SpotBugsGetProperties().sourceDirPath[0 : s:dir_cnt - 1], + \ s:SpotBugsGetProperties().PreCompilerAction], + \ [s:SpotBugsGetProperties().testSourceDirPath[0 : s:test_dir_cnt - 1], + \ s:SpotBugsGetProperties().PreCompilerTestAction]])) + unlet s:test_dir_cnt s:dir_cnt + endif + + if exists("s:dispatcher") + function! s:ExecuteActions(pre_action, post_action) abort + try + execute a:pre_action + catch /\<E42:/ + execute a:post_action + endtry + endfunction + endif + + if s:request + if exists("b:spotbugs_syntax_once") || empty(join(getline(1, 8), '')) + let s:actions = [{'event': 'User'}] + else + " XXX: Handle multiple FileType events when mnvrc contains more + " than one filetype setting for the language, e.g.: + " :filetype plugin indent on + " :autocmd BufRead,BufNewFile *.java setlocal filetype=java ... + " XXX: DO NOT ADD b:spotbugs_syntax_once TO b:undo_ftplugin ! + let b:spotbugs_syntax_once = 1 + let s:actions = [{ + \ 'event': 'Syntax', + \ 'once': 1, + \ }, { + \ 'event': 'User', + \ }] + endif + + for s:idx in range(len(s:actions)) + if s:request == 7 || s:request == 6 || s:request == 5 + let s:actions[s:idx].cmd = printf('call s:ExecuteActions(%s, %s)', + \ string(s:dispatcher), + \ string(printf('compiler spotbugs | call call(%s, [])', + \ string(s:SpotBugsGetProperties().PostCompilerAction)))) + elseif s:request == 4 + let s:actions[s:idx].cmd = printf( + \ 'compiler spotbugs | call call(%s, [])', + \ string(s:SpotBugsGetProperties().PostCompilerAction)) + elseif s:request == 3 || s:request == 2 || s:request == 1 + let s:actions[s:idx].cmd = printf('call s:ExecuteActions(%s, %s)', + \ string(s:dispatcher), + \ string('compiler spotbugs')) + else + let s:actions[s:idx].cmd = '' + endif + endfor + + if !exists("#java_spotbugs") + augroup java_spotbugs + augroup END + endif + + " The events are defined in s:actions. + silent! autocmd! java_spotbugs User <buffer> + silent! autocmd! java_spotbugs Syntax <buffer> + + for s:action in s:actions + if has_key(s:action, 'once') + execute printf('autocmd java_spotbugs %s <buffer> ' . + \ 'call JavaFileTypeExecuteActionOnce(%s, %s)', + \ s:action.event, + \ string(printf('autocmd! java_spotbugs %s <buffer>', + \ s:action.event)), + \ string(s:action.cmd)) + else + execute printf('autocmd java_spotbugs %s <buffer> %s', + \ s:action.event, + \ s:action.cmd) + endif + endfor + + if s:SpotBugsHasProperty('PostCompilerActionExecutor') && + \ (s:request == 7 || s:request == 6 || + \ s:request == 5 || s:request == 4) + let s:augroup = s:SpotBugsGetProperty( + \ 'augroupForPostCompilerAction', + \ 'java_spotbugs_post') + let s:augroup = !empty(s:augroup) ? s:augroup : 'java_spotbugs_post' + + for s:candidate in ['java_spotbugs_post', s:augroup] + if !exists("#" . s:candidate) + execute printf('augroup %s | augroup END', s:candidate) + endif + endfor + + silent! autocmd! java_spotbugs_post User <buffer> + + " Define a User ":autocmd" to define a once-only ShellCmdPost + " ":autocmd" that will invoke "PostCompilerActionExecutor" and let + " it decide whether to proceed with ":compiler spotbugs" etc.; and + " seek explicit synchronisation with ":doautocmd ShellCmdPost" by + " omitting "nested" for "java_spotbugs_post" and "java_spotbugs". + execute printf('autocmd java_spotbugs_post User <buffer> ' . + \ 'call JavaFileTypeExecuteActionOnce(%s, %s)', + \ string(printf('autocmd! %s ShellCmdPost <buffer>', s:augroup)), + \ string(printf('autocmd %s ShellCmdPost <buffer> ' . + \ 'call JavaFileTypeExecuteActionOnce(%s, %s)', + \ s:augroup, + \ string(printf('autocmd! %s ShellCmdPost <buffer>', s:augroup)), + \ string(printf('call call(%s, [%s])', + \ string(s:SpotBugsGetProperties().PostCompilerActionExecutor), + \ string(printf('compiler spotbugs | call call(%s, [])', + \ string(s:SpotBugsGetProperties().PostCompilerAction)))))))) + endif + + unlet! s:candidate s:augroup s:action s:actions s:idx s:dispatcher + endif + + delfunction s:SpotBugsGetProperties + delfunction s:SpotBugsHasProperty + delfunction s:SpotBugsGetProperty + unlet! s:request s:spotbugs_properties_scope +endif + +function! JavaFileTypeCleanUp() abort + setlocal suffixes< suffixesadd< formatoptions< comments< commentstring< path< includeexpr< include< define< + unlet! b:browsefilter + + " The concatenated ":autocmd" removals may be misparsed as an ":autocmd". + " A _once-only_ ShellCmdPost ":autocmd" is always a call-site definition. + silent! autocmd! java_spotbugs User <buffer> + silent! autocmd! java_spotbugs Syntax <buffer> + silent! autocmd! java_spotbugs_post User <buffer> +endfunction + +" Undo the stuff we changed. +let b:undo_ftplugin = 'call JavaFileTypeCleanUp() | delfunction JavaFileTypeCleanUp' + +" See ":help mnv9-mix". +if !has("mnv9script") + let &cpo = s:save_cpo + unlet s:save_cpo + finish +endif + +if exists("s:zip_func_upgradable") + delfunction! JavaFileTypeZipFile + + def! s:JavaFileTypeZipFile(): string + @/ = substitute(v:fname, '\.', '\\/', 'g') .. '.java' + return get(zip_files, bufnr('%'), zip_files[0]) + enddef + + setlocal includeexpr=s:JavaFileTypeZipFile() + setlocal suffixesadd< +endif + +if exists("*s:DispatchAction") + def! s:DispatchAction(paths_action_pairs: list<list<any>>) + const name: string = expand('%:p') + + for [paths: list<string>, Action: func: any] in paths_action_pairs + for path in paths + if name =~# (path .. '.\{-}\.java\=$') + Action() + return + endif + endfor + endfor + enddef +endif + +" Restore the saved compatibility options. +let &cpo = s:save_cpo +unlet s:save_cpo +" mnv: fdm=syntax sw=4 ts=8 noet sta diff --git a/mnv/runtime/ftplugin/javacc.mnv b/mnv/runtime/ftplugin/javacc.mnv new file mode 100644 index 0000000000..52bd9a4007 --- /dev/null +++ b/mnv/runtime/ftplugin/javacc.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin +" Language: JavaCC +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +if exists('b:did_ftplugin') + finish +endif +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 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 + +let b:undo_ftplugin = 'setl fo< com< cms<' diff --git a/mnv/runtime/ftplugin/javascript.mnv b/mnv/runtime/ftplugin/javascript.mnv new file mode 100644 index 0000000000..b91748f901 --- /dev/null +++ b/mnv/runtime/ftplugin/javascript.mnv @@ -0,0 +1,80 @@ +" MNV filetype plugin file +" Language: Javascript +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Contributor: Romain Lafourcade <romainlafourcade@gmail.com> +" Last Change: 2024 Jan 14 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +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 + +" mnv: textwidth=78 tabstop=8 shiftwidth=4 softtabstop=4 expandtab diff --git a/mnv/runtime/ftplugin/javascriptreact.mnv b/mnv/runtime/ftplugin/javascriptreact.mnv new file mode 100644 index 0000000000..e2d3dcc895 --- /dev/null +++ b/mnv/runtime/ftplugin/javascriptreact.mnv @@ -0,0 +1,7 @@ +" MNV 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.mnv diff --git a/mnv/runtime/ftplugin/jjdescription.mnv b/mnv/runtime/ftplugin/jjdescription.mnv new file mode 100644 index 0000000000..fbb6d4d010 --- /dev/null +++ b/mnv/runtime/ftplugin/jjdescription.mnv @@ -0,0 +1,19 @@ +" MNV filetype plugin +" Language: jj description +" Maintainer: Gregory Anders <greg@gpanders.com> +" Last Change: 2024 May 8 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +" Use the same formatoptions and textwidth as the gitcommit ftplugin +setlocal nomodeline formatoptions+=tl textwidth=72 +setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q formatoptions+=n +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}]\\s\\+\\\|^\\s*[-*+]\\s\\+ + +setlocal comments=b:JJ: +setlocal commentstring=JJ:\ %s + +let b:undo_ftplugin = 'setl modeline< formatoptions< textwidth< formatlistpat< comments< commentstring<' diff --git a/mnv/runtime/ftplugin/jproperties.mnv b/mnv/runtime/ftplugin/jproperties.mnv new file mode 100644 index 0000000000..79ae8afce4 --- /dev/null +++ b/mnv/runtime/ftplugin/jproperties.mnv @@ -0,0 +1,15 @@ +" MNV 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/mnv/runtime/ftplugin/jq.mnv b/mnv/runtime/ftplugin/jq.mnv new file mode 100644 index 0000000000..3c5c0d95ef --- /dev/null +++ b/mnv/runtime/ftplugin/jq.mnv @@ -0,0 +1,23 @@ +" MNV compiler file +" Language: jq +" Maintainer: Vito <vito.blog@gmail.com> +" Last Change: 2024 Apr 29 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" 2024 Oct 04 by Konfekt (unset compiler) +" Upstream: https://github.com/vito-c/jq.mnv + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal include=^\\s*\\%(import\\\|include\\) +setlocal commentstring=#\ %s + +let b:undo_ftplugin = 'setl commentstring< include<' + +if !exists('current_compiler') + let b:undo_ftplugin ..= "| compiler make" + compiler jq +endif + diff --git a/mnv/runtime/ftplugin/json.mnv b/mnv/runtime/ftplugin/json.mnv new file mode 100644 index 0000000000..68a3022554 --- /dev/null +++ b/mnv/runtime/ftplugin/json.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin +" Language: JSON +" Maintainer: David Barnett <daviebdawg+mnv@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/mnv/runtime/ftplugin/json5.mnv b/mnv/runtime/ftplugin/json5.mnv new file mode 100644 index 0000000000..785ed1729c --- /dev/null +++ b/mnv/runtime/ftplugin/json5.mnv @@ -0,0 +1,32 @@ +" MNV filetype plugin file +" Language: JSON5 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +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 = "JSON5 Files (*.json5)\t*.json5\n" .. + \ "JSON Files (*.json)\t*.json\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "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/mnv/runtime/ftplugin/jsonc.mnv b/mnv/runtime/ftplugin/jsonc.mnv new file mode 100644 index 0000000000..5f0d57b68a --- /dev/null +++ b/mnv/runtime/ftplugin/jsonc.mnv @@ -0,0 +1,22 @@ +" MNV filetype plugin +" Language: JSONC (JSON with Comments) +" Original Author: Izhak Jakov <izhak724@gmail.com> +" Acknowledgement: Based off of mnv-jsonc maintained by Kevin Locke <kevin@kevinlocke.name> +" https://github.com/kevinoid/mnv-jsonc +" License: MIT +" Last Change: 2021 Nov 22 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +runtime! ftplugin/json.mnv + +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 MNV know how to disable the plug-in. +let b:undo_ftplugin = 'setlocal commentstring< comments<' diff --git a/mnv/runtime/ftplugin/jsonnet.mnv b/mnv/runtime/ftplugin/jsonnet.mnv new file mode 100644 index 0000000000..d9b8cbc9f2 --- /dev/null +++ b/mnv/runtime/ftplugin/jsonnet.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin +" Language: Jsonnet +" Maintainer: Cezary Drożak <cezary@drozak.net> +" URL: https://github.com/google/mnv-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/mnv/runtime/ftplugin/jsp.mnv b/mnv/runtime/ftplugin/jsp.mnv new file mode 100644 index 0000000000..3daaccfbf0 --- /dev/null +++ b/mnv/runtime/ftplugin/jsp.mnv @@ -0,0 +1,74 @@ +" MNV filetype plugin file +" Language: jsp +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif +let s:match_words = "" + +runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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.mnv ftplugin/java_*.mnv ftplugin/java/*.mnv +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.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/julia.mnv b/mnv/runtime/ftplugin/julia.mnv new file mode 100644 index 0000000000..695edee1b6 --- /dev/null +++ b/mnv/runtime/ftplugin/julia.mnv @@ -0,0 +1,92 @@ +" MNV filetype plugin file +" Language: Julia +" Maintainer: Carlo Baldassi <carlobaldassi@gmail.com> +" Homepage: https://github.com/JuliaEditorSupport/julia-mnv +" Last Change: 2021 Aug 04 +" 2026 Feb 27 sync with upstream repo + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&mnv + +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_mnv_loaded = 1 + +let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<" + \ . " define< fo< cinoptions< completefunc<" + \ . " | unlet! b:julia_mnv_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\|else\|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/mnv/runtime/ftplugin/just.mnv b/mnv/runtime/ftplugin/just.mnv new file mode 100644 index 0000000000..110f183ecc --- /dev/null +++ b/mnv/runtime/ftplugin/just.mnv @@ -0,0 +1,17 @@ +" MNV ftplugin file +" Language: Justfile +" Maintainer: Peter Benjamin <@pbnj> +" Last Change: 2025 Jan 19 +" Credits: The original author, Noah Bogart <https://github.com/NoahTheDuke/mnv-just/> + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal iskeyword+=- +setlocal comments=n:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal iskeyword< comments< commentstring<" diff --git a/mnv/runtime/ftplugin/karel.mnv b/mnv/runtime/ftplugin/karel.mnv new file mode 100644 index 0000000000..27f1c55f8d --- /dev/null +++ b/mnv/runtime/ftplugin/karel.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: KAREL +" Last Change: 2024-11-18 +" Maintainer: Kirill Morozov <kirill@robotix.pro> +" Credits: Patrick Meiser-Knosowski for the initial implementation. + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:-- +setlocal commentstring=--\ %s +setlocal suffixesadd+=.kl,.KL + +let b:undo_ftplugin = "setlocal com< cms< sua<" diff --git a/mnv/runtime/ftplugin/kconfig.mnv b/mnv/runtime/ftplugin/kconfig.mnv new file mode 100644 index 0000000000..c8253a8d55 --- /dev/null +++ b/mnv/runtime/ftplugin/kconfig.mnv @@ -0,0 +1,23 @@ +" MNV filetype plugin file +" MNV syntax file +" Maintainer: Christian Brabandt <cb@256bit.org> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025 Jan 20 +" License: MNV (see :h license) +" Repository: https://github.com/chrisbra/mnv-kconfig + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setl inc< com< cms< fo<" + +setlocal include=source\\s\\+ +setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql + +" For matchit.mnv +if exists("loaded_matchit") + let b:match_words = '^\<menu\>:\<endmenu\>,^\<if\>:\<endif\>,^\<choice\>:\<endchoice\>' + let b:undo_ftplugin .= "| unlet! b:match_words" +endif diff --git a/mnv/runtime/ftplugin/kdl.mnv b/mnv/runtime/ftplugin/kdl.mnv new file mode 100644 index 0000000000..6423683ae6 --- /dev/null +++ b/mnv/runtime/ftplugin/kdl.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin +" Language: KDL +" Author: Aram Drevekenin <aram@poor.dev> +" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com> +" Last Change: 2024-06-10 + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +setlocal comments=:// +setlocal commentstring=//\ %s +setlocal formatoptions-=t + +let b:undo_ftplugin = 'setlocal comments< commentstring< formatoptions<' diff --git a/mnv/runtime/ftplugin/kerml.mnv b/mnv/runtime/ftplugin/kerml.mnv new file mode 100644 index 0000000000..954684ca2f --- /dev/null +++ b/mnv/runtime/ftplugin/kerml.mnv @@ -0,0 +1,25 @@ +" MNV filetype plugin +" Language: KerML +" Author: Daumantas Kavolis <daumantas.kavolis@sensmetry.com> +" Last Change: 2025-10-06 + +" 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 'comments' to format dashed and starred lists in comments, +" include /*...*/ in 'comments' for formatting even if it technically +" is not +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,sO:*\ *,mO:*\ \ ,exO:*/,sr://*,mb:*,ex:*/,sr:/*,mb:*,ex:*/,:///,:// +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 formatoptions-=t +setlocal formatoptions+=croql + +let b:undo_ftplugin = 'setlocal comments< commentstring< formatoptions<' diff --git a/mnv/runtime/ftplugin/kitty.mnv b/mnv/runtime/ftplugin/kitty.mnv new file mode 100644 index 0000000000..8cea5b926e --- /dev/null +++ b/mnv/runtime/ftplugin/kitty.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: kitty +" Maintainer: Arvin Verain <arvinverain@proton.me> +" Last Change: 2026 Jan 22 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=rol + +let b:undo_ftplugin = 'setl com< cms< fo<' diff --git a/mnv/runtime/ftplugin/kivy.mnv b/mnv/runtime/ftplugin/kivy.mnv new file mode 100644 index 0000000000..7a131cc295 --- /dev/null +++ b/mnv/runtime/ftplugin/kivy.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: Kivy +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl commentstring=#\ %s + +let b:undo_ftplugin = 'setl cms<' diff --git a/mnv/runtime/ftplugin/kotlin.mnv b/mnv/runtime/ftplugin/kotlin.mnv new file mode 100644 index 0000000000..c29b873d09 --- /dev/null +++ b/mnv/runtime/ftplugin/kotlin.mnv @@ -0,0 +1,37 @@ +" MNV filetype plugin file +" Language: Kotlin +" Maintainer: Alexander Udalov +" URL: https://github.com/udalov/kotlin-mnv +" Last Change: 7 November 2021 +" 2024 Jan 14 by MNV Project (browsefilter) + +if exists('b:did_ftplugin') | finish | endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&mnv + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +setlocal formatoptions-=t formatoptions+=croqnl +silent! setlocal formatoptions+=j + +setlocal includeexpr=substitute(v:fname,'\\.','/','g') +setlocal suffixesadd=.kt + +let b:undo_ftplugin = "setlocal comments< commentstring< ". + \ "formatoptions< includeexpr< suffixesadd<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Kotlin Source Files (*.kt, *kts)\t*.kt;*.kts\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/mnv/runtime/ftplugin/kwt.mnv b/mnv/runtime/ftplugin/kwt.mnv new file mode 100644 index 0000000000..7f6a8744e7 --- /dev/null +++ b/mnv/runtime/ftplugin/kwt.mnv @@ -0,0 +1,37 @@ +" MNV filetype plugin file +" Language: Kimwitu++ +" Maintainer: Michael Piefel <entwurf@piefel.de> +" Last Change: 10 March 2012 +" 2024 Jan 14 by MNV Project (browsefilter) + +" Behaves almost like C++ +runtime! ftplugin/cpp.mnv ftplugin/cpp_*.mnv ftplugin/cpp/*.mnv + +let s:cpo_save = &cpo +set cpo&mnv + +" Limit the browser to related files +if (has("gui_win32") || has("gui_gtk")) && !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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +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:browsefilter" +else + let b:undo_ftplugin = "setlocal efm<" + \ . "| unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/lc.mnv b/mnv/runtime/ftplugin/lc.mnv new file mode 100644 index 0000000000..6be9cf10d7 --- /dev/null +++ b/mnv/runtime/ftplugin/lc.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: Elsa +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 25 + +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/mnv/runtime/ftplugin/ld.mnv b/mnv/runtime/ftplugin/ld.mnv new file mode 100644 index 0000000000..e4449de71a --- /dev/null +++ b/mnv/runtime/ftplugin/ld.mnv @@ -0,0 +1,21 @@ +" MNV filetype plugin file +" Language: ld(1) script +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2008 Jul 09 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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/mnv/runtime/ftplugin/ldapconf.mnv b/mnv/runtime/ftplugin/ldapconf.mnv new file mode 100644 index 0000000000..ee5a527c94 --- /dev/null +++ b/mnv/runtime/ftplugin/ldapconf.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: ldap.conf(5) configuration file. +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +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/mnv/runtime/ftplugin/leex.mnv b/mnv/runtime/ftplugin/leex.mnv new file mode 100644 index 0000000000..137541d3f7 --- /dev/null +++ b/mnv/runtime/ftplugin/leex.mnv @@ -0,0 +1,14 @@ +" MNV ftplugin file +" Language: Leex (Erlang Lexical Analyzer Generator) +" Maintainer: Jon Parise <jon@indelible.org> +" Last Change: 2025 Nov 29 +" Filenames: *.xrl +" +" References: +" - https://www.erlang.org/doc/apps/parsetools/leex.html + +if exists('b:did_ftplugin') + finish +endif + +runtime! ftplugin/erlang.mnv diff --git a/mnv/runtime/ftplugin/leo.mnv b/mnv/runtime/ftplugin/leo.mnv new file mode 100644 index 0000000000..04f2befae9 --- /dev/null +++ b/mnv/runtime/ftplugin/leo.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: Leo +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Nov 03 + +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/mnv/runtime/ftplugin/less.mnv b/mnv/runtime/ftplugin/less.mnv new file mode 100644 index 0000000000..9af58b5748 --- /dev/null +++ b/mnv/runtime/ftplugin/less.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin +" Language: less +" Maintainer: Alessandro Vioni <jenoma@gmail.com> +" URL: https://github.com/genoma/mnv-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/mnv/runtime/ftplugin/lex.mnv b/mnv/runtime/ftplugin/lex.mnv new file mode 100644 index 0000000000..8c5510fa6c --- /dev/null +++ b/mnv/runtime/ftplugin/lex.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: Lex and Flex +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/lf.mnv b/mnv/runtime/ftplugin/lf.mnv new file mode 100644 index 0000000000..860e58f88a --- /dev/null +++ b/mnv/runtime/ftplugin/lf.mnv @@ -0,0 +1,22 @@ +" MNV filetype plugin file +" Language: lf file manager configuration file (lfrc) +" Maintainer: Andis Sprinkis <andis@sprinkis.com>, @CatsDeservePets +" URL: https://github.com/andis-sprinkis/lf-mnv +" Last Change: 6 Apr 2025 + +if exists("b:did_ftplugin") | finish | endif + +let b:did_ftplugin = 1 + +let s:cpo = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setlocal comments< commentstring< formatoptions<" + +setlocal comments=:# +setlocal commentstring=#\ %s + +setlocal formatoptions-=t formatoptions+=rol + +let &cpo = s:cpo +unlet s:cpo diff --git a/mnv/runtime/ftplugin/lftp.mnv b/mnv/runtime/ftplugin/lftp.mnv new file mode 100644 index 0000000000..364a6d2f60 --- /dev/null +++ b/mnv/runtime/ftplugin/lftp.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/libao.mnv b/mnv/runtime/ftplugin/libao.mnv new file mode 100644 index 0000000000..dc43ef733d --- /dev/null +++ b/mnv/runtime/ftplugin/libao.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/limits.mnv b/mnv/runtime/ftplugin/limits.mnv new file mode 100644 index 0000000000..7006f6784f --- /dev/null +++ b/mnv/runtime/ftplugin/limits.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/liquid.mnv b/mnv/runtime/ftplugin/liquid.mnv new file mode 100644 index 0000000000..3885e3d093 --- /dev/null +++ b/mnv/runtime/ftplugin/liquid.mnv @@ -0,0 +1,62 @@ +" MNV filetype plugin +" Language: Liquid +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" Last Change: 2022 Mar 15 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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.'.mnv ftplugin/'.b:liquid_subtype.'_*.mnv ftplugin/'.b:liquid_subtype.'/*.mnv' +else + runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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/mnv/runtime/ftplugin/lisp.mnv b/mnv/runtime/ftplugin/lisp.mnv new file mode 100644 index 0000000000..6aa65299f6 --- /dev/null +++ b/mnv/runtime/ftplugin/lisp.mnv @@ -0,0 +1,25 @@ +" MNV filetype plugin +" Language: Lisp +" Maintainer: Sergey Khorev <sergey.khorev@gmail.com> +" URL: http://sites.google.com/site/khorser/opensource/mnv +" Original author: Dorai Sitaram <ds26@gte.com> +" Original URL: http://www.ccs.neu.edu/~dorai/mnvplugins/mnvplugins.html +" Last Change: Mar 10, 2021 +" May 23, 2024 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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/mnv/runtime/ftplugin/livebook.mnv b/mnv/runtime/ftplugin/livebook.mnv new file mode 100644 index 0000000000..3892097824 --- /dev/null +++ b/mnv/runtime/ftplugin/livebook.mnv @@ -0,0 +1,9 @@ +" Placeholder livebook filetype plugin file. +" This simply uses the markdown filetype plugin. + +" Only load this plugin when no other was loaded. +if exists("b:did_ftplugin") + finish +endif + +runtime! ftplugin/markdown.mnv ftplugin/markdown_*.mnv ftplugin/markdown/*.mnv diff --git a/mnv/runtime/ftplugin/llvm.mnv b/mnv/runtime/ftplugin/llvm.mnv new file mode 100644 index 0000000000..3f4ac7ece8 --- /dev/null +++ b/mnv/runtime/ftplugin/llvm.mnv @@ -0,0 +1,12 @@ +" MNV filetype plugin file +" Language: LLVM IR +" Last Change: 2024 Oct 22 +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +setl comments=:; +setl commentstring=;\ %s + +let b:undo_ftplugin = "setl commentstring< comments<" diff --git a/mnv/runtime/ftplugin/lnk.mnv b/mnv/runtime/ftplugin/lnk.mnv new file mode 100644 index 0000000000..b2335963bc --- /dev/null +++ b/mnv/runtime/ftplugin/lnk.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: TI linker command file +" Document: https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Last Change: 2024 Dec 31 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// +setlocal commentstring=/*\ %s\ */ +setlocal iskeyword+=. + +let b:undo_ftplugin = "setl commentstring< comments< iskeyword<" diff --git a/mnv/runtime/ftplugin/lnkmap.mnv b/mnv/runtime/ftplugin/lnkmap.mnv new file mode 100644 index 0000000000..2c924ae28c --- /dev/null +++ b/mnv/runtime/ftplugin/lnkmap.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: TI Linker map +" Document: https://downloads.ti.com/docs/esd/SPRUI03A/Content/SPRUI03A_HTML/linker_description.html +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Last Change: 2024 Dec 25 + +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 iskeyword<" + +setl iskeyword+=. diff --git a/mnv/runtime/ftplugin/logcheck.mnv b/mnv/runtime/ftplugin/logcheck.mnv new file mode 100644 index 0000000000..073e10a884 --- /dev/null +++ b/mnv/runtime/ftplugin/logcheck.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: Logcheck +" Maintainer: Debian MNV Maintainers +" Last Change: 2023 Jan 16 +" License: MNV License +" URL: https://salsa.debian.org/mnv-team/mnv-debian/blob/main/ftplugin/logcheck.mnv + +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/mnv/runtime/ftplugin/loginaccess.mnv b/mnv/runtime/ftplugin/loginaccess.mnv new file mode 100644 index 0000000000..c10cbf2d32 --- /dev/null +++ b/mnv/runtime/ftplugin/loginaccess.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/logindefs.mnv b/mnv/runtime/ftplugin/logindefs.mnv new file mode 100644 index 0000000000..2f829ee50f --- /dev/null +++ b/mnv/runtime/ftplugin/logindefs.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/logtalk.dict b/mnv/runtime/ftplugin/logtalk.dict new file mode 100644 index 0000000000..386cf1f2ab --- /dev/null +++ b/mnv/runtime/ftplugin/logtalk.dict @@ -0,0 +1,271 @@ +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_codes +atom_concat +atom_length +at_end_of_stream +bagof +before +built_in +call +callable +calls +catch +catchall_catch +category +category_property +ceiling +char_code +char_conversion +clause +clean +close +code_prefix +coinduction +coinductive +compare +complements +complements_object +compound +conditionals +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 +consistency_error +duplicated_directives +dynamic +dynamic_declarations +elif +else +encoding +encoding_directive +endif +end_category +end_object +end_protocol +engines +ensure_loaded +error +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 +mode_non_terminal +modules +multifile +nl +nonvar +number +numbervars +number_chars +number_codes +object +object_property +once +one +one_or_error +one_or_more +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_cancel +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 +uninstantiation_error +unknown_entities +unknown_predicates +uses +use_module +var +version +write +writeq +write_canonical +xor +zero +zero_or_error +zero_or_more +zero_or_one +zero_or_one_or_error diff --git a/mnv/runtime/ftplugin/logtalk.mnv b/mnv/runtime/ftplugin/logtalk.mnv new file mode 100644 index 0000000000..b10bdda197 --- /dev/null +++ b/mnv/runtime/ftplugin/logtalk.mnv @@ -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=$MNVRUNTIME/ftplugin/logtalk.dict diff --git a/mnv/runtime/ftplugin/lprolog.mnv b/mnv/runtime/ftplugin/lprolog.mnv new file mode 100644 index 0000000000..6793a9a2fd --- /dev/null +++ b/mnv/runtime/ftplugin/lprolog.mnv @@ -0,0 +1,55 @@ +" MNV settings file +" Language: LambdaProlog (Teyjus) +" Maintainer: Markus Mottl <markus.mottl@gmail.com> +" URL: http://www.ocaml.info/mnv/ftplugin/lprolog.mnv +" Last Change: 2025 Jun 08 - set 'comments', 'commentstring' +" 2025 Apr 16 - set 'cpoptions' for line continuation +" 2023 Aug 28 - added undo_ftplugin (MNV Project) +" 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 + +let s:cpo_save = &cpo +set cpo&mnv + +" Don't do other file type settings for this buffer +let b:did_ftplugin = 1 + +" Error format +setlocal efm=%+A./%f:%l.%c:\ %m + +" Formatting of comments +setlocal formatprg=fmt\ -w75\ -p\\% + +setlocal comments=s1:/*,mb:*,ex:*/,:% commentstring=%\ %s + +let b:undo_ftplugin = "setlocal efm< fp< com< cms<" + +" 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 + let b:undo_ftplugin ..= + \ " | silent! execute 'nunmap <buffer> <LocalLeader>c'" .. + \ " | silent! execute 'vunmap <buffer> <LocalLeader>c'" .. + \ " | silent! execute 'nunmap <buffer> <LocalLeader>C'" .. + \ " | silent! execute 'vunmap <buffer> <LocalLeader>C'" + 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 + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/lua.mnv b/mnv/runtime/ftplugin/lua.mnv new file mode 100644 index 0000000000..776b8a4d54 --- /dev/null +++ b/mnv/runtime/ftplugin/lua.mnv @@ -0,0 +1,190 @@ +" MNV 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> +" Tyler Miller <tmillr@proton.me> +" Phạm Bình An <phambinhanctb2004@gmail.com> +" @konfekt +" Last Change: 2025 Apr 04 +" 2025 May 06 by MNV Project update 'path' setting #17267 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +" keep in sync with syntax/lua.mnv +if !exists("lua_version") + " Default is lua 5.3 + let lua_version = 5 + let lua_subversion = 3 +elseif !exists("lua_subversion") + " lua_version exists, but lua_subversion doesn't. In this case set it to 0 + let lua_subversion = 0 +endif + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=:---,:-- +setlocal commentstring=--\ %s +setlocal formatoptions-=t formatoptions+=croql +setlocal path-=. " Lua doesn't support importing module in path related to current file like JS + +let &l:define = '\<function\|\<local\%(\s\+function\)\=' + +let &l:include = '\<\%(\%(do\|load\)file\|require\)\s*(' +setlocal includeexpr=s:LuaInclude(v:fname) +setlocal suffixesadd=.lua + +let b:undo_ftplugin = "setl cms< com< def< fo< inc< inex< sua< pa<" + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +if has("folding") && get(g:, "lua_folding", 0) + setlocal foldmethod=expr + setlocal foldexpr=s:LuaFold() + let b:lua_lasttick = -1 + let b:undo_ftplugin ..= " | setl foldexpr< foldmethod< | unlet! b:lua_lasttick b:lua_foldlists" +endif + +" The rest of the file needs to be :sourced only once per MNV session +if exists("s:loaded_lua") || &cp + let &cpo = s:cpo_save + unlet s:cpo_save + finish +endif +let s:loaded_lua = 1 + +function s:LuaInclude(fname) abort + let lua_ver = str2float(printf("%d.%02d", g:lua_version, g:lua_subversion)) + let fname = tr(a:fname, '.', '/') + let paths = lua_ver >= 5.03 ? [fname .. ".lua", fname .. "/init.lua"] : [fname .. ".lua"] + for path in paths + if filereadable(path) + return path + endif + endfor + return fname +endfunction + +let s:patterns = [ + \ ['do', 'end'], + \ ['if\s+.+\s+then', 'end'], + \ ['repeat', 'until\s+.+'], + \ ['for\s+.+\s+do', 'end'], + \ ['while\s+.+\s+do', 'end'], + \ ['function.+', 'end'], + \ ['return\s+function.+', 'end'], + \ ['local\s+function\s+.+', 'end'], + \ ] + +function s:LuaFold() abort + if b:lua_lasttick == b:changedtick + return b:lua_foldlists[v:lnum - 1] + endif + let b:lua_lasttick = b:changedtick + + let b:lua_foldlists = [] + let foldlist = [] + let buf = getline(1, "$") + for line in buf + for t in s:patterns + let open = 0 + let end = 0 + let tagopen = '\v^\s*' .. t[0] ..'\s*$' + let tagend = '\v^\s*' .. t[1] ..'\s*$' + if line =~# tagopen + call add(foldlist, t) + let open = 1 + break + elseif line =~# tagend + if len(foldlist) > 0 && line =~# foldlist[-1][1] + call remove(foldlist, -1) + let end = 1 + else + let foldlist = [] + endif + break + endif + endfor + let prefix = "" + if open == 1 | let prefix = ">" | endif + if end == 1 | let prefix = "<" | endif + let b:lua_foldlists += [prefix..(len(foldlist) + end)] + endfor + + return b:lua_foldlists[v:lnum - 1] +endfunction + +if !has('mnv9script') + let &cpo = s:cpo_save + unlet s:cpo_save + + finish +endif + +delfunction! s:LuaFold +def s:LuaFold(): string + if b:lua_lasttick == b:changedtick + return b:lua_foldlists[v:lnum - 1] + endif + b:lua_lasttick = b:changedtick + + b:lua_foldlists = [] + var foldlist = [] + var buf = getline(1, "$") + for line in buf + var open = 0 + var end = 0 + for t in patterns + var tagopen = '\v^\s*' .. t[0] .. '\s*$' + var tagend = '\v^\s*' .. t[1] .. '\s*$' + if line =~# tagopen + add(foldlist, t) + open = 1 + break + elseif line =~# tagend + if len(foldlist) > 0 && line =~# foldlist[-1][1] + end = 1 + remove(foldlist, -1) + else + foldlist = [] + endif + break + endif + endfor + var prefix = "" + if open == 1 | prefix = ">" | endif + if end == 1 | prefix = "<" | endif + b:lua_foldlists += [prefix .. (len(foldlist) + end)] + endfor + return b:lua_foldlists[v:lnum - 1] +enddef + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/luau.mnv b/mnv/runtime/ftplugin/luau.mnv new file mode 100644 index 0000000000..89e4970815 --- /dev/null +++ b/mnv/runtime/ftplugin/luau.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: Luau +" Maintainer: None yet +" Last Change: 2023 Apr 30 + +if exists("b:did_ftplugin") + finish +endif + +" Luau is a superset of Lua +runtime! ftplugin/lua.mnv + + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/lynx.mnv b/mnv/runtime/ftplugin/lynx.mnv new file mode 100644 index 0000000000..2d3cc26b47 --- /dev/null +++ b/mnv/runtime/ftplugin/lynx.mnv @@ -0,0 +1,33 @@ +" MNV filetype plugin file +" Language: Lynx Web Browser Configuration +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/m17ndb.mnv b/mnv/runtime/ftplugin/m17ndb.mnv new file mode 100644 index 0000000000..eac70edd4e --- /dev/null +++ b/mnv/runtime/ftplugin/m17ndb.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin +" Language: m17n database +" Maintainer: David Mandelberg <david@mandelberg.org> +" Last Change: 2025 Feb 21 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:;;;,:;;,:; +setlocal commentstring=;\ %s +setlocal iskeyword=!-~,@,^34,^(,^),^92 +setlocal lisp +setlocal lispwords= + +let b:undo_ftplugin = "setlocal comments< commentstring< iskeyword< lisp< lispwords<" diff --git a/mnv/runtime/ftplugin/m3build.mnv b/mnv/runtime/ftplugin/m3build.mnv new file mode 100644 index 0000000000..232478bf94 --- /dev/null +++ b/mnv/runtime/ftplugin/m3build.mnv @@ -0,0 +1,27 @@ +" MNV filetype plugin file +" Language: Modula-3 Makefile +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&mnv + +runtime! ftplugin/m3quake.mnv + +if (has("gui_win32") || has("gui_gtk")) && exists("b:m3quake_set_browsefilter") + let b:browsefilter = "Modula-3 Makefile (m3makefile, m3overrides)\tm3makefile;m3overrides\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/m3quake.mnv b/mnv/runtime/ftplugin/m3quake.mnv new file mode 100644 index 0000000000..47aae5635b --- /dev/null +++ b/mnv/runtime/ftplugin/m3quake.mnv @@ -0,0 +1,39 @@ +" MNV filetype plugin file +" Language: Modula-3 Quake +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + 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 + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/m4.mnv b/mnv/runtime/ftplugin/m4.mnv new file mode 100644 index 0000000000..d8ec3adef0 --- /dev/null +++ b/mnv/runtime/ftplugin/m4.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/mail.mnv b/mnv/runtime/ftplugin/mail.mnv new file mode 100644 index 0000000000..5fd8984b79 --- /dev/null +++ b/mnv/runtime/ftplugin/mail.mnv @@ -0,0 +1,50 @@ +" MNV filetype plugin file +" Language: Mail +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2025 Feb 20 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" 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< commentstring<" + +" 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 + +" Set commentstring to quoting sign ">" so comment shortcuts can be used to +" edit quoted parts of mail +setlocal commentstring=>\ %s +" 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/mnv/runtime/ftplugin/mailaliases.mnv b/mnv/runtime/ftplugin/mailaliases.mnv new file mode 100644 index 0000000000..12df8cd375 --- /dev/null +++ b/mnv/runtime/ftplugin/mailaliases.mnv @@ -0,0 +1,18 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/mailcap.mnv b/mnv/runtime/ftplugin/mailcap.mnv new file mode 100644 index 0000000000..19f9f919c8 --- /dev/null +++ b/mnv/runtime/ftplugin/mailcap.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/make.mnv b/mnv/runtime/ftplugin/make.mnv new file mode 100644 index 0000000000..f70fc98db4 --- /dev/null +++ b/mnv/runtime/ftplugin/make.mnv @@ -0,0 +1,34 @@ +" MNV filetype plugin file +" Language: Make +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" 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.mnv, 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/mnv/runtime/ftplugin/man.mnv b/mnv/runtime/ftplugin/man.mnv new file mode 100644 index 0000000000..0b5569abaa --- /dev/null +++ b/mnv/runtime/ftplugin/man.mnv @@ -0,0 +1,88 @@ +" MNV filetype plugin file +" Language: man +" Maintainer: Jason Franklin <mnv@justemail.net> +" Maintainer: SungHyun Nam <goweol@gmail.com> +" Autoload Split: Bram Moolenaar +" Last Change: 2024 Jun 06 (disabled the q mapping, #8210) +" 2024 Jul 06 (use nnoremap, #15130) +" 2024 Aug 23 (improve the <Plug>ManBS mapping, #15547, #15556) +" 2025 Mar 09 (improve :Man completion for man-db, #16843) + +" To make the ":Man" command available before editing a manual page, source +" this script from your startup mnvrc 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 !exists('g:ft_man_implementation') + if executable('mandb') > 0 + let g:ft_man_implementation = 'man-db' + else + let g:ft_man_implementation = '' + endif +endif + +if &filetype == "man" + " Allow hyphen, plus, colon, dot, and commercial at in manual page name. + " Parentheses are not here but in dist#man#PreGetPage() + 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> <silent> <Plug>ManBS :setl ma<Bar>%s/.\b//g + \ <Bar>setl noma<CR>`' + + nnoremap <buffer> <silent> <c-]> :call dist#man#PreGetPage(v:count)<CR> + nnoremap <buffer> <silent> <c-t> :call dist#man#PopPage()<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>' + 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 + if g:ft_man_implementation ==# 'man-db' + com -nargs=+ -complete=customlist,dist#man#ManDbComplete Man call dist#man#GetPage(<q-mods>, <f-args>) + else + com -nargs=+ -complete=shellcmd Man call dist#man#GetPage(<q-mods>, <f-args>) + endif + nnoremap <Leader>K :call dist#man#PreGetPage(0)<CR> + nnoremap <Plug>ManPreGetPage :call dist#man#PreGetPage(0)<CR> +endif + +if exists(":ManReload") != 2 + com ManReload call dist#man#Reload() +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: set sw=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/manconf.mnv b/mnv/runtime/ftplugin/manconf.mnv new file mode 100644 index 0000000000..37542cab26 --- /dev/null +++ b/mnv/runtime/ftplugin/manconf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/markdown.mnv b/mnv/runtime/ftplugin/markdown.mnv new file mode 100644 index 0000000000..e66ef8037a --- /dev/null +++ b/mnv/runtime/ftplugin/markdown.mnv @@ -0,0 +1,93 @@ +" MNV filetype plugin +" Language: Markdown +" Maintainer: Tim Pope <https://github.com/tpope/mnv-markdown> +" Last Change: 2023 Dec 28 +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif + +runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv + +let s:keepcpo= &cpo +set cpo&mnv + +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') !=# 'markdownCodeBlock' +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 + +" mnv:set sw=2: diff --git a/mnv/runtime/ftplugin/masm.mnv b/mnv/runtime/ftplugin/masm.mnv new file mode 100644 index 0000000000..f4121abdb0 --- /dev/null +++ b/mnv/runtime/ftplugin/masm.mnv @@ -0,0 +1,34 @@ +" MNV filetype plugin file +" Language: Microsoft Macro Assembler (80x86) +" Maintainer: Wu Yongwei <wuyongwei@gmail.com> +" Last Change: 2025-06-09 04:40:00 +0800 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl iskeyword< comments< commentstring<" + +setlocal iskeyword=@,48-57,_,36,60,62,63,@-@ +setlocal comments=:; +setlocal commentstring=;\ %s + +" 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/mnv/runtime/ftplugin/matlab.mnv b/mnv/runtime/ftplugin/matlab.mnv new file mode 100644 index 0000000000..6b25c46191 --- /dev/null +++ b/mnv/runtime/ftplugin/matlab.mnv @@ -0,0 +1,34 @@ +" MNV 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/mnv/runtime/ftplugin/mbsync.mnv b/mnv/runtime/ftplugin/mbsync.mnv new file mode 100644 index 0000000000..df4af59bc2 --- /dev/null +++ b/mnv/runtime/ftplugin/mbsync.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin file +" Language: mbsync configuration file +" Maintainer: Pierrick Guillaume <pguillaume@fymyte.com> +" Last Change: 2025 Apr 13 + +if (exists('b:did_ftplugin')) + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setlocal commentstring<" + +setlocal commentstring=#\ %s diff --git a/mnv/runtime/ftplugin/mediawiki.mnv b/mnv/runtime/ftplugin/mediawiki.mnv new file mode 100644 index 0000000000..01f52bc883 --- /dev/null +++ b/mnv/runtime/ftplugin/mediawiki.mnv @@ -0,0 +1,49 @@ +" Language: MediaWiki +" Maintainer: Avid Seeker <avidseeker7@protonmail.com> +" Home: http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#MNV +" Last Change: 2024 Jul 14 +" Credits: chikamichi +" 2025 Apr 16 by MNV Project (set 'cpoptions' for line continuation, #17121) +" + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +" Many MediaWiki wikis prefer line breaks only at the end of paragraphs +" (like in a text processor), which results in long, wrapping lines. +setlocal wrap linebreak +setlocal textwidth=0 + +setlocal formatoptions-=tc formatoptions+=l formatoptions+=roq +setlocal matchpairs+=<:> + +" Treat lists, indented text and tables as comment lines and continue with the +" same formatting in the next line (i.e. insert the comment leader) when hitting +" <CR> or using "o". +setlocal comments=n:#,n:*,n:\:,s:{\|,m:\|,ex:\|},s:<!--,m:\ \ \ \ ,e:--> +setlocal commentstring=<!--\ %s\ --> + +" match HTML tags (taken directly from $MNV/ftplugin/html.mnv) +if exists("loaded_matchit") + let b:match_ignorecase=0 + let b:match_skip = 's:Comment' + let b:match_words = '<:>,' . + \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' . + \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' . + \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' +endif + +" Enable folding based on ==sections== +setlocal foldexpr=getline(v:lnum)=~'^\\(=\\+\\)[^=]\\+\\1\\(\\s*<!--.*-->\\)\\=\\s*$'?\">\".(len(matchstr(getline(v:lnum),'^=\\+'))-1):\"=\" +setlocal foldmethod=expr + +let b:undo_ftplugin = "setl commentstring< comments< formatoptions< foldexpr< foldmethod<" +let b:undo_ftplugin += " matchpairs< linebreak< wrap< textwidth<" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/mermaid.mnv b/mnv/runtime/ftplugin/mermaid.mnv new file mode 100644 index 0000000000..fc2cd5e833 --- /dev/null +++ b/mnv/runtime/ftplugin/mermaid.mnv @@ -0,0 +1,50 @@ +" MNV filetype plugin +" Language: Mermaid +" Maintainer: Craig MacEachern <https://github.com/craigmac/mnv-mermaid> +" Last Change: 2022 Oct 13 +" 2024 Jul 18 by MNV Project (adjust comments) + +if exists("b:did_ftplugin") + finish +endif + +let s:keepcpo= &cpo +set cpo&mnv + +" Use mermaid live editor's style +setlocal expandtab +setlocal shiftwidth=2 +setlocal softtabstop=-1 +setlocal tabstop=4 + +setlocal comments=:%% +setlocal commentstring=%%\ %s +" TODO: comments, formatlist stuff, based on what? +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 + +" mnv:set sw=2: diff --git a/mnv/runtime/ftplugin/meson.mnv b/mnv/runtime/ftplugin/meson.mnv new file mode 100644 index 0000000000..ca729b17ae --- /dev/null +++ b/mnv/runtime/ftplugin/meson.mnv @@ -0,0 +1,44 @@ +" MNV filetype plugin file +" Language: meson +" License: MNV License +" Maintainer: Liam Beguin <liambeguin@gmail.com> +" Original Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com> +" Last Change: 2018 Nov 27 +" 2024 Jan 14 by MNV Project (browsefilter) + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 +let s:keepcpo= &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/mnv/runtime/ftplugin/mf.mnv b/mnv/runtime/ftplugin/mf.mnv new file mode 100644 index 0000000000..2e280c0ad1 --- /dev/null +++ b/mnv/runtime/ftplugin/mf.mnv @@ -0,0 +1,86 @@ +mnv9script + +# MNV filetype plugin file +# Language: METAFONT +# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> +# Former Maintainers: Nikolai Weibull <now@bitwi.se> +# Latest Revision: 2026 Jan 10 + +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" + if has("win32") + b:browsefilter ..= "All Files (*.*)\t*\n" + else + b:browsefilter ..= "All Files (*)\t*\n" + endif + b:undo_ftplugin ..= ' | unlet! b:browsefilter' +endif + +# mnv: sw=2 fdm=marker diff --git a/mnv/runtime/ftplugin/mlir.mnv b/mnv/runtime/ftplugin/mlir.mnv new file mode 100644 index 0000000000..4df4593bf9 --- /dev/null +++ b/mnv/runtime/ftplugin/mlir.mnv @@ -0,0 +1,10 @@ +" MNV filetype plugin file +" Language: MLIR + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +setl comments=:///,:// +setl commentstring=//\ %s + +let b:undo_ftplugin = "setl commentstring< comments<" diff --git a/mnv/runtime/ftplugin/mma.mnv b/mnv/runtime/ftplugin/mma.mnv new file mode 100644 index 0000000000..8600009b8a --- /dev/null +++ b/mnv/runtime/ftplugin/mma.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: Mathematica +" Maintainer: Ian Ford <ianf@wolfram.com> +" Last Change: 2019 Jan 22 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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/mnv/runtime/ftplugin/mnv.mnv b/mnv/runtime/ftplugin/mnv.mnv new file mode 100644 index 0000000000..9daf7a20ab --- /dev/null +++ b/mnv/runtime/ftplugin/mnv.mnv @@ -0,0 +1,224 @@ +" MNV filetype plugin +" Language: MNV +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> +" Contributors: Riley Bruins <ribru17@gmail.com> ('commentstring') +" @Konfekt +" @tpope (s:Help()) +" @lacygoill +" Last Change: 2025 Aug 07 +" 2025 Aug 06 by MNV Project (add gf maps #17881) +" 2025 Aug 08 by MNV Project (add MNV script complete function #17871) +" 2025 Aug 12 by MNV Project (improve mnvgoto script #17970)) +" 2025 Aug 16 by MNV Project set com depending on MNV9 or legacy script +" 2026 Jan 26 by MNV Project set path to common MNV directories #19219 +" 2026 Feb 03 by MNV Project update s:Help to improve detecting functions #19320 + +" 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&mnv + +if !exists('*MNVFtpluginUndo') + func MNVFtpluginUndo() + setl fo< isk< com< tw< commentstring< include< define< keywordprg< omnifunc< path< + sil! delc -buffer MNVKeywordPrg + if exists('b:did_add_maps') + silent! nunmap <buffer> [[ + silent! xunmap <buffer> [[ + silent! nunmap <buffer> ]] + silent! xunmap <buffer> ]] + silent! nunmap <buffer> [] + silent! xunmap <buffer> [] + silent! nunmap <buffer> ][ + silent! xunmap <buffer> ][ + silent! nunmap <buffer> ]" + silent! xunmap <buffer> ]" + silent! nunmap <buffer> [" + silent! xunmap <buffer> [" + silent! nunmap <buffer> gf + silent! nunmap <buffer> <C-W>f + silent! nunmap <buffer> <C-W>gf + endif + unlet! b:match_ignorecase b:match_words b:match_skip b:did_add_maps + endfunc +endif + +let b:undo_ftplugin = "call MNVFtpluginUndo()" + +" 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. +" Distinguish between commands, options and functions. +if !exists("*" .. expand("<SID>") .. "Help") + function s:Help(topic) abort + let topic = a:topic + + " keyword is not necessarily under the cursor, see :help K + let line = getline('.') + let i = match(line, '\V' .. escape(topic, '\'), col('.') - len(topic)) + let pre = strpart(line, 0, i) + let post = strpart(line, i + len(topic)) + + " local/global option vars + if topic =~# '[lg]' && pre ==# '&' && post =~# ':\k\+' + let topic = matchstr(post, '\k\+') + endif + + if get(g:, 'syntax_on', 0) + let syn = synIDattr(synID(line('.'), col('.'), 1), 'name') + if syn ==# 'mnvFuncName' + return topic .. '()' + elseif syn ==# 'mnvOption' || syn ==# 'mnvOptionVarName' + return "'" .. topic .. "'" + elseif syn ==# 'mnvUserCmdAttrKey' + return ':command-' .. topic + elseif syn ==# 'mnvCommand' + return ':' .. topic + endif + endif + + if stridx(post, '(') == 0 + return topic .. '()' + elseif pre =~# '^\s*:\=$' || pre =~# '\%(\\\||\)\@<!|\s*:\=$' + return ':' .. topic + elseif pre =~# '\<v:$' + return 'v:' .. topic + elseif pre =~# '<$' + return '<' .. topic .. '>' + elseif pre =~# '\\$' + return '/\' .. topic + elseif topic ==# 'v' && post =~# ':\w\+' + return 'v' .. matchstr(post, ':\w\+') + elseif pre =~# '&\%([lg]:\)\=$' + return "'" .. topic .. "'" + else + return topic + endif + endfunction +endif +command! -buffer -nargs=1 MNVKeywordPrg :exe 'help' s:Help(<q-args>) +setlocal keywordprg=:MNVKeywordPrg + +" Comments starts with # in MNV9 script. We have to guess which one to use. +if "\n" .. getline(1, 32)->join("\n") =~# '\n\s*mnv9\%[script]\>' + setlocal commentstring=#\ %s + " Set 'comments' to format dashed lists in comments, for MNV9 script. + setlocal com=sO:#\ -,mO:#\ \ ,eO:##,:#\\\ ,:# +else + setlocal commentstring=\"%s + " Set 'comments' to format dashed lists in comments, for legacy MNV script. + setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\"\\\ ,:\" +endif + +" 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) + +if has("mnv9script") + " set omnifunc completion + setlocal omnifunc=mnvcomplete#Complete +endif + +" Format comments to be up to 78 characters long +if &tw == 0 + setlocal tw=78 +endif + +" set 'path' to common MNV directories +setlocal path-=/usr/include +setlocal path+=pack/**,runtime/**,autoload/**,colors/**,compiler/**,ftplugin/**,indent/**,keymap/**,macros/**,plugin/**,syntax/**,after/** + +if !exists("no_plugin_maps") && !exists("no_mnv_maps") + let b:did_add_maps = 1 + + " Move around functions. + nnoremap <silent><buffer> [[ m':call search('^\s*\(fu\%[nction]\\|\(export\s\+\)\?def\)\>', "bW")<CR> + xnoremap <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> + xnoremap <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> + xnoremap <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> + xnoremap <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> + xnoremap <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> + xnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR> + + " Purpose: Handle :import, :colorscheme and :packadd lines in a smarter way. {{{ + " + " `:import` is followed by a filename or filepath. Find it. + " + " `:packadd` is followed by the name of a package, which we might have + " configured in scripts under `~/.mnv/plugin`. Find it. + " + " --- + " + " We can't handle the `:import` lines simply by setting `'includeexpr'`, because + " the option would be ignored if: + " + " - the name of the imported script is the same as the current one + " - `'path'` includes the `.` item + " + " Indeed, in that case, MNV finds the current file, and simply reloads the + " buffer. + " }}} + " We use the `F` variants, instead of the `f` ones, because they're smarter. + " See $MNVRUNTIME/autoload/mnvgoto.mnv + nnoremap <silent><buffer> gf :<C-U>call mnvgoto#Find('gF')<CR> + nnoremap <silent><buffer> <C-W>f :<C-U>call mnvgoto#Find("\<lt>C-W>F")<CR> + nnoremap <silent><buffer> <C-W>gf :<C-U>call mnvgoto#Find("\<lt>C-W>gF")<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\>,' .. + \ '\<interface\>:\<endinterface\>,' .. + \ '\<enum\>:\<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 (mnvVar). + let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name") + \ =~? "comment\\|string\\|mnvSynReg\\|mnvSet\\|mnvLetHereDoc\\|mnvVar"' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" removed this, because 'cpoptions' is a global option. +" setlocal cpo+=M " makes \%( match \) +" +" mnv: sw=2 et diff --git a/mnv/runtime/ftplugin/modconf.mnv b/mnv/runtime/ftplugin/modconf.mnv new file mode 100644 index 0000000000..a78346e0b4 --- /dev/null +++ b/mnv/runtime/ftplugin/modconf.mnv @@ -0,0 +1,29 @@ +" MNV filetype plugin file +" Language: modules.conf(5) configuration file +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025-07-22 (use :hor term #17822) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< inc< fo<" + +setlocal comments=:# commentstring=#\ %s include=^\\s*include +setlocal formatoptions-=t formatoptions+=croql + +if has('unix') && executable('less') && exists(':terminal') == 2 + command -buffer -nargs=1 ModconfKeywordPrg + \ silent exe ':hor term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s{,8}' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'modprobe.d' + setlocal iskeyword+=- + setlocal keywordprg=:ModconfKeywordPrg + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword< | sil! delc -buffer ModconfKeywordPrg' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/modula2.mnv b/mnv/runtime/ftplugin/modula2.mnv new file mode 100644 index 0000000000..84776c5fcf --- /dev/null +++ b/mnv/runtime/ftplugin/modula2.mnv @@ -0,0 +1,55 @@ +" MNV filetype plugin file +" Language: Modula-2 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let s:dialect = modula2#GetDialect() + +if s:dialect ==# "r10" + setlocal comments=s:(*,m:\ ,e:*),:! + setlocal commentstring=!\ %s +else + setlocal commentstring=(*\ %s\ *) + setlocal comments=s:(*,m:\ ,e:*) +endif +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 + " 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\|RECORD\)\>' .. + \ ':' .. + \ '\<\%(ELSIF\|ELSE\)\>\|\%(^\s*\)\@<=\w\+\%(\s*\,\s*\w\+\)\=\s*\:=\@!' .. + \ ':' .. + \ '\<END\>,' .. + \ '(\*:\*),<\*:\*>' + let b:match_skip = 's:Comment\|Pragma' + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_skip b:match_words" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-2 Source Files (*.def, *.mod)\t*.def;*.mod\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/modula3.mnv b/mnv/runtime/ftplugin/modula3.mnv new file mode 100644 index 0000000000..3b5a9e52c0 --- /dev/null +++ b/mnv/runtime/ftplugin/modula3.mnv @@ -0,0 +1,47 @@ +" MNV filetype plugin file +" Language: Modula-3 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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, *.i3, *.mg, *ig)\t*.m3;*.i3;*.mg;*.ig\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/mojo.mnv b/mnv/runtime/ftplugin/mojo.mnv new file mode 100644 index 0000000000..61ce024bd3 --- /dev/null +++ b/mnv/runtime/ftplugin/mojo.mnv @@ -0,0 +1,48 @@ +" MNV filetype plugin +" Language: Mojo +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 07 +" 2025 Apr 16 by MNV Project (set 'cpoptions' for line continuation, #17121) + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal include=^\\s*\\(from\\\|import\\) +setlocal define=^\\s*\\(\\(async\\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=.mojo +setlocal comments=b:#,fb:- +setlocal commentstring=#\ %s + +let b:undo_ftplugin = 'setlocal include<' + \ . '|setlocal define<' + \ . '|setlocal includeexpr<' + \ . '|setlocal suffixesadd<' + \ . '|setlocal comments<' + \ . '|setlocal commentstring<' + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/mp.mnv b/mnv/runtime/ftplugin/mp.mnv new file mode 100644 index 0000000000..774c01d858 --- /dev/null +++ b/mnv/runtime/ftplugin/mp.mnv @@ -0,0 +1,95 @@ +mnv9script + +# MNV filetype plugin file +# Language: MetaPost +# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> +# Former Maintainers: Nikolai Weibull <now@bitwi.se> +# Latest Revision: 2026 Jan 10 + +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" + if has("win32") + b:browsefilter ..= "All Files (*.*)\t*\n" + else + b:browsefilter ..= "All Files (*)\t*\n" + endif + b:undo_ftplugin ..= ' | unlet! b:browsefilter' +endif + +# mnv: sw=2 fdm=marker diff --git a/mnv/runtime/ftplugin/mplayerconf.mnv b/mnv/runtime/ftplugin/mplayerconf.mnv new file mode 100644 index 0000000000..d95fb4d2b0 --- /dev/null +++ b/mnv/runtime/ftplugin/mplayerconf.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/mrxvtrc.mnv b/mnv/runtime/ftplugin/mrxvtrc.mnv new file mode 100644 index 0000000000..71cd0fcfd8 --- /dev/null +++ b/mnv/runtime/ftplugin/mrxvtrc.mnv @@ -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 MNV will not flag the +" first word as a spelling error if it is not capitalised. The '!' used as +" comment leaders makes MNV think that every comment line is a new sentence. + +setlocal comments=:!,:# commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql diff --git a/mnv/runtime/ftplugin/msmessages.mnv b/mnv/runtime/ftplugin/msmessages.mnv new file mode 100644 index 0000000000..b03ad72558 --- /dev/null +++ b/mnv/runtime/ftplugin/msmessages.mnv @@ -0,0 +1,45 @@ +" MNV filetype plugin file +" Language: MS Message files (*.mc) +" Maintainer: Kevin Locke <kwl7@cornell.edu> +" Last Change: 2008 April 09 +" 2024 Jan 14 by MNV Project (browsefilter) +" Location: http://kevinlocke.name/programs/mnv/syntax/msmessages.mnv + +" Based on c.mnv + +" 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 and GTK can filter files in the browse dialog +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "MS Message Files (*.mc)\t*.mc\n" . + \ "Resource Files (*.rc)\t*.rc\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/mss.mnv b/mnv/runtime/ftplugin/mss.mnv new file mode 100644 index 0000000000..03a5bf8772 --- /dev/null +++ b/mnv/runtime/ftplugin/mss.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: Vivado mss file +" Last Change: 2024 Oct 22 +" Document: https://docs.amd.com/r/2020.2-English/ug1400-vitis-embedded/Microprocessor-Software-Specification-MSS +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=b:#,fb:- +setlocal commentstring=#\ %s + +let b:match_words = '\<BEGIN\>:\<END\>' +let b:undo_ftplugin = "setl com< cms< | unlet b:match_words" diff --git a/mnv/runtime/ftplugin/muttrc.mnv b/mnv/runtime/ftplugin/muttrc.mnv new file mode 100644 index 0000000000..d68ad6b8f6 --- /dev/null +++ b/mnv/runtime/ftplugin/muttrc.mnv @@ -0,0 +1,31 @@ +" MNV filetype plugin file +" Language: mutt RC File +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025-07-22 (use :hor term #17822) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< inc< fo<" + +setlocal comments=:# commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +let &l:include = '^\s*source\>' + +if has('unix') && executable('less') && exists(':terminal') == 2 + command -buffer -nargs=1 MuttrcKeywordPrg + \ silent exe 'hor term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s+' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'muttrc' + setlocal iskeyword+=- + setlocal keywordprg=:MuttrcKeywordPrg + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword< | sil! delc -buffer MuttrcKeywordPrg' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/mysql.mnv b/mnv/runtime/ftplugin/mysql.mnv new file mode 100644 index 0000000000..8c51aff06c --- /dev/null +++ b/mnv/runtime/ftplugin/mysql.mnv @@ -0,0 +1,9 @@ +" MNV filetype plugin +" Language: MySQL +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Aug 12 +if exists("b:did_ftplugin") + finish +endif + +runtime ftplugin/sql.mnv diff --git a/mnv/runtime/ftplugin/nanorc.mnv b/mnv/runtime/ftplugin/nanorc.mnv new file mode 100644 index 0000000000..96bb88cdc4 --- /dev/null +++ b/mnv/runtime/ftplugin/nanorc.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/neomuttrc.mnv b/mnv/runtime/ftplugin/neomuttrc.mnv new file mode 100644 index 0000000000..32499a983e --- /dev/null +++ b/mnv/runtime/ftplugin/neomuttrc.mnv @@ -0,0 +1,23 @@ +" MNV 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.mnv + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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/mnv/runtime/ftplugin/netrc.mnv b/mnv/runtime/ftplugin/netrc.mnv new file mode 100644 index 0000000000..298667223c --- /dev/null +++ b/mnv/runtime/ftplugin/netrc.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin file +" Language: netrc(5) configuration file +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2008-07-09 +" Last Change: 2023 Feb 27 by Keith Smiley + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< fo<" + +setlocal comments=b:# commentstring=#\ %s formatoptions-=tcroq formatoptions+=l + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/nginx.mnv b/mnv/runtime/ftplugin/nginx.mnv new file mode 100644 index 0000000000..41111e6f3e --- /dev/null +++ b/mnv/runtime/ftplugin/nginx.mnv @@ -0,0 +1,9 @@ +" MNV filetype plugin +" Language: nginx.conf +" Maintainer: Chris Aumann <me@chr4.org> +" Last Change: Apr 15, 2017 +" 2023 Aug 28 by MNV Project (undo_ftplugin) + +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal commentstring<" diff --git a/mnv/runtime/ftplugin/nickel.mnv b/mnv/runtime/ftplugin/nickel.mnv new file mode 100644 index 0000000000..a809df1d18 --- /dev/null +++ b/mnv/runtime/ftplugin/nickel.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: nickel +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2026 Mar 01 + +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/mnv/runtime/ftplugin/nim.mnv b/mnv/runtime/ftplugin/nim.mnv new file mode 100644 index 0000000000..48f7e6fe1b --- /dev/null +++ b/mnv/runtime/ftplugin/nim.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: nim +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 19 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=exO:]#,fs1:#[,mb:*,ex:]#,:# commentstring=#\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/nix.mnv b/mnv/runtime/ftplugin/nix.mnv new file mode 100644 index 0000000000..d8b3727021 --- /dev/null +++ b/mnv/runtime/ftplugin/nix.mnv @@ -0,0 +1,21 @@ +" MNV filetype plugin +" Language: nix +" Maintainer: Keith Smiley <keithbsmiley@gmail.com> +" Last Change: 2023 Jul 22 +" 2025 Apr 18 by MNV Project (set 'iskeyword' and b:match_words #17154) + +" 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< comments< iskeyword< | unlet! b:match_words" + +let b:match_words = "\<if\>:\<then\>:\<else\>,\<let\>:\<in\>" + +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal iskeyword+=- diff --git a/mnv/runtime/ftplugin/nroff.mnv b/mnv/runtime/ftplugin/nroff.mnv new file mode 100644 index 0000000000..fea60a7316 --- /dev/null +++ b/mnv/runtime/ftplugin/nroff.mnv @@ -0,0 +1,51 @@ +" MNV filetype plugin +" Language: roff(7) +" Maintainer: Aman Verma +" Homepage: https://github.com/a-vrma/mnv-nroff-ftplugin +" Document: https://www.gnu.org/software/groff/manual/groff.html +" Previous Maintainer: Chris Spiegel <cspiegel@gmail.com> +" Last Changes: +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring' #14843) +" 2025 Feb 12 by Wu, Zhenyu <wuzhenyu@ustc.edu> (matchit configuration #16619) +" 2025 Apr 16 by Eisuke Kawashima (cpoptions #17121) +" 2025 Apr 24 by Eisuke Kawashima (move options from syntax to ftplugin #17174) +" 2025 Jun 18 by MNV Project: update commentstring option (#17516) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal commentstring=.\\\"\ %s +setlocal comments=:.\\\",:\\\",:'\\\",:''' +setlocal sections+=Sh +setlocal define=.\s*de + +if get(b:, 'preprocs_as_sections') + setlocal sections=EQTSPS[\ G1GS +endif + +let b:undo_ftplugin = 'setlocal commentstring< comments< sections& define<' + +if get(b:, 'nroff_is_groff') + " groff_ms exdented paragraphs are not in the default paragraphs list. + setlocal paragraphs+=XP + let b:undo_ftplugin .= ' paragraphs&' +endif + +if exists('loaded_matchit') + let b:match_words = '^\.\s*ie\>:^\.\s*el\>' + \ . ',^\.\s*LB\>:^\.\s*LI\>:^\.\s*LE\>' + \ . ',^\.\s*TS\>:^\.\s*TE\>' + \ . ',^\.\s*PS\>:^\.\s*P[EF]\>' + \ . ',^\.\s*EQ\>:^\.\s*EN\>' + \ . ',^\.\s*[\>:^\.\s*]\>' + \ . ',^\.\s*FS\>:^\.\s*FE\>' + let b:undo_ftplugin .= "| unlet b:match_words" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/nsis.mnv b/mnv/runtime/ftplugin/nsis.mnv new file mode 100644 index 0000000000..f877b171a1 --- /dev/null +++ b/mnv/runtime/ftplugin/nsis.mnv @@ -0,0 +1,43 @@ +" MNV ftplugin file +" Language: NSIS script +" Maintainer: Ken Takata +" URL: https://github.com/k-takata/mnv-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&mnv + +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/mnv/runtime/ftplugin/nu.mnv b/mnv/runtime/ftplugin/nu.mnv new file mode 100644 index 0000000000..0e63e35206 --- /dev/null +++ b/mnv/runtime/ftplugin/nu.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin +" Language: Nushell +" Maintainer: El Kasztano +" URL: https://github.com/elkasztano/nushell-syntax-mnv +" License: MIT <https://opensource.org/license/mit> +" Last Change: 2025 Sep 05 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=#\ %s +setlocal comments-=:// +setlocal formatoptions=tcroql + +let b:undo_ftplugin = "setl fo< cms< com<" diff --git a/mnv/runtime/ftplugin/objc.mnv b/mnv/runtime/ftplugin/objc.mnv new file mode 100644 index 0000000000..57873adee5 --- /dev/null +++ b/mnv/runtime/ftplugin/objc.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin file +" Language: Objective C +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +" Behaves just like C +runtime! ftplugin/c.mnv ftplugin/c_*.mnv ftplugin/c/*.mnv diff --git a/mnv/runtime/ftplugin/objcpp.mnv b/mnv/runtime/ftplugin/objcpp.mnv new file mode 100644 index 0000000000..da13c18dab --- /dev/null +++ b/mnv/runtime/ftplugin/objcpp.mnv @@ -0,0 +1 @@ +runtime! ftplugin/objc.mnv diff --git a/mnv/runtime/ftplugin/objdump.mnv b/mnv/runtime/ftplugin/objdump.mnv new file mode 100644 index 0000000000..e15265244a --- /dev/null +++ b/mnv/runtime/ftplugin/objdump.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: Objdump +" Maintainer: Colin Kennedy <colinvfx@gmail.com> +" Last Change: 2023 October 25 + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setlocal cms<" + +setlocal commentstring=#\ %s diff --git a/mnv/runtime/ftplugin/obse.mnv b/mnv/runtime/ftplugin/obse.mnv new file mode 100644 index 0000000000..f4d22932af --- /dev/null +++ b/mnv/runtime/ftplugin/obse.mnv @@ -0,0 +1,71 @@ +" MNV filetype plugin file +" Language: Oblivion Language (obl) +" Original Creator: Kat <katisntgood@gmail.com> +" Maintainer: Kat <katisntgood@gmail.com> +" Created: 2021 Aug 08 +" Last Change: 2022 Nov 13 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&mnv + +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/mnv/runtime/ftplugin/ocaml.mnv b/mnv/runtime/ftplugin/ocaml.mnv new file mode 100644 index 0000000000..8c5d17891c --- /dev/null +++ b/mnv/runtime/ftplugin/ocaml.mnv @@ -0,0 +1,645 @@ +" 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> +" Riley Bruins <ribru17@gmail.com> ('commentstring') +" URL: https://github.com/ocaml/mnv-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) +" 2024 May 23 - added space in commentstring (RB) + +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&mnv + +" 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 + +" MNV 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.mnv' 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 MNV bottom +" line(s) the type of an ocaml value getting it from the corresponding .annot +" file (if any). If MNV 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 mnv 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 mnv (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 mnv 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 + +" mnv:sw=2 fdm=indent diff --git a/mnv/runtime/ftplugin/occam.mnv b/mnv/runtime/ftplugin/occam.mnv new file mode 100644 index 0000000000..883fc1f5b9 --- /dev/null +++ b/mnv/runtime/ftplugin/occam.mnv @@ -0,0 +1,56 @@ +" MNV 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 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2025 Jun 08 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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&mnv + +"{{{ 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+=:-- +setlocal commentstring=--\ %s +" Maximum length of comments is 78 +setlocal textwidth=78 +"}}} + +"{{{ File browsing filters +" Win32 and GTK can filter files in the browse dialog +if (has("gui_win32") || has("gui_gtk")) && !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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif +"}}} + +"{{{ Undo settings +let b:undo_ftplugin = "setlocal shiftwidth< softtabstop< expandtab<" + \ . " formatoptions< comments< commentstring< textwidth<" + \ . "| unlet! b:browsefilter" +"}}} + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/mnv/runtime/ftplugin/octave.mnv b/mnv/runtime/ftplugin/octave.mnv new file mode 100644 index 0000000000..73efd8c5ff --- /dev/null +++ b/mnv/runtime/ftplugin/octave.mnv @@ -0,0 +1,67 @@ +" MNV filetype plugin file +" Language: GNU Octave +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +" 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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +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 + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/odin.mnv b/mnv/runtime/ftplugin/odin.mnv new file mode 100644 index 0000000000..d740664922 --- /dev/null +++ b/mnv/runtime/ftplugin/odin.mnv @@ -0,0 +1,21 @@ +mnv9script + +# MNV filetype plugin file +# Language: Odin +# Maintainer: Maxim Kim <habamax@gmail.com> +# Website: https://github.com/habamax/mnv-odin +# Last Change: 2024 Jan 15 +# 2024-May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +b:did_ftplugin = 1 + +b:undo_ftplugin = 'setlocal commentstring<' + \ .. '| setlocal comments<' + \ .. '| setlocal suffixesadd<' + +setlocal suffixesadd=.odin +setlocal commentstring=//\ %s +setlocal comments=s1:/*,mb:*,ex:*/,:// diff --git a/mnv/runtime/ftplugin/ondir.mnv b/mnv/runtime/ftplugin/ondir.mnv new file mode 100644 index 0000000000..dddae7fb7f --- /dev/null +++ b/mnv/runtime/ftplugin/ondir.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin file +" Language: ondir <https://github.com/alecthomas/ondir> +" Maintainer: Jon Parise <jon@indelible.org> + +if exists('b:did_ftplugin') + finish +endif + +let s:cpo_save = &cpoptions + +setlocal comments=:# commentstring=#\ %s + +let b:undo_ftplugin = 'setl comments< commentstring<' + +let &cpoptions = s:cpo_save +unlet s:cpo_save + +" mnv: et ts=4 sw=2 sts=2: diff --git a/mnv/runtime/ftplugin/opencl.mnv b/mnv/runtime/ftplugin/opencl.mnv new file mode 100644 index 0000000000..0d44d52dba --- /dev/null +++ b/mnv/runtime/ftplugin/opencl.mnv @@ -0,0 +1,12 @@ +" MNV filetype plugin file +" Language: OpenCL +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Last Change: 2024 Nov 19 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// +setlocal commentstring=/*\ %s\ */ define& include& + +let b:undo_ftplugin = "setl commentstring< comments<" diff --git a/mnv/runtime/ftplugin/openscad.mnv b/mnv/runtime/ftplugin/openscad.mnv new file mode 100644 index 0000000000..ceeaf712ca --- /dev/null +++ b/mnv/runtime/ftplugin/openscad.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: OpenSCAD (https://openscad.org) +" Maintainer: Zachary Scheiman <me@zacharyscheiman.com> +" Last Change: 2025 Aug 3 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +" Comments in openscad follow C/C++ syntax +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl commentstring<' diff --git a/mnv/runtime/ftplugin/openvpn.mnv b/mnv/runtime/ftplugin/openvpn.mnv new file mode 100644 index 0000000000..a1c658c8f9 --- /dev/null +++ b/mnv/runtime/ftplugin/openvpn.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: OpenVPN +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2022 Oct 16 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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/mnv/runtime/ftplugin/org.mnv b/mnv/runtime/ftplugin/org.mnv new file mode 100644 index 0000000000..2f3d233330 --- /dev/null +++ b/mnv/runtime/ftplugin/org.mnv @@ -0,0 +1,39 @@ +" MNV filetype plugin file +" Language: Org +" Previous Maintainer: Luca Saccarola <github.e41mv@aleeas.com> +" Maintainer: This runtime file is looking for a new maintainer. +" Last Change: 2025 Aug 05 + + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= "|setl cms< com< fo< flp<" +else + let b:undo_ftplugin = "setl cms< com< fo< flp<" +endif + +setl commentstring=#\ %s +setl comments=fb:*,fb:-,fb:+,b:#,b:\: + +setl formatoptions+=nql +setl formatlistpat=^\\s*\\(\\(\\d\\|\\a\\)\\+[.)]\\|[+-]\\)\\s\\+ + +function OrgFoldExpr() + let l:depth = match(getline(v:lnum), '\(^\*\+\)\@<=\( .*$\)\@=') + if l:depth > 0 && synIDattr(synID(v:lnum, 1, 1), 'name') =~# '\m^orgHeadline' + return ">" . l:depth + endif + return "=" +endfunction + +if has("folding") && get(g:, 'org_folding', 0) + setl foldexpr=OrgFoldExpr() + setl foldmethod=expr + let b:undo_ftplugin .= "|setl foldexpr< foldmethod<" +endif + +" mnv: ts=8 sts=2 sw=2 et diff --git a/mnv/runtime/ftplugin/pamconf.mnv b/mnv/runtime/ftplugin/pamconf.mnv new file mode 100644 index 0000000000..67cde6e7c8 --- /dev/null +++ b/mnv/runtime/ftplugin/pamconf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/pascal.mnv b/mnv/runtime/ftplugin/pascal.mnv new file mode 100644 index 0000000000..681e3217cf --- /dev/null +++ b/mnv/runtime/ftplugin/pascal.mnv @@ -0,0 +1,55 @@ +" MNV filetype plugin file +" Language: Pascal +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2024 Jan 14 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif +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 + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/passwd.mnv b/mnv/runtime/ftplugin/passwd.mnv new file mode 100644 index 0000000000..3e6680ac7a --- /dev/null +++ b/mnv/runtime/ftplugin/passwd.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/pbtxt.mnv b/mnv/runtime/ftplugin/pbtxt.mnv new file mode 100644 index 0000000000..6a94a11dbe --- /dev/null +++ b/mnv/runtime/ftplugin/pbtxt.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: Protobuf Text Format +" Maintainer: Lakshay Garg <lakshayg@outlook.in> +" Last Change: 2020 Nov 17 +" 2023 Aug 28 by MNV Project (undo_ftplugin) +" Homepage: https://github.com/lakshayg/mnv-pbtxt + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal commentstring<" + +" mnv: nowrap sw=2 sts=2 ts=8 noet diff --git a/mnv/runtime/ftplugin/pdf.mnv b/mnv/runtime/ftplugin/pdf.mnv new file mode 100644 index 0000000000..a4a6183f0c --- /dev/null +++ b/mnv/runtime/ftplugin/pdf.mnv @@ -0,0 +1,90 @@ +" MNV filetype plugin file +" Language: PDF +" Maintainer: Tim Pope <mnvNOSPAM@tpope.info> +" Last Change: 2007 Dec 16 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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/mnv/runtime/ftplugin/perl.mnv b/mnv/runtime/ftplugin/perl.mnv new file mode 100644 index 0000000000..8653df3658 --- /dev/null +++ b/mnv/runtime/ftplugin/perl.mnv @@ -0,0 +1,118 @@ +" MNV filetype plugin file +" Language: Perl +" Maintainer: mnv-perl <mnv-perl@googlegroups.com> (need to be subscribed to post) +" Homepage: https://github.com/mnv-perl/mnv-perl +" Bugs/requests: https://github.com/mnv-perl/mnv-perl/issues +" License: MNV License (see :help license) +" Last Change: 2021 Nov 10 +" 2023 Sep 07 by MNV Project (safety check: don't execute perl +" from current directory) +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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") + " safety check: don't execute perl binary by default + if dist#mnv#IsSafeExecutable('perl', '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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + 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/mnv/runtime/ftplugin/php.mnv b/mnv/runtime/ftplugin/php.mnv new file mode 100644 index 0000000000..bb4050880d --- /dev/null +++ b/mnv/runtime/ftplugin/php.mnv @@ -0,0 +1,158 @@ +" MNV filetype plugin file +" Language: PHP +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2024 Jan 14 +" Last Change: 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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&mnv + +" 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" +if has("win32") + let s:browsefilter ..= "All Files (*.*)\t*\n" +else + let s:browsefilter ..= "All Files (*)\t*\n" +endif +let s:match_words = "" + +runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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 + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/pinfo.mnv b/mnv/runtime/ftplugin/pinfo.mnv new file mode 100644 index 0000000000..9626e5933e --- /dev/null +++ b/mnv/runtime/ftplugin/pinfo.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/pkl.mnv b/mnv/runtime/ftplugin/pkl.mnv new file mode 100644 index 0000000000..61bcdc0e2e --- /dev/null +++ b/mnv/runtime/ftplugin/pkl.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin +" Language: Pkl +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Jul 14 +" 2025 Oct 03 by MNV Project Add foldmethod #18274 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// +setlocal commentstring=//\ %s +setlocal foldmethod=syntax + +let b:undo_ftplugin = 'setl com< cms< fdm<' diff --git a/mnv/runtime/ftplugin/plaintex.mnv b/mnv/runtime/ftplugin/plaintex.mnv new file mode 100644 index 0000000000..4366f0e8e6 --- /dev/null +++ b/mnv/runtime/ftplugin/plaintex.mnv @@ -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 $MNVRUNTIME/ftplugin/initex.mnv + +" Avoid problems if running in 'compatible' mode. +let s:save_cpo = &cpo +set cpo&mnv + +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.mnv 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 + +" mnv:sts=2:sw=2: diff --git a/mnv/runtime/ftplugin/plsql.mnv b/mnv/runtime/ftplugin/plsql.mnv new file mode 100644 index 0000000000..96be4b8020 --- /dev/null +++ b/mnv/runtime/ftplugin/plsql.mnv @@ -0,0 +1,17 @@ +" MNV ftplugin file +" Language: Oracle Procedural SQL (PL/SQL) +" Maintainer: Lee Lindley (lee dot lindley at gmail dot com) +" Previous Maintainer: Jeff Lanzarotta (jefflanzarotta at yahoo dot com) +" Previous Maintainer: C. Laurence Gonsalves (clgonsal@kami.com) +" URL: https://github.com/lee-lindley/mnv_plsql_syntax +" Last Change: Feb 19, 2025 +" History: Enno Konfekt move handling of optional syntax folding from syntax +" file to ftplugin + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +if get(g:,"plsql_fold",0) == 1 + setlocal foldmethod=syntax + let b:undo_ftplugin = "setl fdm< " +endif diff --git a/mnv/runtime/ftplugin/pod.mnv b/mnv/runtime/ftplugin/pod.mnv new file mode 100644 index 0000000000..a8daaebcbc --- /dev/null +++ b/mnv/runtime/ftplugin/pod.mnv @@ -0,0 +1,76 @@ +" MNV filetype plugin file +" Language: Perl POD format +" Maintainer: mnv-perl <mnv-perl@googlegroups.com> (need to be subscribed to post) +" Author: Doug Kearns <dougkearns@gmail.com> +" Homepage: https://github.com/mnv-perl/mnv-perl +" Bugs/requests: https://github.com/mnv-perl/mnv-perl/issues +" License: MNV License (see :help license) +" Last Change: 2023 Jul 05 +" Last Change: 2021 Oct 19 +" 2024 Jan 14 by MNV Project (browsefilter) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +function s:jumpToSection(direction) + let flags = a:direction == "backward" ? "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") + for s:mode in ["n", "o", "x"] + for s:lhs in ["]]", "]["] + execute s:mode . "noremap <silent> <buffer> " . s:lhs . " <Cmd>call <SID>jumpToSection('forward')<CR>" + let b:undo_ftplugin .= " | silent! execute '" . s:mode . "unmap <buffer> " . s:lhs . "'" + endfor + for s:lhs in ["[[", "[]"] + execute s:mode . "noremap <silent> <buffer> " . s:lhs . " <Cmd>call <SID>jumpToSection('backward')<CR>" + let b:undo_ftplugin .= " | silent! execute '" . s:mode . "unmap <buffer> " . s:lhs . "'" + endfor + endfor + unlet s:mode s:lhs +endif + +let &cpo = s:save_cpo +unlet s:save_cpo + +" mnv: set expandtab: diff --git a/mnv/runtime/ftplugin/poefilter.mnv b/mnv/runtime/ftplugin/poefilter.mnv new file mode 100644 index 0000000000..e6f66e72e9 --- /dev/null +++ b/mnv/runtime/ftplugin/poefilter.mnv @@ -0,0 +1,13 @@ +" MNV 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/mnv/runtime/ftplugin/poke.mnv b/mnv/runtime/ftplugin/poke.mnv new file mode 100644 index 0000000000..f3075d0c83 --- /dev/null +++ b/mnv/runtime/ftplugin/poke.mnv @@ -0,0 +1,36 @@ +" MNV filetype plugin file +" Language: GNU Poke +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s +setlocal formatoptions-=t formatoptions+=croql + +setlocal include=load +setlocal suffixesadd=.pk + +let b:undo_ftplugin = "setl fo< com< cms< inc< sua<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Poke Files (*.pk)\t*.pk\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/postscr.mnv b/mnv/runtime/ftplugin/postscr.mnv new file mode 100644 index 0000000000..17ae39a181 --- /dev/null +++ b/mnv/runtime/ftplugin/postscr.mnv @@ -0,0 +1,45 @@ +" MNV filetype plugin file +" Language: PostScript +" Maintainer: Mike Williams <mrw@eandem.co.uk> +" Last Change: 24th April 2012 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2025 Jun 08 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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&mnv + +" PS comment formatting +setlocal comments=b:% +setlocal commentstring=%\ %s +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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "PostScript Files (*.ps)\t*.ps\n" . + \ "EPS Files (*.eps)\t*.eps\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +let b:undo_ftplugin = "setlocal comments< commentstring< formatoptions<" + \ . "| unlet! b:browsefilter b:match_ignorecase b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/pq.mnv b/mnv/runtime/ftplugin/pq.mnv new file mode 100644 index 0000000000..c08c682c16 --- /dev/null +++ b/mnv/runtime/ftplugin/pq.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin +" Language: Power Query M +" Maintainer: Anarion Dunedain <anarion80@gmail.com> +" Last Change: 2025 Apr 3 + +if exists('b:did_ftplugin') + finish +endif + +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// + +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/prisma.mnv b/mnv/runtime/ftplugin/prisma.mnv new file mode 100644 index 0000000000..caa1af1f97 --- /dev/null +++ b/mnv/runtime/ftplugin/prisma.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: prisma +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 19 + +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/mnv/runtime/ftplugin/procmail.mnv b/mnv/runtime/ftplugin/procmail.mnv new file mode 100644 index 0000000000..af05decbad --- /dev/null +++ b/mnv/runtime/ftplugin/procmail.mnv @@ -0,0 +1,21 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/prolog.mnv b/mnv/runtime/ftplugin/prolog.mnv new file mode 100644 index 0000000000..17ba09e9d0 --- /dev/null +++ b/mnv/runtime/ftplugin/prolog.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/proto.mnv b/mnv/runtime/ftplugin/proto.mnv new file mode 100644 index 0000000000..3604ee0fb2 --- /dev/null +++ b/mnv/runtime/ftplugin/proto.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin +" Language: Protobuf +" Maintainer: David Pedersen <limero@me.com> +" Last Change: 2024 Dec 09 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal formatoptions-=t formatoptions+=croql + +setlocal comments=s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = "setlocal formatoptions< comments< commentstring<" + +" mnv: sw=2 sts=2 et diff --git a/mnv/runtime/ftplugin/protocols.mnv b/mnv/runtime/ftplugin/protocols.mnv new file mode 100644 index 0000000000..9429d72592 --- /dev/null +++ b/mnv/runtime/ftplugin/protocols.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/ps1.mnv b/mnv/runtime/ftplugin/ps1.mnv new file mode 100644 index 0000000000..b79e6a1597 --- /dev/null +++ b/mnv/runtime/ftplugin/ps1.mnv @@ -0,0 +1,64 @@ +" MNV filetype plugin file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/mnv-ps1 +" Last Change: 2021 Apr 02 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" 2024 Sep 19 by Konfekt (simplify keywordprg #15696) +" 2025 Jul 22 by phanium (use :hor term #17822) + +" 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&mnv + +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 and GTK to show mainly PowerShell-related files +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +" Undo the stuff we changed +let b:undo_ftplugin = "setlocal tw< cms< fo< iskeyword<" . + \ " | unlet! b:browsefilter" + +" 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 exists(':terminal') == 2 + command! -buffer -nargs=1 GetHelp silent exe 'hor 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 + setlocal keywordprg=:GetHelp + let b:undo_ftplugin ..= " | setl kp< | sil! delc -buffer GetHelp" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/ps1xml.mnv b/mnv/runtime/ftplugin/ps1xml.mnv new file mode 100644 index 0000000000..062552a1e6 --- /dev/null +++ b/mnv/runtime/ftplugin/ps1xml.mnv @@ -0,0 +1,40 @@ +" MNV filetype plugin file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/mnv-ps1 +" Last Change: 2021 Apr 02 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +" 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&mnv + +setlocal tw=0 +setlocal commentstring=#\ %s +setlocal formatoptions=tcqro + +" Change the browse dialog on Win32 and GTK to show mainly PowerShell-related files +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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/mnv/runtime/ftplugin/ptx.mnv b/mnv/runtime/ftplugin/ptx.mnv new file mode 100644 index 0000000000..19c2e5fe79 --- /dev/null +++ b/mnv/runtime/ftplugin/ptx.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: Nvidia PTX (Parellel Thread Execution) +" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com> +" Last Change: 2024-12-05 + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +" Comments in PTX follow C/C++ syntax +" See: https://docs.nvidia.com/cuda/parallel-thread-execution/#syntax +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl commentstring<' diff --git a/mnv/runtime/ftplugin/purescript.mnv b/mnv/runtime/ftplugin/purescript.mnv new file mode 100644 index 0000000000..de77961ae8 --- /dev/null +++ b/mnv/runtime/ftplugin/purescript.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: purescript +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 19 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=s1f:{-,mb:\ ,ex:-},:--\ \|,:-- +setl commentstring=--\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/pymanifest.mnv b/mnv/runtime/ftplugin/pymanifest.mnv new file mode 100644 index 0000000000..067270e2bd --- /dev/null +++ b/mnv/runtime/ftplugin/pymanifest.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: PyPA manifest +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Last Change: 2023 Aug 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/mnv/runtime/ftplugin/pyrex.mnv b/mnv/runtime/ftplugin/pyrex.mnv new file mode 100644 index 0000000000..21e6acb45c --- /dev/null +++ b/mnv/runtime/ftplugin/pyrex.mnv @@ -0,0 +1,32 @@ +" MNV filetype plugin file +" Language: Pyrex +" Maintainer: Marco Barisione <marco.bari@people.it> +" URL: http://marcobari.altervista.org/pyrex_mnv.html +" Last Change: 2012 May 18 +" 2024 Jan 14 by MNV Project (browsefilter) + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif +let s:keepcpo= &cpo +set cpo&mnv + +" Behaves just like Python +runtime! ftplugin/python.mnv ftplugin/python_*.mnv ftplugin/python/*.mnv + +if (has("gui_win32") || has("gui_gtk")) && !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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/mnv/runtime/ftplugin/python.mnv b/mnv/runtime/ftplugin/python.mnv new file mode 100644 index 0000000000..64f16e7909 --- /dev/null +++ b/mnv/runtime/ftplugin/python.mnv @@ -0,0 +1,200 @@ +" MNV filetype plugin file +" Language: python +" Maintainer: Tom Picton <tom@tompicton.com> +" Previous Maintainer: James Sully <sullyj3@gmail.com> +" Previous Maintainer: Johannes Zellner <johannes@zellner.org> +" Repository: https://github.com/tpict/mnv-ftplugin-python +" Last Change: 2024/05/13 +" 2024 Nov 30 use pytest compiler (#16130) + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 +let s:keepcpo= &cpo +set cpo&mnv + +setlocal cinkeys-=0# +setlocal indentkeys-=0# +setlocal include=^\\s*\\(from\\\|import\\) +setlocal define=^\\s*\\(\\(async\\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> ]] :<C-U>call <SID>Python_jump('n', '". b:next_toplevel."', 'W', v:count1)<cr>" + execute "nnoremap <silent> <buffer> [[ :<C-U>call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb', v:count1)<cr>" + execute "nnoremap <silent> <buffer> ][ :<C-U>call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', v:count1, 0)<cr>" + execute "nnoremap <silent> <buffer> [] :<C-U>call <SID>Python_jump('n', '". b:prev_endtoplevel."', 'Wb', v:count1, 0)<cr>" + execute "nnoremap <silent> <buffer> ]m :<C-U>call <SID>Python_jump('n', '". b:next."', 'W', v:count1)<cr>" + execute "nnoremap <silent> <buffer> [m :<C-U>call <SID>Python_jump('n', '". b:prev."', 'Wb', v:count1)<cr>" + execute "nnoremap <silent> <buffer> ]M :<C-U>call <SID>Python_jump('n', '". b:next_end."', 'W', v:count1, 0)<cr>" + execute "nnoremap <silent> <buffer> [M :<C-U>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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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 + +if expand('%:t') =~# '\v^test_.*\.py$|_test\.py$' && executable('pytest') + compiler pytest + let &l:makeprg .= ' %:S' +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<' + \ . '|setlocal makeprg<' + \ . '|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/mnv/runtime/ftplugin/qb64.mnv b/mnv/runtime/ftplugin/qb64.mnv new file mode 100644 index 0000000000..3b6df98002 --- /dev/null +++ b/mnv/runtime/ftplugin/qb64.mnv @@ -0,0 +1,26 @@ +" MNV 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&mnv + +runtime! ftplugin/basic.mnv + +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 + +" mnv: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/mnv/runtime/ftplugin/qf.mnv b/mnv/runtime/ftplugin/qf.mnv new file mode 100644 index 0000000000..283994cd7c --- /dev/null +++ b/mnv/runtime/ftplugin/qf.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin file +" Language: MNV'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/mnv/runtime/ftplugin/qml.mnv b/mnv/runtime/ftplugin/qml.mnv new file mode 100644 index 0000000000..1c09f22fcc --- /dev/null +++ b/mnv/runtime/ftplugin/qml.mnv @@ -0,0 +1,38 @@ +" MNV filetype plugin file +" Language: QML +" Maintainer: Chase Knowlden <haroldknowlden@gmail.com> +" Last Change: 2023 Aug 16 +" 2023 Aug 23 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists( 'b:did_ftplugin' ) + finish +endif +let b:did_ftplugin = 1 + +let s:cpoptions_save = &cpoptions +set cpoptions&mnv + +" command for undo +let b:undo_ftplugin = "setlocal formatoptions< comments< commentstring<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = + \ "QML Files (*.qml, *.qbs)\t*.qml;*.qbs\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +" Set 'comments' to format dashed lists in comments. +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +setlocal formatoptions-=t +setlocal formatoptions+=croql + +let &cpoptions = s:cpoptions_save +unlet s:cpoptions_save diff --git a/mnv/runtime/ftplugin/quake.mnv b/mnv/runtime/ftplugin/quake.mnv new file mode 100644 index 0000000000..cc7921e244 --- /dev/null +++ b/mnv/runtime/ftplugin/quake.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/quarto.mnv b/mnv/runtime/ftplugin/quarto.mnv new file mode 100644 index 0000000000..bce9ecbbda --- /dev/null +++ b/mnv/runtime/ftplugin/quarto.mnv @@ -0,0 +1,5 @@ +if exists("b:did_ftplugin") + finish +endif + +runtime ftplugin/rmd.mnv diff --git a/mnv/runtime/ftplugin/r.mnv b/mnv/runtime/ftplugin/r.mnv new file mode 100644 index 0000000000..9ac7cc9977 --- /dev/null +++ b/mnv/runtime/ftplugin/r.mnv @@ -0,0 +1,37 @@ +" MNV filetype plugin file +" Language: R +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> +" Former Repository: https://github.com/jalvesaq/R-MNV-runtime +" Last Change: 2024 Feb 28 by MNV Project + +" 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&mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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/mnv/runtime/ftplugin/racc.mnv b/mnv/runtime/ftplugin/racc.mnv new file mode 100644 index 0000000000..b58cec030d --- /dev/null +++ b/mnv/runtime/ftplugin/racc.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/racket.mnv b/mnv/runtime/ftplugin/racket.mnv new file mode 100644 index 0000000000..e46b28b87b --- /dev/null +++ b/mnv/runtime/ftplugin/racket.mnv @@ -0,0 +1,89 @@ +" MNV 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/mnv-racket +" Last Change: 2025 Aug 09 +" 2026 Mar 31 by MNV project: use shellescape for the K mapping +" 2026 Apr 01 by MNV project: make K mapping more robust for shell injection + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +" quick hack to allow adding values +setlocal iskeyword=@,!,#-',*-:,<-Z,a-z,~,_,94 + +setlocal shiftwidth=2 softtabstop=2 + +" Enable auto begin new comment line when continuing from an old comment line +setlocal comments=:;;;;,:;;;,:;;,:; +setlocal formatoptions+=r + +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< shiftwidth< softtabstop< 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 mnv 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, v:true) + 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 -- ". string(shellescape(@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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + 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/mnv/runtime/ftplugin/raku.mnv b/mnv/runtime/ftplugin/raku.mnv new file mode 100644 index 0000000000..d6fb6fa553 --- /dev/null +++ b/mnv/runtime/ftplugin/raku.mnv @@ -0,0 +1,128 @@ +" MNV filetype plugin file +" Language: Raku +" Maintainer: mnv-perl <mnv-perl@googlegroups.com> (need to be subscribed to post) +" Homepage: https://github.com/Raku/mnv-raku +" Bugs/requests: https://github.com/Raku/mnv-raku/issues +" Last Change: 2021 Apr 16 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> +" +" Based on ftplugin/perl.mnv 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.mnv 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/mnv/runtime/ftplugin/rasi.mnv b/mnv/runtime/ftplugin/rasi.mnv new file mode 100644 index 0000000000..7df7635c0f --- /dev/null +++ b/mnv/runtime/ftplugin/rasi.mnv @@ -0,0 +1,25 @@ +" MNV filetype plugin file +" Language: RASI +" Maintainer: Pierrick Guillaume <pierguill@gmail.com> +" Last Change: 2024 May 21 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< isk< inc<" + +setlocal comments=s1:/*,mb:*,ex:*/ +setlocal commentstring=//\ %s +setlocal iskeyword+=- + +let &l:include = '^\s*@import\s\+\%(url(\)\=' + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: ts=8 diff --git a/mnv/runtime/ftplugin/readline.mnv b/mnv/runtime/ftplugin/readline.mnv new file mode 100644 index 0000000000..fcf5d97f28 --- /dev/null +++ b/mnv/runtime/ftplugin/readline.mnv @@ -0,0 +1,49 @@ +" MNV filetype plugin file +" Language: readline(3) configuration file +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Last Change: 2024 Sep 19 (simplify keywordprg #15696) +" 2024 Jul 22 by MNV project (use :hor term #17822) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +if has('unix') && executable('less') && exists(':terminal') == 2 + command -buffer -nargs=1 ReadlineKeywordPrg + \ silent exe 'hor term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s+' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . '3 readline' + setlocal iskeyword+=- + setlocal keywordprg=:ReadlineKeywordPrg + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword< | sil! delc -buffer ReadlineKeywordPrg' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/registry.mnv b/mnv/runtime/ftplugin/registry.mnv new file mode 100644 index 0000000000..20873b849d --- /dev/null +++ b/mnv/runtime/ftplugin/registry.mnv @@ -0,0 +1,41 @@ +" MNV filetype plugin file +" Language: Windows Registry export with regedit (*.reg) +" Maintainer: Cade Forester <ahx2323@gmail.com> +" Latest Revision: 2014-01-09 +" 2024 Jan 14 by MNV Project (browsefilter) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = + \ 'setlocal ' . + \ 'comments< '. + \ 'commentstring< ' . + \ 'formatoptions<' + + +if ( has( 'gui_win32' ) || has( 'gui_gtk' ) ) +\ && !exists( 'b:browsefilter' ) + let b:browsefilter = + \ "registry files (*.reg)\t*.reg\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +setlocal comments=:; +setlocal commentstring=;\ %s + +setlocal formatoptions-=t +setlocal formatoptions+=croql + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/remind.mnv b/mnv/runtime/ftplugin/remind.mnv new file mode 100644 index 0000000000..9456b020c9 --- /dev/null +++ b/mnv/runtime/ftplugin/remind.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: Remind - a sophisticated calendar and alarm +" Maintainer: Joe Reynolds <joereynolds952@gmail.com> +" Latest Revision: 2025 April 08 +" License: MNV (see :h license) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:# commentstring=#\ %s + +let b:undo_ftplugin = "setl cms< com<" diff --git a/mnv/runtime/ftplugin/requirements.mnv b/mnv/runtime/ftplugin/requirements.mnv new file mode 100644 index 0000000000..4b8ee941ba --- /dev/null +++ b/mnv/runtime/ftplugin/requirements.mnv @@ -0,0 +1,47 @@ +" the Requirements File Format syntax support for MNV +" Version: 1.8.0 +" Author: raimon <raimon49@hotmail.com> +" Upstream: https://github.com/raimon49/requirements.txt.mnv +" License: MIT LICENSE +" The MIT License (MIT) +" +" Copyright (c) 2015 raimon +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to deal +" in the Software without restriction, including without limitation the rights +" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +" copies of the Software, and to permit persons to whom the Software is +" furnished to do so, subject to the following conditions: +" +" The above copyright notice and this permission notice shall be included in all +" copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +" SOFTWARE. +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpoptions = &cpoptions +set cpoptions&mnv + +let b:undo_ftplugin = "setl iskeyword< commentstring<" +" pip options contain "-" +setlocal iskeyword+=- +setlocal commentstring=#\ %s + +if !exists('current_compiler') + let b:undo_ftplugin ..= "| compiler make" + compiler pip_compile +endif + +let &cpoptions = s:save_cpoptions +unlet s:save_cpoptions +" mnv: et sw=4 ts=4 sts=4: diff --git a/mnv/runtime/ftplugin/rescript.mnv b/mnv/runtime/ftplugin/rescript.mnv new file mode 100644 index 0000000000..a1b6bd0572 --- /dev/null +++ b/mnv/runtime/ftplugin/rescript.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: rescript +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 21 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/reva.mnv b/mnv/runtime/ftplugin/reva.mnv new file mode 100644 index 0000000000..40fc70c366 --- /dev/null +++ b/mnv/runtime/ftplugin/reva.mnv @@ -0,0 +1,28 @@ +" MNV ftplugin file +" Language: Reva Forth +" Version: 7.1 +" Last Change: 2025 Jun 08 +" Maintainer: Ron Aaron <ron@ronware.org> +" URL: https://github.com/ronaaron/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.mnv 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 cms=//\ %s +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< cms< fo< mps< isk<" diff --git a/mnv/runtime/ftplugin/rhelp.mnv b/mnv/runtime/ftplugin/rhelp.mnv new file mode 100644 index 0000000000..7536659ffb --- /dev/null +++ b/mnv/runtime/ftplugin/rhelp.mnv @@ -0,0 +1,35 @@ +" MNV filetype plugin file +" Language: R help file +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> +" Former Repository: https://github.com/jalvesaq/R-MNV-runtime +" Last Change: 2024 Feb 28 by MNV Project + +" 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&mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +let b:undo_ftplugin = "setl isk< | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: sw=2 diff --git a/mnv/runtime/ftplugin/rmd.mnv b/mnv/runtime/ftplugin/rmd.mnv new file mode 100644 index 0000000000..155403543c --- /dev/null +++ b/mnv/runtime/ftplugin/rmd.mnv @@ -0,0 +1,87 @@ +" MNV filetype plugin file +" Language: R Markdown file +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> +" Former Repository: https://github.com/jalvesaq/R-MNV-runtime +" Last Change: +" 2024 Feb 28 by MNV Project +" 2024 Sep 23 by MNV Project: properly restore fex option +" 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.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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&mnv + +function FormatRmd() + if search("^[ \t]*```[ ]*{r", "bncW") > search("^[ \t]*```$", "bncW") + setlocal comments=:#',:###,:##,:# + else + setlocal comments=fb:*,fb:-,fb:+,n:> + endif + return 1 +endfunction + +let s:last_line = 0 +function SetRmdCommentStr() + if line('.') == s:last_line + return + endif + let s:last_line = line('.') + + 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 mnvrc: 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.mnv + +" 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= " | setl cms< com< fo< flp< isk< fex< | unlet! b:browsefilter" +else + let b:undo_ftplugin = "setl cms< com< fo< flp< isk< fex< | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: sw=2 diff --git a/mnv/runtime/ftplugin/rnc.mnv b/mnv/runtime/ftplugin/rnc.mnv new file mode 100644 index 0000000000..9ebf0caefe --- /dev/null +++ b/mnv/runtime/ftplugin/rnc.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/rnoweb.mnv b/mnv/runtime/ftplugin/rnoweb.mnv new file mode 100644 index 0000000000..270ae1968e --- /dev/null +++ b/mnv/runtime/ftplugin/rnoweb.mnv @@ -0,0 +1,63 @@ +" MNV filetype plugin file +" Language: Rnoweb +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> +" Former Repository: https://github.com/jalvesaq/R-MNV-runtime +" Last Change: 2024 Feb 28 by MNV Project + +" Only do this when not yet done for this buffer +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&mnv + +runtime! ftplugin/tex.mnv + +" Don't load another plugin for this buffer +let b:did_ftplugin = 1 + +" Enables MNV-Latex-Suite, LaTeX-Box if installed +runtime ftplugin/tex_*.mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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 mnvrc: 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< cms< | unlet! b:browsefilter" +else + let b:undo_ftplugin = "setl isk< sua< com< cms< | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: sw=2 diff --git a/mnv/runtime/ftplugin/roc.mnv b/mnv/runtime/ftplugin/roc.mnv new file mode 100644 index 0000000000..c66510874d --- /dev/null +++ b/mnv/runtime/ftplugin/roc.mnv @@ -0,0 +1,14 @@ +" Roc filetype plugin file +" Language: Roc +" Maintainer: nat-418 <93013864+nat-418@users.noreply.github.com> +" Latest Revision: 2024-04-5 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:##,:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setl com< cms<" diff --git a/mnv/runtime/ftplugin/routeros.mnv b/mnv/runtime/ftplugin/routeros.mnv new file mode 100644 index 0000000000..82d4847475 --- /dev/null +++ b/mnv/runtime/ftplugin/routeros.mnv @@ -0,0 +1,34 @@ +" MNV filetype plugin file +" Language: MikroTik RouterOS Script +" Maintainer: zainin <z@wintr.dev> +" Last Change: 2021 Nov 14 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:save_cpo +unlet! s:save_cpo + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/rpl.mnv b/mnv/runtime/ftplugin/rpl.mnv new file mode 100644 index 0000000000..ab5b8adbdb --- /dev/null +++ b/mnv/runtime/ftplugin/rpl.mnv @@ -0,0 +1,23 @@ +" MNV filetype plugin file +" Language: RPL/2 +" Maintainer: Joël BERTRAND <rpl2@free.fr> +" Last Change: 2025 Jun 08 +" 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:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = "setlocal fo< comments< commentstring<" diff --git a/mnv/runtime/ftplugin/rrst.mnv b/mnv/runtime/ftplugin/rrst.mnv new file mode 100644 index 0000000000..99490aa860 --- /dev/null +++ b/mnv/runtime/ftplugin/rrst.mnv @@ -0,0 +1,61 @@ +" MNV filetype plugin file +" Language: reStructuredText documentation format with R code +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> +" Former Repository: https://github.com/jalvesaq/R-MNV-runtime +" Last Change: +" 2024 Feb 28 by MNV Project +" 2024 Sep 23 by MNV Project: properly restore fex option +" 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&mnv + +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 mnvrc: +" 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +endif + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= " | setl cms< com< fo< flp< isk< fex< | unlet! b:browsefilter" +else + let b:undo_ftplugin = "setl cms< com< fo< flp< isk< fex< | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: sw=2 diff --git a/mnv/runtime/ftplugin/rst.mnv b/mnv/runtime/ftplugin/rst.mnv new file mode 100644 index 0000000000..32da87fa2a --- /dev/null +++ b/mnv/runtime/ftplugin/rst.mnv @@ -0,0 +1,52 @@ +" 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/mnv-restructuredtext +" Latest Revision: 2020-03-31 +" 2025 Oct 13 by MNV project: update b:undo_ftplugin #18566 +" 2026 Jan 11 by MNV project: set suffixesadd #19149 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +"Disable folding +if !exists('g:rst_fold_enabled') + let g:rst_fold_enabled = 0 +endif + +let b:undo_ftplugin = "setlocal comments< commentstring< expandtab< formatoptions< suffixesadd<" + +setlocal comments=fb:.. commentstring=..\ %s expandtab +setlocal formatoptions+=tcroql +setlocal suffixesadd=.rst + +" 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 revisited in the future. + +if exists("g:rst_style") && g:rst_style != 0 + setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8 + let b:undo_ftplugin .= " | setlocal softtabstop< shiftwidth< tabstop<" +endif + +if g:rst_fold_enabled != 0 + setlocal foldmethod=expr + setlocal foldexpr=RstFold#GetRstFold() + setlocal foldtext=RstFold#GetRstFoldText() + augroup RstFold + autocmd TextChanged,InsertLeave <buffer> unlet! b:RstFoldCache + augroup END + let b:undo_ftplugin .= " | setlocal foldexpr< foldmethod< foldtext<" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/ruby.mnv b/mnv/runtime/ftplugin/ruby.mnv new file mode 100644 index 0000000000..0a4976a4da --- /dev/null +++ b/mnv/runtime/ftplugin/ruby.mnv @@ -0,0 +1,461 @@ +" MNV filetype plugin +" Language: Ruby +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" URL: https://github.com/mnv-ruby/mnv-ruby +" Last Change: 2023 Dec 31 +" 2024 Jan 14 by MNV Project (browsefilter) + +if (exists("b:did_ftplugin")) + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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 + +let s:path_split = has('win32') ? ';' : ':' + +function! s:query_path(root) abort + " Disabled by default for security reasons. + if !get(g:, 'ruby_exec', get(g:, 'plugin_exec', 0)) || empty(a:root) + return map(split($RUBYLIB, s:path_split), 'v:val ==# "." ? "" : v:val') + endif + let code = "print $:.join %q{,}" + if &shellxquote == "'" + let args = ' --disable-gems -e "' . code . '"' + else + let args = " --disable-gems -e '" . code . "'" + endif + + let cd = haslocaldir() ? 'lcd' : exists(':tcd') && haslocaldir(-1) ? 'tcd' : 'cd' + let cwd = fnameescape(getcwd()) + try + exe cd fnameescape(a:root) + for dir in split($PATH, s:path_split) + if dir !=# '.' && executable(dir . '/ruby') == 1 + let exepath = dir . '/ruby' + break + endif + endfor + if exists('l:exepath') + let path = split(system(exepath . args),',') + if v:shell_error + let path = [] + endif + else + let path = [] + endif + 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 ::MNV::command( 'let g:ruby_default_path = split("%s",",")' % $:.join(%q{,}) ) + else + let g:ruby_default_path = s:query_path($HOME) + 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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.mnv.org/scripts/script.php?script_id=39 +" +" It is also packaged with MNV, in the $MNVRUNTIME/macros directory. +" +" 2. Copy "matchit.txt" into a "doc" directory (e.g. $HOME/.mnv/doc). +" +" 3. Copy "matchit.mnv" into a "plugin" directory (e.g. $HOME/.mnv/plugin). +" +" 4. Ensure this file (ftplugin/ruby.mnv) is installed. +" +" 5. Ensure you have this line in your $HOME/.mnvrc: +" filetype plugin on +" +" 6. Restart MNV and create the matchit documentation: +" +" :helptags ~/.mnv/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 mnvrc" 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. +" + +" mnv: nowrap sw=2 sts=2 ts=8: diff --git a/mnv/runtime/ftplugin/rust.mnv b/mnv/runtime/ftplugin/rust.mnv new file mode 100644 index 0000000000..bb71e85396 --- /dev/null +++ b/mnv/runtime/ftplugin/rust.mnv @@ -0,0 +1,243 @@ +" Language: Rust +" Description: MNV ftplugin for Rust +" Maintainer: Chris Morgan <me@chrismorgan.info> +" Last Change: 2024 Mar 17 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com ('commentstring') +" 2025 Dec 09 update 'textwidth# to 100 #18892 +" For bugs, patches and license go to https://github.com/rust-lang/rust.mnv + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +" vint: -ProhibitAbbreviationOption +let s:save_cpo = &cpo +set cpo&mnv +" vint: +ProhibitAbbreviationOption + +if get(b:, 'current_compiler', '') ==# '' + if strlen(findfile('Cargo.toml', '.;')) > 0 + compiler cargo + else + compiler rustc + endif +endif + +" 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 get(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 MNV bug. + setlocal comments=s1:/*,mb:*,ex:*/,s0:/*,mb:\ ,ex:*/,:///,://!,:// +else + setlocal comments=s0:/*!,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 get(g:, 'rust_recommended_style', 1) + let b:rust_set_style = 1 + setlocal shiftwidth=4 softtabstop=4 expandtab + setlocal textwidth=100 +endif + +setlocal include=\\v^\\s*(pub\\s+)?use\\s+\\zs(\\f\|:)+ +setlocal includeexpr=rust#IncludeExpr(v:fname) + +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 + + augroup rust.mnv.DelimitMate + autocmd! + + autocmd User delimitMate_map :call rust#delimitmate#onMap() + autocmd User delimitMate_unmap :call rust#delimitmate#onUnmap() + augroup END +endif + +" Integration with auto-pairs (https://github.com/jiangmiao/auto-pairs) +if exists("g:AutoPairsLoaded") && !get(g:, 'rust_keep_autopairs_default', 0) + let b:AutoPairs = {'(':')', '[':']', '{':'}','"':'"', '`':'`'} +endif + +if has("folding") && get(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') && get(g:, 'rust_conceal', 0) + let b:rust_set_conceallevel=1 + setlocal conceallevel=2 +endif + +" Motion Commands {{{1 +if !exists("g:no_plugin_maps") && !exists("g:no_rust_maps") + " 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> +endif + +" 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=% -buffer RustPlay :call rust#Play(<count>, <line1>, <line2>, <f-args>) + +" See |:RustFmt| for docs +command! -bar -buffer RustFmt call rustfmt#Format() + +" See |:RustFmtRange| for docs +command! -range -buffer RustFmtRange call rustfmt#FormatRange(<line1>, <line2>) + +" See |:RustInfo| for docs +command! -bar -buffer RustInfo call rust#debugging#Info() + +" See |:RustInfoToClipboard| for docs +command! -bar -buffer RustInfoToClipboard call rust#debugging#InfoToClipboard() + +" See |:RustInfoToFile| for docs +command! -bar -nargs=1 -buffer RustInfoToFile call rust#debugging#InfoToFile(<f-args>) + +" See |:RustTest| for docs +command! -buffer -nargs=* -count -bang RustTest call rust#Test(<q-mods>, <count>, <bang>0, <q-args>) + +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 = " + \ compiler make | + \ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd< + \|if exists('b:rust_set_style') + \|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth< + \|endif + \|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 -buffer RustRun + \|delcommand -buffer RustExpand + \|delcommand -buffer RustEmitIr + \|delcommand -buffer RustEmitAsm + \|delcommand -buffer RustPlay + \|delcommand -buffer RustFmt + \|delcommand -buffer RustFmtRange + \|delcommand -buffer RustInfo + \|delcommand -buffer RustInfoToClipboard + \|delcommand -buffer RustInfoToFile + \|delcommand -buffer RustTest + \|silent! nunmap <buffer> [[ + \|silent! nunmap <buffer> ]] + \|silent! xunmap <buffer> [[ + \|silent! xunmap <buffer> ]] + \|silent! ounmap <buffer> [[ + \|silent! ounmap <buffer> ]] + \|setlocal matchpairs-=<:> + \|unlet b:match_skip + \" + +" }}}1 + +" Code formatting on save +augroup rust.mnv.PreWrite + autocmd! + autocmd BufWritePre *.rs silent! call rustfmt#PreWrite() +augroup END + +setlocal matchpairs+=<:> +" For matchit.mnv (rustArrow stops `Fn() -> X` messing things up) +let b:match_skip = 's:comment\|string\|rustCharacter\|rustArrow' + +command! -buffer -nargs=+ Cargo call cargo#cmd(<q-args>) +command! -buffer -nargs=* Cbuild call cargo#build(<q-args>) +command! -buffer -nargs=* Ccheck call cargo#check(<q-args>) +command! -buffer -nargs=* Cclean call cargo#clean(<q-args>) +command! -buffer -nargs=* Cdoc call cargo#doc(<q-args>) +command! -buffer -nargs=+ Cnew call cargo#new(<q-args>) +command! -buffer -nargs=* Cinit call cargo#init(<q-args>) +command! -buffer -nargs=* Crun call cargo#run(<q-args>) +command! -buffer -nargs=* Ctest call cargo#test(<q-args>) +command! -buffer -nargs=* Cbench call cargo#bench(<q-args>) +command! -buffer -nargs=* Cupdate call cargo#update(<q-args>) +command! -buffer -nargs=* Csearch call cargo#search(<q-args>) +command! -buffer -nargs=* Cpublish call cargo#publish(<q-args>) +command! -buffer -nargs=* Cinstall call cargo#install(<q-args>) +command! -buffer -nargs=* Cruntarget call cargo#runtarget(<q-args>) + +let b:undo_ftplugin .= ' + \|delcommand -buffer Cargo + \|delcommand -buffer Cbuild + \|delcommand -buffer Ccheck + \|delcommand -buffer Cclean + \|delcommand -buffer Cdoc + \|delcommand -buffer Cnew + \|delcommand -buffer Cinit + \|delcommand -buffer Crun + \|delcommand -buffer Ctest + \|delcommand -buffer Cbench + \|delcommand -buffer Cupdate + \|delcommand -buffer Csearch + \|delcommand -buffer Cpublish + \|delcommand -buffer Cinstall + \|delcommand -buffer Cruntarget' + +" vint: -ProhibitAbbreviationOption +let &cpo = s:save_cpo +unlet s:save_cpo +" vint: +ProhibitAbbreviationOption + +" mnv: set et sw=4 sts=4 ts=8: diff --git a/mnv/runtime/ftplugin/samba.mnv b/mnv/runtime/ftplugin/samba.mnv new file mode 100644 index 0000000000..82edb027c2 --- /dev/null +++ b/mnv/runtime/ftplugin/samba.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: smb.conf(5) configuration file +" Maintainer: Matt Perry <matt@mattperry.com> +" Last Change: 2025 Feb 13 + +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/mnv/runtime/ftplugin/sass.mnv b/mnv/runtime/ftplugin/sass.mnv new file mode 100644 index 0000000000..6d3206a59a --- /dev/null +++ b/mnv/runtime/ftplugin/sass.mnv @@ -0,0 +1,42 @@ +" MNV filetype plugin +" Language: Sass +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" Last Change: 2023 Dec 28 + +" 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 + +if get(g:, 'sass_recommended_style', 1) + setlocal shiftwidth=2 softtabstop=2 expandtab + let b:undo_ftplugin .= ' sw< sts< et<' +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 + +" mnv:set sw=2: diff --git a/mnv/runtime/ftplugin/sbt.mnv b/mnv/runtime/ftplugin/sbt.mnv new file mode 100644 index 0000000000..dc114a6ddb --- /dev/null +++ b/mnv/runtime/ftplugin/sbt.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: sbt +" Maintainer: Steven Dobay <stevendobay at protonmail.com> +" License: Same as MNV +" Last Change: 2017.04.30 +" ---------------------------------------------------------------------------- + +if exists('b:did_ftplugin') || &cp + finish +endif + +runtime! ftplugin/scala.mnv + +let b:did_ftplugin = 1 diff --git a/mnv/runtime/ftplugin/scala.mnv b/mnv/runtime/ftplugin/scala.mnv new file mode 100644 index 0000000000..fe4641a5e1 --- /dev/null +++ b/mnv/runtime/ftplugin/scala.mnv @@ -0,0 +1,38 @@ +" MNV filetype plugin file +" Language: Scala +" Maintainer: Derek Wyatt +" URL: https://github.com/derekwyatt/mnv-scala +" License: Same as MNV +" Last Change: 11 August 2021 +" 2023 Aug 28 by MNV Project (undo_ftplugin) +" ---------------------------------------------------------------------------- + +if exists('b:did_ftplugin') || &cp + finish +endif +let b:did_ftplugin = 1 + +" j is fairly new in MNV, so don't complain if it's not there +setlocal formatoptions-=t formatoptions+=croqnl +silent! setlocal formatoptions+=j + +" Just like c.mnv, 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 + +let b:undo_ftplugin = "setlocal cms< com< et< fo< inc< inex< pa< sts< sua< sw<" + +" mnv:set sw=2 sts=2 ts=8 et: diff --git a/mnv/runtime/ftplugin/scdoc.mnv b/mnv/runtime/ftplugin/scdoc.mnv new file mode 100644 index 0000000000..f8846892af --- /dev/null +++ b/mnv/runtime/ftplugin/scdoc.mnv @@ -0,0 +1,23 @@ +" scdoc filetype plugin +" Maintainer: Gregory Anders <contact@gpanders.com> +" Last Updated: 2022 May 09 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" Upstream: https://github.com/gpanders/mnv-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/mnv/runtime/ftplugin/scheme.mnv b/mnv/runtime/ftplugin/scheme.mnv new file mode 100644 index 0000000000..e76b696aaf --- /dev/null +++ b/mnv/runtime/ftplugin/scheme.mnv @@ -0,0 +1,61 @@ +" MNV filetype plugin file +" Language: Scheme (R7RS) +" Last Change: 2024 Jun 21 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" 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/mnv-scheme.git +" URL: https://foldling.org/mnv/ftplugin/scheme.mnv + +if exists('b:did_ftplugin') + finish +endif + +let s:cpo = &cpo +set cpo&mnv + +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 +setl formatoptions-=t + +let b:undo_ftplugin = 'setl lisp< comments< commentstring< define< iskeyword< formatoptions<' + +setl lispwords+=case +setl lispwords+=define +setl lispwords+=define-library +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.mnv +endif + +unlet b:did_scheme_ftplugin +let b:did_ftplugin = 1 +let &cpo = s:cpo +unlet s:cpo diff --git a/mnv/runtime/ftplugin/screen.mnv b/mnv/runtime/ftplugin/screen.mnv new file mode 100644 index 0000000000..80c8fe076f --- /dev/null +++ b/mnv/runtime/ftplugin/screen.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/scss.mnv b/mnv/runtime/ftplugin/scss.mnv new file mode 100644 index 0000000000..6c54467298 --- /dev/null +++ b/mnv/runtime/ftplugin/scss.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: SCSS +" Maintainer: Tim Pope <mnvNOSPAM@tpope.org> +" Last Change: 2016 Aug 29 + +if exists("b:did_ftplugin") + finish +endif + +runtime! ftplugin/sass.mnv +setlocal comments=s1:/*,mb:*,ex:*/,:// + +" mnv:set sw=2: diff --git a/mnv/runtime/ftplugin/sed.mnv b/mnv/runtime/ftplugin/sed.mnv new file mode 100644 index 0000000000..c5ad6e7b64 --- /dev/null +++ b/mnv/runtime/ftplugin/sed.mnv @@ -0,0 +1,33 @@ +" MNV filetype plugin file +" Language: sed +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setl com< cms< fo<" + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "sed Script Files (*.sed)\t*.sed\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/sensors.mnv b/mnv/runtime/ftplugin/sensors.mnv new file mode 100644 index 0000000000..f4a99c984b --- /dev/null +++ b/mnv/runtime/ftplugin/sensors.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/services.mnv b/mnv/runtime/ftplugin/services.mnv new file mode 100644 index 0000000000..2f789b7f65 --- /dev/null +++ b/mnv/runtime/ftplugin/services.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/setserial.mnv b/mnv/runtime/ftplugin/setserial.mnv new file mode 100644 index 0000000000..79d18da982 --- /dev/null +++ b/mnv/runtime/ftplugin/setserial.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/sexplib.mnv b/mnv/runtime/ftplugin/sexplib.mnv new file mode 100644 index 0000000000..5af3a8d953 --- /dev/null +++ b/mnv/runtime/ftplugin/sexplib.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin file +" Language: Sexplib +" Maintainer: Markus Mottl <markus.mottl@gmail.com> +" URL: https://github.com/ocaml/mnv-ocaml +" Last Change: +" 2023 Aug 28 - Added undo_ftplugin (MNV Project) +" 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=:; + +let b:undo_ftplugin = "setl cms< com<" diff --git a/mnv/runtime/ftplugin/sgml.mnv b/mnv/runtime/ftplugin/sgml.mnv new file mode 100644 index 0000000000..b710be0ab8 --- /dev/null +++ b/mnv/runtime/ftplugin/sgml.mnv @@ -0,0 +1,47 @@ +" MNV filetype plugin file +" Language: sgml +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif + +runtime! ftplugin/xml.mnv ftplugin/xml_*.mnv ftplugin/xml/*.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/sh.mnv b/mnv/runtime/ftplugin/sh.mnv new file mode 100644 index 0000000000..571b65afbb --- /dev/null +++ b/mnv/runtime/ftplugin/sh.mnv @@ -0,0 +1,80 @@ +" MNV filetype plugin file +" Language: sh +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Contributor: Enno Nagel <ennonagel+mnv@gmail.com> +" Eisuke Kawashima +" Last Change: 2024 Sep 19 by MNV Project (compiler shellcheck) +" 2024 Dec 29 by MNV Project (improve setting shellcheck compiler) +" 2025 Mar 09 by MNV Project (set b:match_skip) +" 2025 Jul 22 by phanium (use :hor term #17822) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo-=C + +setlocal comments=b:# +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:match_skip = "synIDattr(synID(line('.'),col('.'),0),'name') =~ 'shSnglCase'" + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:match_skip" +endif + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let s:is_sh = get(b:, "is_sh", get(g:, "is_sh", 0)) +let s:is_bash = get(b:, "is_bash", get(g:, "is_bash", 0)) +let s:is_kornshell = get(b:, "is_kornshell", get(g:, "is_kornshell", 0)) + +if s:is_bash + if exists(':terminal') == 2 + command! -buffer -nargs=1 ShKeywordPrg silent exe ':hor term bash -c "help "<args>" 2>/dev/null || man "<args>""' + else + command! -buffer -nargs=1 ShKeywordPrg echo system('bash -c "help <args>" 2>/dev/null || MANPAGER= man "<args>"') + endif + setlocal keywordprg=:ShKeywordPrg + let b:undo_ftplugin ..= " | setl kp< | sil! delc -buffer ShKeywordPrg" +endif + +if (s:is_sh || s:is_bash || s:is_kornshell) && executable('shellcheck') + if !exists('current_compiler') + compiler shellcheck + let b:undo_ftplugin ..= ' | compiler make' + endif +elseif s:is_bash + if !exists('current_compiler') + compiler bash + let b:undo_ftplugin ..= ' | compiler make' + endif +endif + +let &cpo = s:save_cpo +unlet s:save_cpo s:is_sh s:is_bash s:is_kornshell + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/shaderslang.mnv b/mnv/runtime/ftplugin/shaderslang.mnv new file mode 100644 index 0000000000..6f8d30ed27 --- /dev/null +++ b/mnv/runtime/ftplugin/shaderslang.mnv @@ -0,0 +1,54 @@ +" MNV filetype plugin file +" Language: Slang +" Maintainer: Austin Shijo <epestr@proton.me> +" Last Change: 2025 Jan 05 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +" Don't load another plugin for this buffer +let b:did_ftplugin = 1 + +" Using line continuation here. +let s:cpo_save = &cpo +set cpo-=C + +let b:undo_ftplugin = "setl fo< com< cms< inc<" + +" 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 comment string (Slang uses C-style comments) +setlocal commentstring=//\ %s + +" Set 'comments' to format dashed lists in comments +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// + +" When the matchit plugin is loaded, this makes the % command skip parens and +" braces in comments properly, and adds support for shader-specific keywords +if exists("loaded_matchit") + " Add common shader control structures + let b:match_words = '{\|^\s*\<\(if\|for\|while\|switch\|struct\|class\)\>:}\|^\s*\<break\>,' .. + \ '^\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:match_ignorecase = 0 + let b:undo_ftplugin ..= " | unlet! b:match_skip b:match_words b:match_ignorecase" +endif + +" Win32 and GTK can filter files in the browse dialog +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Slang Source Files (*.slang)\t*.slang\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "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/mnv/runtime/ftplugin/sieve.mnv b/mnv/runtime/ftplugin/sieve.mnv new file mode 100644 index 0000000000..ab5813ea0f --- /dev/null +++ b/mnv/runtime/ftplugin/sieve.mnv @@ -0,0 +1,23 @@ +" MNV filetype plugin file +" Language: Sieve filtering language input file +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025 Feb 20 +" 2026 Jan 09 by MNV Project: preserve line endings for existing files #19144 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setl com< cms< fo< ff<" + +setlocal comments=s1:/*,mb:*,ex:*/,:# commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +" https://datatracker.ietf.org/doc/html/rfc5228#section-2.2 says +" "newlines (CRLF, never just CR or LF)" +" Use CRLF for new files only; preserve existing line endings +if expand('%:p') !=# '' && !filereadable(expand('%:p')) + setlocal fileformat=dos +endif diff --git a/mnv/runtime/ftplugin/skhd.mnv b/mnv/runtime/ftplugin/skhd.mnv new file mode 100644 index 0000000000..802f2ab79d --- /dev/null +++ b/mnv/runtime/ftplugin/skhd.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin file +" Language: skhd(simple hotkey daemon for macOS) configuration file +" Maintainer: Kiyoon Kim <https://github.com/kiyoon> +" Last Change: 2026 Jan 23 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=:# commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setl com< cms< fo<" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/slint.mnv b/mnv/runtime/ftplugin/slint.mnv new file mode 100644 index 0000000000..41613ed54e --- /dev/null +++ b/mnv/runtime/ftplugin/slint.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: slint +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 19 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +" Set 'comments' to format dashed lists in comments. +" Also include ///, used for Doxygen. +setl comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/slpconf.mnv b/mnv/runtime/ftplugin/slpconf.mnv new file mode 100644 index 0000000000..87ec058d21 --- /dev/null +++ b/mnv/runtime/ftplugin/slpconf.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/slpreg.mnv b/mnv/runtime/ftplugin/slpreg.mnv new file mode 100644 index 0000000000..f3a04e78ae --- /dev/null +++ b/mnv/runtime/ftplugin/slpreg.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/slpspi.mnv b/mnv/runtime/ftplugin/slpspi.mnv new file mode 100644 index 0000000000..06102df277 --- /dev/null +++ b/mnv/runtime/ftplugin/slpspi.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/sml.mnv b/mnv/runtime/ftplugin/sml.mnv new file mode 100644 index 0000000000..6735806dc8 --- /dev/null +++ b/mnv/runtime/ftplugin/sml.mnv @@ -0,0 +1,41 @@ +" MNV filetype plugin file +" Language: SML +" Filenames: *.sml *.sig +" Maintainer: tocariimaa <tocariimaa@firemail.cc> +" Last Change: 2025 Nov 04 +" 2026 Jan 19 by MNV Project: add 'include' setting + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = 'setl com< cms< fo< inc<' + +setlocal formatoptions+=croql formatoptions-=t +setlocal commentstring=(*\ %s\ *) +setlocal comments=sr:(*,mb:*,ex:*) +setlocal include=^\\s*use\\> + +if exists('loaded_matchit') + let b:match_ignorecase = 0 + let b:match_words = '\<\%(abstype\|let\|local\|sig\|struct\)\>:\<\%(in\|with\)\>:\<end\>' + 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 = "SML Source Files (*.sml)\t*.sml\n" .. + \ "SML Signature Files (*.sig)\t*.sig\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "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/mnv/runtime/ftplugin/snakemake.mnv b/mnv/runtime/ftplugin/snakemake.mnv new file mode 100644 index 0000000000..a2b11c2b20 --- /dev/null +++ b/mnv/runtime/ftplugin/snakemake.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: snakemake +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jun 13 + +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/mnv/runtime/ftplugin/solidity.mnv b/mnv/runtime/ftplugin/solidity.mnv new file mode 100644 index 0000000000..ccfd512554 --- /dev/null +++ b/mnv/runtime/ftplugin/solidity.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin file +" Language: Solidity +" Maintainer: Cothi (jiungdev@gmail.com) +" Original Author: tomlion (https://github.com/tomlion/mnv-solidity) +" Last Change: 2022 Sep 27 +" 2023 Aug 22 MNV Project (did_ftplugin, undo_ftplugin) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=//\ %s + +let b:undo_ftplugin = "setlocal commentstring<" diff --git a/mnv/runtime/ftplugin/solution.mnv b/mnv/runtime/ftplugin/solution.mnv new file mode 100644 index 0000000000..c4e8cc2ba0 --- /dev/null +++ b/mnv/runtime/ftplugin/solution.mnv @@ -0,0 +1,41 @@ +" MNV filetype plugin file +" Language: Microsoft Visual Studio Solution +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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(*.sln)\t*.sln\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 noet: diff --git a/mnv/runtime/ftplugin/soy.mnv b/mnv/runtime/ftplugin/soy.mnv new file mode 100644 index 0000000000..7761a39312 --- /dev/null +++ b/mnv/runtime/ftplugin/soy.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: Soy (Closure Templates) +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Oct 24 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" diff --git a/mnv/runtime/ftplugin/spajson.mnv b/mnv/runtime/ftplugin/spajson.mnv new file mode 100644 index 0000000000..e252ff7467 --- /dev/null +++ b/mnv/runtime/ftplugin/spajson.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: SPA JSON +" Maintainer: David Mandelberg <david@mandelberg.org> +" Last Change: 2025 Mar 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<" diff --git a/mnv/runtime/ftplugin/spec.mnv b/mnv/runtime/ftplugin/spec.mnv new file mode 100644 index 0000000000..3a590d2da5 --- /dev/null +++ b/mnv/runtime/ftplugin/spec.mnv @@ -0,0 +1,225 @@ +" Plugin to update the %changelog section of RPM spec files +" Filename: spec.mnv +" Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com +" Former Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com> (until March 2014) +" Last Change: 2015 Jun 01 +" Update by Zdenek Dohnal, 2022 May 17 +" 2024 Sep 10 by MNV Project: add epoch support for spec changelog, #15537 +" 2024 Oct 07 by MNV Project: add comment support, #15817 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=b:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" + +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 mnv + +try: + import rpm +except ImportError: + pass +else: + specfile = mnv.current.buffer.name + if specfile: + rpm.delMacro("dist") + spec = rpm.spec(specfile) + headers = spec.sourceHeader + version = headers["Version"] + release = headers["Release"] + mnv.command("let ver = '" + version + "'") + mnv.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 epoch = "" + let ver = "" + let rel = "" + let nameline = -1 + let epochline = -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 epoch == "" && linestr =~? '^Epoch:' + let epochline = line + let epoch = substitute(strpart(linestr,6), '^[ ]*\([^ ]\+\)[ ]*$','\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 epoch = s:ParseRpmVars(epoch, epochline) + 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 + if strlen(epoch) + let ver = epoch.":".ver + endif + 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.mnv 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/mnv/runtime/ftplugin/sql.mnv b/mnv/runtime/ftplugin/sql.mnv new file mode 100644 index 0000000000..b18c36dda3 --- /dev/null +++ b/mnv/runtime/ftplugin/sql.mnv @@ -0,0 +1,550 @@ +" SQL filetype plugin file +" Language: SQL (Common for Oracle, Microsoft SQL Server, Sybase) +" Version: 12.0 +" Maintainer: David Fishburn <dfishburn dot mnv at gmail dot com> +" Last Change: 2017 Mar 07 +" 2024 Jan 14 by MNV Project: browsefilter +" 2024 May 18 by MNV Project: set comment options +" 2024 Aug 14 by MNV Project: remove redundant code +" Download: http://mnv.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: +" mnvfiles/after/ftplugin/sql.mnv (Windows) +" .mnv/after/ftplugin/sql.mnv (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.mnv 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 mnvrc: +" 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 .mnvrc: +" 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") + finish +endif + +" Don't load another plugin for this buffer +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl comments< commentstring< formatoptions< define< omnifunc<" . + \ " | unlet! b:browsefilter b:match_words" + +" 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 + +setlocal comments=:-- commentstring=--\ %s + +" Functions/Commands to allow the user to change SQL syntax dialects +" through the use of :SQLSetType <tab> for completion. +" This works with both MNV 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 MNV. + 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.mnv) + " 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.mnv can exist in the + " syntax, 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 MNV 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 syntax will have different + " items and groups + if !exists('g:loaded_sql_completion') || g:loaded_sql_completion >= 100 + call sqlcomplete#ResetCacheSyntax() + endif + + " MNV 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 MNV 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.'.mnv' + if globpath(&runtimepath, 'ftplugin/'.b:sql_type_override.'.mnv') != '' + exec 'runtime ftplugin/'.b:sql_type_override.'.mnv' + " 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.'.mnv' + if globpath(&runtimepath, 'ftplugin/'.g:sql_type_default.'.mnv') != '' + exec 'runtime ftplugin/'.g:sql_type_default.'.mnv' + " else + " echomsg 'ftplugin/'.g:sql_type_default.'.mnv not exist, using default' + endif +endif + +" Win32 and GTK can filter files in the browse dialog +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "SQL Files (*.sql)\t*.sql\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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 mnvrc. +" 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.mnv + " This is used by the sqlcomplete.mnv plugin + " Source it for its global functions + runtime autoload/syntaxcomplete.mnv + + 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 MNV'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.mnv 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 mnvrc. + " 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 + +" mnv:sw=4: diff --git a/mnv/runtime/ftplugin/squirrel.mnv b/mnv/runtime/ftplugin/squirrel.mnv new file mode 100644 index 0000000000..16d759a4c6 --- /dev/null +++ b/mnv/runtime/ftplugin/squirrel.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin +" Language: Squirrel +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +" Set 'comments' to format dashed lists in comments. +" Also include ///, used for Doxygen. +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// + +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/ssa.mnv b/mnv/runtime/ftplugin/ssa.mnv new file mode 100644 index 0000000000..cf2b62a33c --- /dev/null +++ b/mnv/runtime/ftplugin/ssa.mnv @@ -0,0 +1,13 @@ +" MNV 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/mnv/runtime/ftplugin/sshconfig.mnv b/mnv/runtime/ftplugin/sshconfig.mnv new file mode 100644 index 0000000000..e9b295eac6 --- /dev/null +++ b/mnv/runtime/ftplugin/sshconfig.mnv @@ -0,0 +1,27 @@ +" MNV filetype plugin file +" Language: OpenSSH client configuration file +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2026-03-11 (`less -I`) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql +let b:undo_ftplugin = 'setlocal com< cms< fo<' + +if has('unix') && executable('less') && exists(':terminal') == 2 + command -buffer -nargs=1 SshconfigKeywordPrg + \ silent exe 'hor term ' . 'env LESS= MANPAGER="less -I --pattern=''' . escape('^\s+' . <q-args> . '$', '\') . ''' --hilite-search" man ' . 'ssh_config' + setlocal iskeyword+=- + setlocal keywordprg=:SshconfigKeywordPrg + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword< | sil! delc -buffer SshconfigKeywordPrg' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/sshdconfig.mnv b/mnv/runtime/ftplugin/sshdconfig.mnv new file mode 100644 index 0000000000..04f05e5ecc --- /dev/null +++ b/mnv/runtime/ftplugin/sshdconfig.mnv @@ -0,0 +1,10 @@ +" MNV filetype plugin file +" Language: OpenSSH server configuration file +" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com> +" Latest Revision: 2024-05-17 + +if exists("b:did_ftplugin") + finish +endif + +runtime! ftplugin/conf.mnv diff --git a/mnv/runtime/ftplugin/stylus.mnv b/mnv/runtime/ftplugin/stylus.mnv new file mode 100644 index 0000000000..9aaaa17117 --- /dev/null +++ b/mnv/runtime/ftplugin/stylus.mnv @@ -0,0 +1,54 @@ +" MNV filetype plugin +" Language: Stylus +" Maintainer: Marc Harter +" Credits: Tim Pope + +" 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" + +runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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 + +" Change the browse dialog on Win32 to show mainly Styl-related files +if has("gui_win32") + let b:browsefilter="Stylus Files (*.styl)\t*.styl\n" . s:browsefilter +endif + +setlocal comments= commentstring=//\ %s +setlocal suffixesadd=.styl +setlocal formatoptions+=r + +" Add '-' and '#' to the what makes up a keyword. +" This means that 'e' and 'w' work properly now, for properties +" and valid variable names. +setl iskeyword+=#,- + +" Add a Stylus command (to see if it's valid) +command -buffer Stylus !clear; cat % |stylus + + +let b:undo_ftplugin = "setl sua< isk< cms< com< fo< " + \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin + +let &cpo = s:save_cpo + +" mnv:set sw=2: diff --git a/mnv/runtime/ftplugin/sudoers.mnv b/mnv/runtime/ftplugin/sudoers.mnv new file mode 100644 index 0000000000..e8c0ebf597 --- /dev/null +++ b/mnv/runtime/ftplugin/sudoers.mnv @@ -0,0 +1,27 @@ +" MNV filetype plugin file +" Language: sudoers(5) configuration files +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025-07-22 (use :hor term #17822) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< fo<" + +setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql + +if has('unix') && executable('less') && exists(':terminal') == 2 + command -buffer -nargs=1 SudoersKeywordPrg + \ silent exe ':hor term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('\b' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'sudoers' + setlocal keywordprg=:SudoersKeywordPrg + let b:undo_ftplugin .= '| setlocal keywordprg< | sil! delc -buffer SudoersKeywordPrg' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/svelte.mnv b/mnv/runtime/ftplugin/svelte.mnv new file mode 100644 index 0000000000..9099e4bcad --- /dev/null +++ b/mnv/runtime/ftplugin/svelte.mnv @@ -0,0 +1,40 @@ +" MNV filetype plugin +" Language: svelte +" Maintainer: Igor Lacerda <igorlafarsi@gmail.com> +" Last Change: 2025 Apr 06 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_sav = &cpo +set cpo&mnv + +setlocal matchpairs+=<:> +setlocal commentstring=<!--\ %s\ --> +setlocal comments=s:<!--,m:\ \ \ \ ,e:--> + +let b:undo_ftplugin = 'setlocal comments< commentstring< matchpairs<' + +if exists('&omnifunc') + setlocal omnifunc=htmlcomplete#CompleteTags + call htmlcomplete#DetectOmniFlavor() + let b:undo_ftplugin ..= " | setlocal omnifunc<" +endif + +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>,' . + \ '{#\(if\|each\)[^}]*}:{\:else[^}]*}:{\/\(if\|each\)},' . + \ '{#await[^}]*}:{\:then[^}]*}:{\:catch[^}]*}:{\/await},' . + \ '{#snippet[^}]*}:{\/snippet},' . + \ '{#key[^}]*}:{\/key}' + let b:html_set_match_words = 1 + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:html_set_match_words" +endif +let &cpo = s:cpo_sav +unlet! s:cpo_sav diff --git a/mnv/runtime/ftplugin/svg.mnv b/mnv/runtime/ftplugin/svg.mnv new file mode 100644 index 0000000000..22875aa0ab --- /dev/null +++ b/mnv/runtime/ftplugin/svg.mnv @@ -0,0 +1,47 @@ +" MNV filetype plugin file +" Language: svg +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Change: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif + +runtime! ftplugin/xml.mnv ftplugin/xml_*.mnv ftplugin/xml/*.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/sway.mnv b/mnv/runtime/ftplugin/sway.mnv new file mode 100644 index 0000000000..6aa1506afc --- /dev/null +++ b/mnv/runtime/ftplugin/sway.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: Sway +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Nov 01 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl commentstring=//\ %s +" From Rust comments +setl comments=s0:/*!,ex:*/,s1:/*,mb:*,ex:*/,:///,://!,:// + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/swayconfig.mnv b/mnv/runtime/ftplugin/swayconfig.mnv new file mode 100644 index 0000000000..bdf97c2e2b --- /dev/null +++ b/mnv/runtime/ftplugin/swayconfig.mnv @@ -0,0 +1,16 @@ +" MNV 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/mnv/runtime/ftplugin/swift.mnv b/mnv/runtime/ftplugin/swift.mnv new file mode 100644 index 0000000000..5a80c8e313 --- /dev/null +++ b/mnv/runtime/ftplugin/swift.mnv @@ -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 +" +" MNV 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/mnv/runtime/ftplugin/swiftgyb.mnv b/mnv/runtime/ftplugin/swiftgyb.mnv new file mode 100644 index 0000000000..e849f70ea1 --- /dev/null +++ b/mnv/runtime/ftplugin/swiftgyb.mnv @@ -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 +" +" MNV maintainer: Emir SARI <bitigchi@me.com> + +runtime! ftplugin/swift.mnv diff --git a/mnv/runtime/ftplugin/swig.mnv b/mnv/runtime/ftplugin/swig.mnv new file mode 100644 index 0000000000..60b24838bc --- /dev/null +++ b/mnv/runtime/ftplugin/swig.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin file +" Language: SWIG +" Maintainer: Julien Marrec <julien.marrec 'at' gmail com> +" Last Change: 2023 November 23 +" 2025 July 14 by MNV project: set 'comment'/'commentstring' options + +" 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 iskeyword< comments< commentstring<" +setlocal iskeyword+=% +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s diff --git a/mnv/runtime/ftplugin/sysctl.mnv b/mnv/runtime/ftplugin/sysctl.mnv new file mode 100644 index 0000000000..096594c9bb --- /dev/null +++ b/mnv/runtime/ftplugin/sysctl.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/sysml.mnv b/mnv/runtime/ftplugin/sysml.mnv new file mode 100644 index 0000000000..a3f4bb8434 --- /dev/null +++ b/mnv/runtime/ftplugin/sysml.mnv @@ -0,0 +1,12 @@ +" MNV filetype plugin +" Language: SysML +" Author: Daumantas Kavolis <daumantas.kavolis@sensmetry.com> +" Last Change: 2025-10-03 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +" Behaves mostly just like KerML, only differs by keywords +runtime! ftplugin/kerml.mnv diff --git a/mnv/runtime/ftplugin/systemd.mnv b/mnv/runtime/ftplugin/systemd.mnv new file mode 100644 index 0000000000..95126bcc21 --- /dev/null +++ b/mnv/runtime/ftplugin/systemd.mnv @@ -0,0 +1,30 @@ +" MNV filetype plugin file +" Language: systemd.unit(5) +" Keyword Lookup Support: Enno Nagel <enno.nagel+mnv@gmail.com> +" Latest Revision: 2024-10-02 (small fixes to &keywordprg) + +if exists("b:did_ftplugin") + finish +endif +" Looks a lot like dosini files. +runtime! ftplugin/dosini.mnv + +if has('unix') && executable('less') && exists(':terminal') == 2 + command! -buffer -nargs=1 SystemdKeywordPrg silent exe 'term ++close ' KeywordLookup_systemd(<q-args>) + silent! 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 'env LESS= MANPAGER="less --pattern=''(^|,)\\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd.' . section + else + return 'env LESS= MANPAGER="less --pattern=''(^|,)\\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd' + endif + endfunction + setlocal iskeyword+=- + setlocal keywordprg=:SystemdKeywordPrg + if !exists('b:undo_ftplugin') || empty(b:undo_ftplugin) + let b:undo_ftplugin = 'setlocal keywordprg< iskeyword< | sil! delc -buffer SystemdKeywordPrg' + else + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword< | sil! delc -buffer SystemdKeywordPrg' + endif +endif diff --git a/mnv/runtime/ftplugin/systemverilog.mnv b/mnv/runtime/ftplugin/systemverilog.mnv new file mode 100644 index 0000000000..2bb042e60f --- /dev/null +++ b/mnv/runtime/ftplugin/systemverilog.mnv @@ -0,0 +1,45 @@ +" MNV filetype plugin file +" Language: SystemVerilog +" Maintainer: kocha <kocha.lsifrontend@gmail.com> +" Last Change: 07-May-2021 +" 2026 Feb 13 by MNV project: correct matchit covergroup block #19394 + +if exists("b:did_ftplugin") + finish +endif + +" Behaves just like Verilog +runtime! ftplugin/verilog.mnv + +let s:cpo_save = &cpo +set cpo&mnv + +" 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\>,' . + \ '\<covergroup\>:\<endgroup\>,' . + \ '\<interface\>:\<endinterface\>,' . + \ '\<package\>:\<endpackage\>,' . + \ '\<program\>:\<endprogram\>,' . + \ '\<property\>:\<endproperty\>,' . + \ '\<sequence\>:\<endsequence\>' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/tap.mnv b/mnv/runtime/ftplugin/tap.mnv new file mode 100644 index 0000000000..a58e48b9ea --- /dev/null +++ b/mnv/runtime/ftplugin/tap.mnv @@ -0,0 +1,27 @@ +" MNV filetype plugin file +" Language: Verbose TAP Output +" Maintainer: mnv-perl <mnv-perl@googlegroups.com> (need to be subscribed to post) +" Homepage: https://github.com/mnv-perl/mnv-perl +" Bugs/requests: https://github.com/mnv-perl/mnv-perl/issues +" License: MNV 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/mnv/runtime/ftplugin/tcl.mnv b/mnv/runtime/ftplugin/tcl.mnv new file mode 100644 index 0000000000..347f0d8576 --- /dev/null +++ b/mnv/runtime/ftplugin/tcl.mnv @@ -0,0 +1,43 @@ +" MNV filetype plugin file +" Language: Tcl +" Maintainer: Robert L Hicks <sigzero@gmail.com> +" Latest Revision: 2009-05-01 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Tcl Source Files (*.tcl)\t*.tcl\n" . + \ "Tcl Test Files (*.test)\t*.test\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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 + +" mnv: set et ts=4 sw=4 tw=78: diff --git a/mnv/runtime/ftplugin/tcsh.mnv b/mnv/runtime/ftplugin/tcsh.mnv new file mode 100644 index 0000000000..1aa877a420 --- /dev/null +++ b/mnv/runtime/ftplugin/tcsh.mnv @@ -0,0 +1,43 @@ +" MNV filetype plugin file +" Language: tcsh +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp +" Last Change: 2024 Jan 14 + +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" +if has("win32") + let s:browsefilter ..= "All Files (*.*)\t*\n" +else + let s:browsefilter ..= "All Files (*)\t*\n" +endif + +runtime! ftplugin/csh.mnv ftplugin/csh_*.mnv ftplugin/csh/*.mnv +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")) && + \ (!exists("b:browsefilter") || exists("b:csh_set_browsefilter")) + let b:browsefilter = "tcsh Scripts (*.tcsh)\t*.tcsh\n" .. s:browsefilter + let s:undo_ftplugin = "unlet! b:browsefilter | " .. s:undo_ftplugin +endif + +let b:undo_ftplugin = s:undo_ftplugin + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/mnv/runtime/ftplugin/tera.mnv b/mnv/runtime/ftplugin/tera.mnv new file mode 100644 index 0000000000..c9b9624d06 --- /dev/null +++ b/mnv/runtime/ftplugin/tera.mnv @@ -0,0 +1,37 @@ +" MNV filetype plugin file +" Language: Tera +" Maintainer: Muntasir Mahmud <muntasir.joypurhat@gmail.com> +" Last Change: 2025 Mar 08 +" 2025 Apr 16 by MNV Project (set 'cpoptions' for line continuation, #17121) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal autoindent + +setlocal commentstring={#\ %s\ #} +setlocal comments=s:{#,e:#} + +if exists("loaded_matchit") + let b:match_ignorecase = 0 + let b:match_words = '{#:##\|#},{% *if:{% *else\>:{% *elif\>:{% *endif %},{% *for\>:{% *endfor %},{% *macro\>:{% *endmacro %},{% *block\>:{% *endblock %},{% *filter\>:{% *endfilter %},{% *set\>:{% *endset %},{% *raw\>:{% *endraw %},{% *with\>:{% *endwith %}' +endif + +setlocal includeexpr=substitute(v:fname,'\\([^.]*\\)$','\\1','g') +setlocal suffixesadd=.tera + +setlocal expandtab +setlocal shiftwidth=2 +setlocal softtabstop=2 + +let b:undo_ftplugin = "setlocal autoindent< commentstring< comments< " .. + \ "includeexpr< suffixesadd< expandtab< shiftwidth< softtabstop<" +let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/terminfo.mnv b/mnv/runtime/ftplugin/terminfo.mnv new file mode 100644 index 0000000000..8847816082 --- /dev/null +++ b/mnv/runtime/ftplugin/terminfo.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/terraform.mnv b/mnv/runtime/ftplugin/terraform.mnv new file mode 100644 index 0000000000..5d5d214fd6 --- /dev/null +++ b/mnv/runtime/ftplugin/terraform.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: terraform +" Maintainer: Janno Tjarks (janno.tjarks@mailbox.org) +" Last Change: 2024 Jul 3 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=#\ %s +setlocal comments=://,:# + +let b:undo_ftplugin = "setlocal commentstring< comments<" diff --git a/mnv/runtime/ftplugin/tex.mnv b/mnv/runtime/ftplugin/tex.mnv new file mode 100644 index 0000000000..4f90ce9f29 --- /dev/null +++ b/mnv/runtime/ftplugin/tex.mnv @@ -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.mnv.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 $MNVRUNTIME/ftplugin/plaintex.mnv + +" Avoid problems if running in 'compatible' mode. +let s:save_cpo = &cpo +set cpo&mnv + +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 MNV 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.mnv plugin for +" extended matching with the % key. +" ftplugin/plaintex.mnv 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 + +" mnv:sts=2:sw=2: diff --git a/mnv/runtime/ftplugin/text.mnv b/mnv/runtime/ftplugin/text.mnv new file mode 100644 index 0000000000..ada10708b4 --- /dev/null +++ b/mnv/runtime/ftplugin/text.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin +" Language: Text +" Maintainer: David Barnett <daviebdawg+mnv@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/mnv/runtime/ftplugin/tf.mnv b/mnv/runtime/ftplugin/tf.mnv new file mode 100644 index 0000000000..4503148a81 --- /dev/null +++ b/mnv/runtime/ftplugin/tf.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin +" Language: tf (TinyFugue) +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +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/mnv/runtime/ftplugin/thrift.mnv b/mnv/runtime/ftplugin/thrift.mnv new file mode 100644 index 0000000000..4ca800a99b --- /dev/null +++ b/mnv/runtime/ftplugin/thrift.mnv @@ -0,0 +1,17 @@ +" MNV filetype plugin file +" Language: Apache Thrift +" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com> +" Last Change: 2024/07/29 + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +" Thrift supports shell-style, C-style multi-line as well as single-line Java/C++ style comments. +" Reference: https://diwakergupta.github.io/thrift-missing-guide/#_language_reference +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://,b:# +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl comments< commentstring<' diff --git a/mnv/runtime/ftplugin/tiasm.mnv b/mnv/runtime/ftplugin/tiasm.mnv new file mode 100644 index 0000000000..24f2a83140 --- /dev/null +++ b/mnv/runtime/ftplugin/tiasm.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin file +" Language: TI linear assembly language +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Last Change: 2025 Jan 08 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +setlocal comments=:; +setlocal commentstring=;\ %s + +let b:undo_ftplugin = "setl commentstring< comments<" + +if exists("loaded_matchit") + let b:match_words = '^\s\+\.if\>:^\s\+\.elseif:^\s\+\.else\>:^\s\+\.endif\>,^\s\+\.group:^\s\+\.gmember:^\s\+\.endgroup,^\s\+\.loop:^\s\+\.break:^\s\+\.endloop,^\s\+\.macro:^\s\+\.mexit:^\s\+\.endm,^\s\+\.asmfunc:^\s\+\.endasmfunc,^\s\+\.c\?struct:^\s\+\.endstruct,^\s\+\.c\?union:^\s\+\.endunion,^\s\+\.c\?proc:^\s\+\.return:^\s\+\.endproc' + let b:match_ignorecase = 1 + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" +endif diff --git a/mnv/runtime/ftplugin/tidy.mnv b/mnv/runtime/ftplugin/tidy.mnv new file mode 100644 index 0000000000..82fa16e931 --- /dev/null +++ b/mnv/runtime/ftplugin/tidy.mnv @@ -0,0 +1,36 @@ +" MNV filetype plugin file +" Language: HTML Tidy Configuration +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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 = "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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif + let b:undo_ftplugin .= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/tmux.mnv b/mnv/runtime/ftplugin/tmux.mnv new file mode 100644 index 0000000000..486a16b55d --- /dev/null +++ b/mnv/runtime/ftplugin/tmux.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin file +" Language: tmux(1) configuration file +" URL: https://github.com/ericpruitt/tmux.mnv/ +" 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/mnv/runtime/ftplugin/toml.mnv b/mnv/runtime/ftplugin/toml.mnv new file mode 100644 index 0000000000..6370b8d05d --- /dev/null +++ b/mnv/runtime/ftplugin/toml.mnv @@ -0,0 +1,24 @@ +" MNV filetype plugin +" Language: TOML +" Homepage: https://github.com/cespare/mnv-toml +" Maintainer: Aman Verma +" Author: Lily Ballard <lily@ballards.net> +" Last Change: May 5, 2025 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&mnv +let b:undo_ftplugin = 'setlocal commentstring< comments< iskeyword<' + +setlocal commentstring=#\ %s +setlocal comments=:# +setlocal iskeyword+=- + +let &cpo = s:save_cpo +unlet s:save_cpo + +" mnv: et sw=2 sts=2 diff --git a/mnv/runtime/ftplugin/treetop.mnv b/mnv/runtime/ftplugin/treetop.mnv new file mode 100644 index 0000000000..5ec65bb4db --- /dev/null +++ b/mnv/runtime/ftplugin/treetop.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/tt2html.mnv b/mnv/runtime/ftplugin/tt2html.mnv new file mode 100644 index 0000000000..0d67059e1e --- /dev/null +++ b/mnv/runtime/ftplugin/tt2html.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin file +" Language: TT2 embedded with HTML +" Maintainer: mnv-perl <mnv-perl@googlegroups.com> (need to be subscribed to post) +" Homepage: https://github.com/mnv-perl/mnv-perl +" Bugs/requests: https://github.com/mnv-perl/mnv-perl/issues +" License: MNV 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.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv diff --git a/mnv/runtime/ftplugin/tutor.mnv b/mnv/runtime/ftplugin/tutor.mnv new file mode 100644 index 0000000000..e84bdc172f --- /dev/null +++ b/mnv/runtime/ftplugin/tutor.mnv @@ -0,0 +1,44 @@ +" Tutor filetype plugin +" Language: Tutor (the new tutor plugin) +" Maintainer: This runtime file is looking for a new maintainer. +" Last Change: 2025 May 10 +" Contributors: Phạm Bình An <phambinhanctb2004@gmail.com> +" Original Author: Felipe Morales <hel.sheep@gmail.com> +" Last Change: +" 2025 May 10 set b:undo_ftplugin +" 2025 May 12 update b:undo_ftplugin + +" Base: {{{1 +call tutor#SetupMNV() + +" Buffer Settings: {{{1 +setlocal noreadonly +setlocal noundofile + +setlocal keywordprg=:help +setlocal iskeyword=@,-,_ + +" The user will have to enable the folds himself, but we provide the foldexpr +" function. +setlocal foldmethod=manual +setlocal foldexpr=tutor#TutorFolds() +setlocal foldlevel=4 + +" Load metadata if it exists: {{{1 +if filereadable(expand('%').'.json') + call tutor#LoadMetadata() +endif + +" Mappings: {{{1 + +call tutor#SetNormalMappings() + +" Checks: {{{1 + +sign define tutorok text=✓ texthl=tutorOK +sign define tutorbad text=✗ texthl=tutorX + +let b:undo_ftplugin = "setl foldmethod< foldexpr< foldlevel< undofile< keywordprg< iskeyword< |" + \ . "call tutor#EnableInteractive(v:false) |" + +" mnv: fdm=marker diff --git a/mnv/runtime/ftplugin/twig.mnv b/mnv/runtime/ftplugin/twig.mnv new file mode 100644 index 0000000000..5dcab9ceff --- /dev/null +++ b/mnv/runtime/ftplugin/twig.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: twig +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Jul 14 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=s:{#,e:#} +setlocal commentstring={#\ %s\ #} + +let b:undo_ftplugin = 'setl comments< commentstring<' diff --git a/mnv/runtime/ftplugin/typescript.mnv b/mnv/runtime/ftplugin/typescript.mnv new file mode 100644 index 0000000000..c8bb425351 --- /dev/null +++ b/mnv/runtime/ftplugin/typescript.mnv @@ -0,0 +1,45 @@ +" MNV filetype plugin file +" Language: TypeScript +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 +" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +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 + +let b:undo_ftplugin = "setl fo< com< cms< sua<" + +" 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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "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/mnv/runtime/ftplugin/typescriptreact.mnv b/mnv/runtime/ftplugin/typescriptreact.mnv new file mode 100644 index 0000000000..d658687f6c --- /dev/null +++ b/mnv/runtime/ftplugin/typescriptreact.mnv @@ -0,0 +1,33 @@ +" MNV 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.mnv + +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/mnv/runtime/ftplugin/typst.mnv b/mnv/runtime/ftplugin/typst.mnv new file mode 100644 index 0000000000..56044f5d05 --- /dev/null +++ b/mnv/runtime/ftplugin/typst.mnv @@ -0,0 +1,39 @@ +" MNV filetype plugin file +" Language: Typst +" Previous Maintainer: Gregory Anders +" Luca Saccarola <github.e41mv@aleeas.com> +" Maintainer: This runtime file is looking for a new maintainer. +" Last Change: 2025 Aug 05 +" Based on: https://github.com/kaarmu/typst.mnv + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=//\ %s +setlocal comments=s1:/*,mb:*,ex:*/,:// +setlocal formatoptions+=croqn +" Numbered Lists +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +" Unordered (-), Ordered (+) and definition (/) Lists +setlocal formatlistpat+=\\\|^\\s*[-+/\]\\s\\+ +setlocal suffixesadd=.typ + +let b:undo_ftplugin = 'setl cms< com< fo< flp< sua<' + +if get(g:, 'typst_conceal', 0) + setlocal conceallevel=2 + let b:undo_ftplugin .= ' cole<' +endif + +if has("folding") && get(g:, 'typst_folding', 0) + setlocal foldexpr=typst#foldexpr() + setlocal foldmethod=expr + let b:undo_ftplugin .= "|setl foldexpr< foldmethod<" +endif + +if !exists('current_compiler') + compiler typst + let b:undo_ftplugin ..= "| compiler make" +endif diff --git a/mnv/runtime/ftplugin/uc.mnv b/mnv/runtime/ftplugin/uc.mnv new file mode 100644 index 0000000000..1bc6c405c0 --- /dev/null +++ b/mnv/runtime/ftplugin/uc.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: UnrealScript +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2025 Jul 19 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setl commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/uci.mnv b/mnv/runtime/ftplugin/uci.mnv new file mode 100644 index 0000000000..f9676c16e6 --- /dev/null +++ b/mnv/runtime/ftplugin/uci.mnv @@ -0,0 +1,21 @@ +" MNV ftplugin file +" Language: OpenWrt Unified Configuration Interface +" Maintainer: Colin Caine <complaints@cmcaine.co.uk> +" Upstream: https://github.com/cmcaine/mnv-uci +" Last Change: 2024 Apr 17 +" +" For more information on uci, see https://openwrt.org/docs/guide-user/base-system/uci + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +" UCI files are indented with tabs. +setl noexpandtab +setl shiftwidth=0 +setl softtabstop=0 + +setl commentstring=#\ %s + +let b:undo_ftplugin = "setlocal et< cms< sts< sw<" diff --git a/mnv/runtime/ftplugin/udevconf.mnv b/mnv/runtime/ftplugin/udevconf.mnv new file mode 100644 index 0000000000..ccf1ca645b --- /dev/null +++ b/mnv/runtime/ftplugin/udevconf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/udevperm.mnv b/mnv/runtime/ftplugin/udevperm.mnv new file mode 100644 index 0000000000..637682b481 --- /dev/null +++ b/mnv/runtime/ftplugin/udevperm.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/udevrules.mnv b/mnv/runtime/ftplugin/udevrules.mnv new file mode 100644 index 0000000000..8d0756de1b --- /dev/null +++ b/mnv/runtime/ftplugin/udevrules.mnv @@ -0,0 +1,28 @@ +" MNV filetype plugin file +" Language: udev(8) rules file +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025-07-22 (use :hor term #17822) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< fo<" + +setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql + +if has('unix') && executable('less') && exists(':terminal') == 2 + command -buffer -nargs=1 UdevrulesKeywordPrg + \ silent exe ':hor term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s{,8}' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'udev' + setlocal iskeyword+=- + setlocal keywordprg=:UdevrulesKeywordPrg + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword< | sil! delc -buffer UdevrulesKeywordPrg' +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/unison.mnv b/mnv/runtime/ftplugin/unison.mnv new file mode 100644 index 0000000000..4f60608619 --- /dev/null +++ b/mnv/runtime/ftplugin/unison.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: unison +" Maintainer: Anton Parkhomenko <anton@chuwy.me> +" Latest Revision: 2023-08-07 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setl cms< isk<" + +setlocal commentstring=--\ %s +setlocal iskeyword+=!,' diff --git a/mnv/runtime/ftplugin/updatedb.mnv b/mnv/runtime/ftplugin/updatedb.mnv new file mode 100644 index 0000000000..67814bedaa --- /dev/null +++ b/mnv/runtime/ftplugin/updatedb.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/urlshortcut.mnv b/mnv/runtime/ftplugin/urlshortcut.mnv new file mode 100644 index 0000000000..0d0c5d87cd --- /dev/null +++ b/mnv/runtime/ftplugin/urlshortcut.mnv @@ -0,0 +1,20 @@ +" MNV filetype plugin file +" Language: MS Windows URL shortcut file +" Maintainer: ObserverOfTime <chronobserver@disroot.org> +" Latest Revision: 2023-06-04 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpoptions +set cpoptions&mnv + +let b:undo_ftplugin = "setl com< cms< fo<" + +setlocal comments=:; commentstring=;\ %s +setlocal formatoptions-=t formatoptions+=croql + +let &cpoptions = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/usd.mnv b/mnv/runtime/ftplugin/usd.mnv new file mode 100644 index 0000000000..71330dafa7 --- /dev/null +++ b/mnv/runtime/ftplugin/usd.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: Pixar Animation's Universal Scene Description format +" Maintainer: Colin Kennedy <colinvfx@gmail.com> +" Last Change: 2023 May 9 +" 2023 Aug 28 by MNV Project (undo_ftplugin) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal commentstring<" diff --git a/mnv/runtime/ftplugin/v.mnv b/mnv/runtime/ftplugin/v.mnv new file mode 100644 index 0000000000..284baabdbb --- /dev/null +++ b/mnv/runtime/ftplugin/v.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin +" Language: v +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 May 19 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +" Set 'comments' to format dashed lists in comments. +" Also include ///, used for Doxygen. +setl comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/vb.mnv b/mnv/runtime/ftplugin/vb.mnv new file mode 100644 index 0000000000..b622ff9585 --- /dev/null +++ b/mnv/runtime/ftplugin/vb.mnv @@ -0,0 +1,75 @@ +" MNV filetype plugin file +" Language: Visual Basic (ft=vb) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Johannes Zellner <johannes@zellner.org> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "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/mnv/runtime/ftplugin/vdf.mnv b/mnv/runtime/ftplugin/vdf.mnv new file mode 100644 index 0000000000..d3ac61f70e --- /dev/null +++ b/mnv/runtime/ftplugin/vdf.mnv @@ -0,0 +1,14 @@ +" MNV 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/mnv/runtime/ftplugin/verilog.mnv b/mnv/runtime/ftplugin/verilog.mnv new file mode 100644 index 0000000000..a00b0ae9ae --- /dev/null +++ b/mnv/runtime/ftplugin/verilog.mnv @@ -0,0 +1,73 @@ +" MNV filetype plugin file +" Language: Verilog HDL +" Maintainer: Chih-Tsun Huang <cthuang@cs.nthu.edu.tw> +" Last Change: 2017 Aug 25 by Chih-Tsun Huang +" 2024 Jan 14 by MNV Project (browsefilter) +" 2024 May 20 by Riley Bruins <ribru17@gmail.com> (commentstring) +" URL: http://www.cs.nthu.edu.tw/~cthuang/mnv/ftplugin/verilog.mnv +" +" 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&mnv + +" Undo the plugin effect +let b:undo_ftplugin = "setlocal fo< com< tw< cms<" + \ . "| 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:*/,:// +setlocal commentstring=//\ %s + +" Format comments to be up to 78 characters long +if &textwidth == 0 + setlocal tw=78 +endif + +" Win32 and GTK can filter files in the browse dialog +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Verilog Source Files (*.v)\t*.v\n" + if has("win32") + let b:browsefilter .= "All Files (*.*)\t*\n" + else + let b:browsefilter .= "All Files (*)\t*\n" + endif +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/mnv/runtime/ftplugin/vhdl.mnv b/mnv/runtime/ftplugin/vhdl.mnv new file mode 100644 index 0000000000..d48cd6c57c --- /dev/null +++ b/mnv/runtime/ftplugin/vhdl.mnv @@ -0,0 +1,110 @@ +" VHDL filetype plugin +" Language: VHDL +" Maintainer: R.Shankar <shankar.pec?gmail.com> +" Modified By: Gerald Lai <laigera+mnv?gmail.com> +" Last Change: 2011 Dec 11 +" 2024 Jan 14 by MNV Project (browsefilter) +" 2023 Aug 28 by MNV Project (undo_ftplugin, commentstring) + +" 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&mnv + +" 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:*/,:// + +setlocal commentstring=--\ %s + +" Format comments to be up to 78 characters long +"setlocal tw=75 + +let b:undo_ftplugin = "setl cms< " + +" Win32 and GTK can filter files in the browse dialog +"if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") +" if has("win32") +" let b:browsefilter ..= "All Files (*.*)\t*\n" +" else +" let b:browsefilter ..= "All Files (*)\t*\n" +" endif +" let b:undo_ftplugin .= " | unlet! b:browsefilter" +"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\>' + let b:undo_ftplugin .= " | unlet! b:match_ignorecase b:match_words" +endif + +if !exists("no_plugin_maps") && !exists("no_vhdl_maps") + " 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 b:undo_ftplugin .= + \ " | silent! execute 'nunmap <buffer> [['" . + \ " | silent! execute 'nunmap <buffer> ]]'" . + \ " | silent! execute 'nunmap <buffer> []'" . + \ " | silent! execute 'nunmap <buffer> ]['" . + \ " | silent! execute 'vunmap <buffer> [['" . + \ " | silent! execute 'vunmap <buffer> ]]'" . + \ " | silent! execute 'vunmap <buffer> []'" . + \ " | silent! execute 'vunmap <buffer> ]['" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/vroom.mnv b/mnv/runtime/ftplugin/vroom.mnv new file mode 100644 index 0000000000..2bff2a820d --- /dev/null +++ b/mnv/runtime/ftplugin/vroom.mnv @@ -0,0 +1,35 @@ +" MNV filetype plugin file +" Language: Vroom (mnv testing and executable documentation) +" Maintainer: David Barnett (https://github.com/google/mnv-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/mnv.mnv. +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/mnv/runtime/ftplugin/vue.mnv b/mnv/runtime/ftplugin/vue.mnv new file mode 100644 index 0000000000..73f99dd7b5 --- /dev/null +++ b/mnv/runtime/ftplugin/vue.mnv @@ -0,0 +1,32 @@ +" MNV filetype plugin file +" Language: vue +" Last Change: +" 2025 Jun 09 by MNV project set comment options #17479 + +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:--> + +let b:undo_ftplugin = "setlocal comments< commentstring<" + +" Copied from ftplugin/html.mnv +" 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>' + let b:undo_ftplugin .= ' | unlet! b:match_words b:match_ignorecase' +endif + +" Restore the saved compatibility options. +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/mnv/runtime/ftplugin/wat.mnv b/mnv/runtime/ftplugin/wat.mnv new file mode 100644 index 0000000000..e79a3ab502 --- /dev/null +++ b/mnv/runtime/ftplugin/wat.mnv @@ -0,0 +1,18 @@ +" MNV filetype plugin file +" Language: WebAssembly +" Maintainer: rhysd <lin90162@yahoo.co.jp> +" Last Change: Nov 14, 2023 +" May 24, 2024 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" For bugs, patches and license go to https://github.com/rhysd/mnv-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/mnv/runtime/ftplugin/wget.mnv b/mnv/runtime/ftplugin/wget.mnv new file mode 100644 index 0000000000..bc90717a70 --- /dev/null +++ b/mnv/runtime/ftplugin/wget.mnv @@ -0,0 +1,33 @@ +" MNV filetype plugin file +" Language: Wget configuration file (/etc/wgetrc ~/.wgetrc) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/wget2.mnv b/mnv/runtime/ftplugin/wget2.mnv new file mode 100644 index 0000000000..986e140cb6 --- /dev/null +++ b/mnv/runtime/ftplugin/wget2.mnv @@ -0,0 +1,33 @@ +" MNV filetype plugin file +" Language: Wget2 configuration file (/etc/wget2rc ~/.wget2rc) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 14 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +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" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" mnv: nowrap sw=2 sts=2 ts=8 diff --git a/mnv/runtime/ftplugin/wks.mnv b/mnv/runtime/ftplugin/wks.mnv new file mode 100644 index 0000000000..75380ab1a9 --- /dev/null +++ b/mnv/runtime/ftplugin/wks.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin file +" Language: OpenEmbedded Image Creator (WIC) Kickstarter files wks +" Maintainer: Anakin Childerhose <anakin@childerhose.ca> +" Last Change: 2026 Mar 23 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = 'setlocal com< cms<' diff --git a/mnv/runtime/ftplugin/xcompose.mnv b/mnv/runtime/ftplugin/xcompose.mnv new file mode 100644 index 0000000000..4a040e2638 --- /dev/null +++ b/mnv/runtime/ftplugin/xcompose.mnv @@ -0,0 +1,13 @@ +" MNV filetype plugin file +" Language: XCompose +" Maintainer: ObserverOfTime <chronobserver@disroot.org +" Last Change: 2023 Nov 09 + +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/mnv/runtime/ftplugin/xdefaults.mnv b/mnv/runtime/ftplugin/xdefaults.mnv new file mode 100644 index 0000000000..aaae15bf1a --- /dev/null +++ b/mnv/runtime/ftplugin/xdefaults.mnv @@ -0,0 +1,21 @@ +" MNV filetype plugin file +" Language: X resources files like ~/.Xdefaults (xrdb) +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2008 Jul 09 +" 2024 Jun 03 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< inc< fo<" + +setlocal comments=s1:/*,mb:*,ex:*/,:! commentstring=!\ %s inc& +setlocal formatoptions-=t formatoptions+=croql + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/xf86conf.mnv b/mnv/runtime/ftplugin/xf86conf.mnv new file mode 100644 index 0000000000..cb94a2b60d --- /dev/null +++ b/mnv/runtime/ftplugin/xf86conf.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/xhtml.mnv b/mnv/runtime/ftplugin/xhtml.mnv new file mode 100644 index 0000000000..5f227eba81 --- /dev/null +++ b/mnv/runtime/ftplugin/xhtml.mnv @@ -0,0 +1,74 @@ +" MNV filetype plugin file +" Language: xhtml +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif +let s:match_words = "" + +runtime! ftplugin/xml.mnv ftplugin/xml_*.mnv ftplugin/xml/*.mnv +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.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv +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.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/xinetd.mnv b/mnv/runtime/ftplugin/xinetd.mnv new file mode 100644 index 0000000000..5249991a3b --- /dev/null +++ b/mnv/runtime/ftplugin/xinetd.mnv @@ -0,0 +1,20 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/xkb.mnv b/mnv/runtime/ftplugin/xkb.mnv new file mode 100644 index 0000000000..0d4af60d44 --- /dev/null +++ b/mnv/runtime/ftplugin/xkb.mnv @@ -0,0 +1,14 @@ +" MNV filetype plugin +" Language: xkb (X keyboard extension) +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2026 Mar 01 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setl comments=:// +setl commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/xml.mnv b/mnv/runtime/ftplugin/xml.mnv new file mode 100644 index 0000000000..32793ffc88 --- /dev/null +++ b/mnv/runtime/ftplugin/xml.mnv @@ -0,0 +1,66 @@ +" MNV filetype plugin file +" Language: xml +" Maintainer: Christian Brabandt <cb@256bit.org> +" Last Changed: 2024 May 24 +" Repository: https://github.com/chrisbra/mnv-xml-ftplugin +" Previously +" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net> +" URL: http://dwsharp.users.sourceforge.net/mnv/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&mnv + +setlocal commentstring=<!--\ %s\ --> +" Remove the middlepart from the comments section, as this causes problems: +" https://groups.google.com/d/msg/mnv_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/mnv/runtime/ftplugin/xmodmap.mnv b/mnv/runtime/ftplugin/xmodmap.mnv new file mode 100644 index 0000000000..63d355d96c --- /dev/null +++ b/mnv/runtime/ftplugin/xmodmap.mnv @@ -0,0 +1,19 @@ +" MNV 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&mnv + +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/mnv/runtime/ftplugin/xs.mnv b/mnv/runtime/ftplugin/xs.mnv new file mode 100644 index 0000000000..565ac62161 --- /dev/null +++ b/mnv/runtime/ftplugin/xs.mnv @@ -0,0 +1,15 @@ +" MNV filetype plugin file +" Language: XS (Perl extension interface language) +" Maintainer: mnv-perl <mnv-perl@googlegroups.com> (need to be subscribed to post) +" Homepage: https://github.com/mnv-perl/mnv-perl +" Bugs/requests: https://github.com/mnv-perl/mnv-perl/issues +" License: MNV 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.mnv ftplugin/c_*.mnv ftplugin/c/*.mnv diff --git a/mnv/runtime/ftplugin/xsd.mnv b/mnv/runtime/ftplugin/xsd.mnv new file mode 100644 index 0000000000..1845b9bb6c --- /dev/null +++ b/mnv/runtime/ftplugin/xsd.mnv @@ -0,0 +1,46 @@ +" MNV filetype plugin file +" Language: xsd +" +" This runtime file is looking for a new maintainer. +" +" Former maintainer: Dan Sharp +" Last Changed: 2009 Jan 20 +" 2024 Jan 14 by MNV Project (browsefilter) + +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" +if has("win32") + let s:browsefilter .= "All Files (*.*)\t*\n" +else + let s:browsefilter .= "All Files (*)\t*\n" +endif + +runtime! ftplugin/xml.mnv ftplugin/xml_*.mnv ftplugin/xml/*.mnv +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") || has("gui_gtk")) && !exists("b:browsefilter") + 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/mnv/runtime/ftplugin/xslt.mnv b/mnv/runtime/ftplugin/xslt.mnv new file mode 100644 index 0000000000..f3ff5c83ca --- /dev/null +++ b/mnv/runtime/ftplugin/xslt.mnv @@ -0,0 +1,18 @@ +" MNV 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.mnv ftplugin/xml_*.mnv ftplugin/xml/*.mnv + +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/mnv/runtime/ftplugin/yacc.mnv b/mnv/runtime/ftplugin/yacc.mnv new file mode 100644 index 0000000000..d082cf88a8 --- /dev/null +++ b/mnv/runtime/ftplugin/yacc.mnv @@ -0,0 +1,16 @@ +" MNV filetype plugin +" Language: Yacc +" Maintainer: Riley Bruins <ribru17@gmail.com> +" Last Change: 2024 Jul 06 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +" Set 'comments' to format dashed lists in comments. +" Also include ///, used for Doxygen. +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/mnv/runtime/ftplugin/yaml.mnv b/mnv/runtime/ftplugin/yaml.mnv new file mode 100644 index 0000000000..f7135847b5 --- /dev/null +++ b/mnv/runtime/ftplugin/yaml.mnv @@ -0,0 +1,41 @@ +" MNV filetype plugin file +" Language: YAML (YAML Ain't Markup Language) +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> (inactive) +" Last Change: 2024 Oct 04 +" 2025 Apr 22 by MNV project re-order b:undo_ftplugin (#17179) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +let b:undo_ftplugin = "setl com< cms< et< fo<" + +setlocal comments=:# commentstring=#\ %s expandtab +setlocal formatoptions-=t formatoptions+=croql + +if get(g:, "yaml_recommended_style",1) + let b:undo_ftplugin ..= " sw< sts<" + setlocal shiftwidth=2 softtabstop=2 +endif + +" rime input method engine(https://rime.im/) +" uses `*.custom.yaml` as its config files +if expand('%:r:e') ==# 'custom' + " `__include` command in `*.custom.yaml` + " see: https://github.com/rime/home/wiki/Configuration#%E5%8C%85%E5%90%AB + setlocal include=__include:\\s* + let b:undo_ftplugin ..= " inc<" + + if !exists('current_compiler') + compiler rime_deployer + let b:undo_ftplugin ..= " | compiler make" + endif +endif + + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/mnv/runtime/ftplugin/yara.mnv b/mnv/runtime/ftplugin/yara.mnv new file mode 100644 index 0000000000..23d44cca2e --- /dev/null +++ b/mnv/runtime/ftplugin/yara.mnv @@ -0,0 +1,22 @@ +" MNV filetype plugin file +" Language: YARA +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2026 Mar 17 + +" 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 formatoptions-=t formatoptions+=croql + +setlocal commentstring=//\ %s +setlocal comments=s1:/*,mb:*,ex:*/,:// + +" Undo settings when leaving buffer +let b:undo_ftplugin = "setlocal commentstring< comments< formatoptions<" diff --git a/mnv/runtime/ftplugin/zathurarc.mnv b/mnv/runtime/ftplugin/zathurarc.mnv new file mode 100644 index 0000000000..816d2bfc42 --- /dev/null +++ b/mnv/runtime/ftplugin/zathurarc.mnv @@ -0,0 +1,22 @@ +" MNV filetype plugin file +" Language: Zathurarc +" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu> +" Documentation: https://pwmt.org/projects/zathura/documentation/ +" Upstream: https://github.com/Freed-Wu/zathurarc.mnv +" Latest Revision: 2024-04-02 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpoptions = &cpoptions +set cpoptions&mnv + +let b:undo_ftplugin = 'setlocal comments< commentstring< include<' +setlocal comments=:# +setlocal commentstring=#\ %s +setlocal include=^\sinclude + +let &cpoptions = s:save_cpoptions +unlet s:save_cpoptions diff --git a/mnv/runtime/ftplugin/zig.mnv b/mnv/runtime/ftplugin/zig.mnv new file mode 100644 index 0000000000..03067be73f --- /dev/null +++ b/mnv/runtime/ftplugin/zig.mnv @@ -0,0 +1,55 @@ +" MNV filetype plugin file +" Language: Zig +" Maintainer: Mathias Lindgren <math.lindgren@gmail.com> +" Last Change: 2024 Oct 04 +" Based on: https://github.com/ziglang/zig.mnv + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +" Match Zig builtin fns +setlocal iskeyword+=@-@ +setlocal formatoptions-=t formatoptions+=croql +setlocal suffixesadd=.zig,.zir,.zon +let &l:define='\v(<fn>|<const>|<var>|^\s*\#\s*define)' +let b:undo_ftplugin = 'setl isk< fo< sua< mp< def<' + +if get(g:, 'zig_recommended_style', 1) + setlocal expandtab + setlocal tabstop=8 + setlocal softtabstop=4 + setlocal shiftwidth=4 + let b:undo_ftplugin .= ' | setl et< ts< sts< sw<' +endif + +if has('comments') + setlocal comments=:///,://!,:// + setlocal commentstring=//\ %s + let b:undo_ftplugin .= ' | setl com< cms<' +endif + +if has('find_in_path') + let &l:includeexpr='substitute(v:fname, "^([^.])$", "\1.zig", "")' + let &l:include='\v(\@import>|\@cInclude>|^\s*\#\s*include)' + let b:undo_ftplugin .= ' | setl inex< inc<' +endif + +if exists('g:zig_std_dir') + let &l:path .= ',' . g:zig_std_dir + let b:undo_ftplugin .= ' | setl pa<' +endif + +if !exists('current_compiler') + compiler zig_build + let b:undo_ftplugin .= "| compiler make" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save +" mnv: tabstop=8 shiftwidth=4 softtabstop=4 expandtab diff --git a/mnv/runtime/ftplugin/zimbu.mnv b/mnv/runtime/ftplugin/zimbu.mnv new file mode 100644 index 0000000000..ec14192661 --- /dev/null +++ b/mnv/runtime/ftplugin/zimbu.mnv @@ -0,0 +1,210 @@ +" MNV filetype plugin file +" Language: Zimbu +" Maintainer: The MNV Project <https://github.com/Project-Tick/Project-Tick> +" Last Change: 2025 Jun 08 +" Former Maintainer: Bram Moolenaar <Bram@mnv.org> +" Note: Zimbu was the programming language invented by Bram, +" but it seems to be lost by now + +" 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< 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 commentstring=#\ %s + +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/mnv/runtime/ftplugin/zsh.mnv b/mnv/runtime/ftplugin/zsh.mnv new file mode 100644 index 0000000000..278253626a --- /dev/null +++ b/mnv/runtime/ftplugin/zsh.mnv @@ -0,0 +1,47 @@ +" MNV filetype plugin file +" Language: Zsh shell script +" Maintainer: Christian Brabandt <cb@256bit.org> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2025 Jul 23 +" License: MNV (see :h license) +" Repository: https://github.com/chrisbra/mnv-zsh + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&mnv + +setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setl com< cms< fo< " + +if get(g:, 'zsh_fold_enable', 0) + setlocal foldmethod=syntax + let b:undo_ftplugin .= "fdm< " +endif + +if executable('zsh') && &shell !~# '/\%(nologin\|false\)$' + if exists(':terminal') == 2 + command! -buffer -nargs=1 ZshKeywordPrg silent exe ':hor :term zsh -c "autoload -Uz run-help; run-help <args>"' + else + command! -buffer -nargs=1 ZshKeywordPrg echo system('MANPAGER= zsh -c "autoload -Uz run-help; run-help <args> 2>/dev/null"') + endif + setlocal keywordprg=:ZshKeywordPrg + let b:undo_ftplugin .= '| setl keywordprg< | sil! delc -buffer ZshKeywordPrg' + + if !exists('current_compiler') + compiler zsh + endif + let b:undo_ftplugin .= ' | compiler make' +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 |
