diff options
Diffstat (limited to 'runtime/indent')
38 files changed, 223 insertions, 60 deletions
diff --git a/runtime/indent/ada.vim b/runtime/indent/ada.vim index 6c8ab05267..582d033b23 100644 --- a/runtime/indent/ada.vim +++ b/runtime/indent/ada.vim @@ -16,6 +16,7 @@ " 15.10.2006 MK Bram's suggestion for runtime integration " 05.11.2006 MK Bram suggested to save on spaces " 19.09.2007 NO g: missing before ada#Comment +" 2022 April: b:undo_indent added by Doug Kearns " Help Page: ft-vim-indent "------------------------------------------------------------------------------ " ToDo: @@ -35,6 +36,8 @@ setlocal indentexpr=GetAdaIndent() setlocal indentkeys-=0{,0} setlocal indentkeys+=0=~then,0=~end,0=~elsif,0=~when,0=~exception,0=~begin,0=~is,0=~record +let b:undo_indent = "setl inde< indk<" + " Only define the functions once. if exists("*GetAdaIndent") finish diff --git a/runtime/indent/awk.vim b/runtime/indent/awk.vim index e65331977c..cf8132241c 100644 --- a/runtime/indent/awk.vim +++ b/runtime/indent/awk.vim @@ -24,6 +24,7 @@ " 29-04-2002 Fixed problems in function headers and max line width " Added support for two-line if's without curly braces " Fixed hang: 2011 Aug 31 +" 2022 April: b:undo_indent added by Doug Kearns " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -36,6 +37,8 @@ setlocal indentexpr=GetAwkIndent() " Mmm, copied from the tcl indent program. Is this okay? setlocal indentkeys-=:,0# +let b:undo_indent = "setl inde< indk<" + " Only define the function once. if exists("*GetAwkIndent") finish diff --git a/runtime/indent/basic.vim b/runtime/indent/basic.vim new file mode 100644 index 0000000000..7228772251 --- /dev/null +++ b/runtime/indent/basic.vim @@ -0,0 +1,11 @@ +" Vim indent file +" Language: BASIC (QuickBASIC 4.5) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Jan 24 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif + +runtime! indent/vb.vim diff --git a/runtime/indent/bst.vim b/runtime/indent/bst.vim index 47e3058810..3dd8d711a8 100644 --- a/runtime/indent/bst.vim +++ b/runtime/indent/bst.vim @@ -1,20 +1,18 @@ " Vim indent file " Language: bst " Author: Tim Pope <vimNOSPAM@tpope.info> -" $Id: bst.vim,v 1.1 2007/05/05 18:11:12 vimboss Exp $ +" Last Change: 2022 Mar 15 if exists("b:did_indent") finish endif let b:did_indent = 1 -setlocal expandtab setlocal indentexpr=GetBstIndent(v:lnum) -"setlocal smartindent setlocal cinkeys& setlocal cinkeys-=0# setlocal indentkeys& -"setlocal indentkeys+=0% +let b:undo_indent = 'setlocal indentexpr< cinkeys< indentkeys<' " Only define the function once. if exists("*GetBstIndent") diff --git a/runtime/indent/cdl.vim b/runtime/indent/cdl.vim index 0e3c6152b0..2c0fc7988e 100644 --- a/runtime/indent/cdl.vim +++ b/runtime/indent/cdl.vim @@ -1,7 +1,7 @@ " Description: Comshare Dimension Definition Language (CDL) " Maintainer: Raul Segura Acevedo <raulseguraaceved@netscape.net> (Invalid email address) " Doug Kearns <dougkearns@gmail.com> -" Last Change: Fri Nov 30 13:35:48 2001 CST +" Last Change: 2022 Apr 06 if exists("b:did_indent") "finish @@ -12,6 +12,8 @@ setlocal indentexpr=CdlGetIndent(v:lnum) setlocal indentkeys& setlocal indentkeys+==~else,=~endif,=~then,;,),= +let b:undo_indent = "setl inde< indk<" + " Only define the function once. if exists("*CdlGetIndent") "finish diff --git a/runtime/indent/chaiscript.vim b/runtime/indent/chaiscript.vim index 445281cc46..b7a3fe5896 100644 --- a/runtime/indent/chaiscript.vim +++ b/runtime/indent/chaiscript.vim @@ -1,6 +1,7 @@ " Vim indent file " Language: ChaiScript " Maintainer: Jason Turner <lefticus 'at' gmail com> +" Last Change: 2022 Apr 06 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -11,6 +12,8 @@ let b:did_indent = 1 setlocal indentexpr=GetChaiScriptIndent() setlocal autoindent +let b:undo_indent = "setl ai< inde<" + " Only define the function once. if exists("*GetChaiScriptIndent") finish diff --git a/runtime/indent/clojure.vim b/runtime/indent/clojure.vim index fadcaf4b4a..5bfbfbb197 100644 --- a/runtime/indent/clojure.vim +++ b/runtime/indent/clojure.vim @@ -5,7 +5,7 @@ " Meikel Brandmeyer <mb@kotka.de> " URL: https://github.com/clojure-vim/clojure.vim " License: Vim (see :h license) -" Last Change: 2021-10-26 +" Last Change: 2022-03-24 if exists("b:did_indent") finish diff --git a/runtime/indent/cmake.vim b/runtime/indent/cmake.vim index 845bdd7655..af27c0d49b 100644 --- a/runtime/indent/cmake.vim +++ b/runtime/indent/cmake.vim @@ -3,7 +3,7 @@ " Author: Andy Cedilnik <andy.cedilnik@kitware.com> " Maintainer: Dimitri Merejkowsky <d.merej@gmail.com> " Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com> -" Last Change: 2017 Sep 24 +" Last Change: 2022 Apr 06 " " Licence: The CMake license applies to this file. See " https://cmake.org/licensing @@ -17,6 +17,8 @@ let b:did_indent = 1 setlocal indentexpr=CMakeGetIndent(v:lnum) setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE( +let b:undo_indent = "setl inde< indk<" + " Only define the function once. if exists("*CMakeGetIndent") finish diff --git a/runtime/indent/d.vim b/runtime/indent/d.vim index 57f9125890..80c9a2f559 100644 --- a/runtime/indent/d.vim +++ b/runtime/indent/d.vim @@ -2,7 +2,7 @@ " Language: D " Maintainer: Jason Mills <jmills@cs.mun.ca> (Invalid email address) " Doug Kearns <dougkearns@gmail.com> -" Last Change: 2005 Nov 22 +" Last Change: 2022 Apr 06 " Version: 0.1 " " Please email me with bugs, comments, and suggestion. Put vim in the subject @@ -19,4 +19,6 @@ let b:did_indent = 1 " D indenting is a lot like the built-in C indenting. setlocal cindent +let b:undo_indent = "setl cin<" + " vim: ts=8 noet diff --git a/runtime/indent/dictconf.vim b/runtime/indent/dictconf.vim index 2e15c76146..fa40585a92 100644 --- a/runtime/indent/dictconf.vim +++ b/runtime/indent/dictconf.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: dict(1) configuration file " Previous Maintainer: Nikolai Weibull <now@bitwi.se> -" Latest Revision: 2006-12-20 +" Last Change: 2022 Apr 06 if exists("b:did_indent") finish @@ -11,3 +11,5 @@ let b:did_indent = 1 setlocal indentkeys=0{,0},!^F,o,O cinwords= autoindent smartindent setlocal nosmartindent inoremap <buffer> # X# + +let b:undo_indent = "setl ai< cinw< indk< si< | silent! iunmap <buffer> #" diff --git a/runtime/indent/dictdconf.vim b/runtime/indent/dictdconf.vim index 5c4fbdafb5..5c0e7c566c 100644 --- a/runtime/indent/dictdconf.vim +++ b/runtime/indent/dictdconf.vim @@ -11,3 +11,5 @@ let b:did_indent = 1 setlocal indentkeys=0{,0},!^F,o,O cinwords= autoindent smartindent setlocal nosmartindent inoremap <buffer> # X# + +let b:undo_indent = "setl ai< cinw< indk< si< | silent! iunmap <buffer> #" diff --git a/runtime/indent/dylan.vim b/runtime/indent/dylan.vim index 55255ddfa9..e2a6d1039c 100644 --- a/runtime/indent/dylan.vim +++ b/runtime/indent/dylan.vim @@ -3,7 +3,7 @@ " Maintainer: Brent A. Fulgham <bfulgham@debian.org> (Invalid email address) " Doug Kearns <dougkearns@gmail.com> " Version: 0.01 -" Last Change: 2017 Jun 13 +" Last Change: 2022 Apr 06 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -15,6 +15,9 @@ setlocal indentkeys+==~begin,=~block,=~case,=~cleanup,=~define,=~end,=~else,=~el " Define the appropriate indent function but only once setlocal indentexpr=DylanGetIndent() + +let b:undo_indent = "setl inde< indk<" + if exists("*DylanGetIndent") finish endif diff --git a/runtime/indent/falcon.vim b/runtime/indent/falcon.vim index 664ad61aa5..a58ccad870 100644 --- a/runtime/indent/falcon.vim +++ b/runtime/indent/falcon.vim @@ -3,6 +3,7 @@ " Maintainer: Steven Oliver <oliver.steven@gmail.com> " Website: https://steveno@github.com/steveno/falconpl-vim.git " Credits: This is, to a great extent, a copy n' paste of ruby.vim. +" 2022 April: b:undo_indent added by Doug Kearns " 1. Setup {{{1 " ============ @@ -20,6 +21,8 @@ setlocal indentexpr=FalconGetIndent(v:lnum) setlocal indentkeys=0{,0},0),0],!^F,o,O,e setlocal indentkeys+==~case,=~catch,=~default,=~elif,=~else,=~end,=~\" +let b:undo_indent = "setl inde< indk< si<" + " Define the appropriate indent function but only once if exists("*FalconGetIndent") finish diff --git a/runtime/indent/freebasic.vim b/runtime/indent/freebasic.vim new file mode 100644 index 0000000000..248b928635 --- /dev/null +++ b/runtime/indent/freebasic.vim @@ -0,0 +1,11 @@ +" Vim indent file +" Language: FreeBASIC +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Jan 24 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif + +runtime! indent/vb.vim diff --git a/runtime/indent/gitolite.vim b/runtime/indent/gitolite.vim index b36f30a494..22be6872cb 100644 --- a/runtime/indent/gitolite.vim +++ b/runtime/indent/gitolite.vim @@ -4,7 +4,7 @@ " (https://raw.githubusercontent.com/sitaramc/gitolite/master/contrib/vim/indent/gitolite.vim) " Maintainer: Sitaram Chamarty <sitaramc@gmail.com> " (former Maintainer: Teemu Matilainen <teemu.matilainen@iki.fi>) -" Last Change: 2017 Oct 05 +" Last Change: 2022 Apr 06 if exists("b:did_indent") finish @@ -15,6 +15,8 @@ setlocal autoindent setlocal indentexpr=GetGitoliteIndent() setlocal indentkeys=o,O,*<Return>,!^F,=repo,\",= +let b:undo_indent = "setl ai< inde< indk<" + " Only define the function once. if exists("*GetGitoliteIndent") finish diff --git a/runtime/indent/haml.vim b/runtime/indent/haml.vim index baca1d49d9..acd99d9c7d 100644 --- a/runtime/indent/haml.vim +++ b/runtime/indent/haml.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Haml " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2019 Dec 05 +" Last Change: 2022 Mar 15 if exists("b:did_indent") finish @@ -14,6 +14,8 @@ setlocal autoindent setlocal indentexpr=GetHamlIndent() setlocal indentkeys=o,O,*<Return>,},],0),!^F,=end,=else,=elsif,=rescue,=ensure,=when +let b:undo_indent = "setl ai< inde< indk<" + " Only define the function once. if exists("*GetHamlIndent") finish diff --git a/runtime/indent/html.vim b/runtime/indent/html.vim index d4b91f6421..a3c32d6342 100644 --- a/runtime/indent/html.vim +++ b/runtime/indent/html.vim @@ -1,7 +1,7 @@ " Vim indent script for HTML " Maintainer: Bram Moolenaar " Original Author: Andy Wokula <anwoku@yahoo.de> -" Last Change: 2021 Jun 13 +" Last Change: 2022 Jan 31 " Version: 1.0 "{{{ " Description: HTML indent script with cached state for faster indenting on a " range of lines. @@ -149,6 +149,15 @@ func HtmlIndent_CheckUserSettings() let b:html_indent_line_limit = 200 endif endif + + if exists('b:html_indent_attribute') + let b:hi_attr_indent = b:html_indent_attribute + elseif exists('g:html_indent_attribute') + let b:hi_attr_indent = g:html_indent_attribute + else + let b:hi_attr_indent = 2 + endif + endfunc "}}} " Init Script Vars @@ -946,11 +955,11 @@ func s:InsideTag(foundHtmlString) let idx = match(text, '<' . s:tagname . '\s\+\zs\w') endif if idx == -1 - " after just "<tag" indent two levels more + " after just "<tag" indent two levels more by default let idx = match(text, '<' . s:tagname . '$') if idx >= 0 call cursor(lnum, idx + 1) - return virtcol('.') - 1 + shiftwidth() * 2 + return virtcol('.') - 1 + shiftwidth() * b:hi_attr_indent endif endif if idx > 0 diff --git a/runtime/indent/idlang.vim b/runtime/indent/idlang.vim index e6a1d73775..1519865ab5 100644 --- a/runtime/indent/idlang.vim +++ b/runtime/indent/idlang.vim @@ -2,7 +2,7 @@ " Language: IDL (ft=idlang) " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com> (Invalid email address) " Doug Kearns <dougkearns@gmail.com> -" Last change: 2017 Jun 13 +" Last change: 2022 Apr 06 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -14,6 +14,8 @@ setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHIL setlocal indentexpr=GetIdlangIndent(v:lnum) +let b:undo_indent = "setl inde< indk<" + " Only define the function once. if exists("*GetIdlangIndent") finish diff --git a/runtime/indent/liquid.vim b/runtime/indent/liquid.vim index 7beb0388d1..6fc933797e 100644 --- a/runtime/indent/liquid.vim +++ b/runtime/indent/liquid.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Liquid " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2017 Jun 13 +" Last Change: 2022 Mar 15 if exists('b:did_indent') finish @@ -29,17 +29,19 @@ let b:did_indent = 1 setlocal indentexpr=GetLiquidIndent() setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=endif,=endunless,=endifchanged,=endcase,=endfor,=endtablerow,=endcapture,=else,=elsif,=when,=empty +let b:undo_indent = "setl inde< indk<" + " Only define the function once. if exists('*GetLiquidIndent') finish endif -function! s:count(string,pattern) +function! s:count(string, pattern) abort let string = substitute(a:string,'\C'.a:pattern,"\n",'g') return strlen(substitute(string,"[^\n]",'','g')) endfunction -function! GetLiquidIndent(...) +function! GetLiquidIndent(...) abort if a:0 && a:1 == '.' let v:lnum = line('.') elseif a:0 && a:1 =~ '^\d' @@ -51,13 +53,14 @@ function! GetLiquidIndent(...) let lnum = prevnonblank(v:lnum-1) let line = getline(lnum) let cline = getline(v:lnum) - let line = substitute(line,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','') - let line .= matchstr(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+') - let cline = substitute(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','') + let line = substitute(line,'\C^\%(\s*{%-\=\s*end\w*\s*-\=%}\)\+','','') + let line = substitute(line,'\C\%(\s*{%-\=\s*if.\+-\=%}.\+{%-\=\s*endif\s*-\=%}\)\+','','g') + let line .= matchstr(cline,'\C^\%(\s*{%-\=\s*end\w*\s*-\=%}\)\+') + let cline = substitute(cline,'\C^\%(\s*{%-\=\s*end\w*\s*-\=%}\)\+','','') let sw = shiftwidth() - let ind += sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>') - let ind -= sw * s:count(line,'{%\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>') - let ind -= sw * s:count(cline,'{%\s*\%(elsif\|else\|when\|empty\)\>') - let ind -= sw * s:count(cline,'{%\s*end\w*$') + let ind += sw * s:count(line,'{%-\=\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>') + let ind -= sw * s:count(line,'{%-\=\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>') + let ind -= sw * s:count(cline,'{%-\=\s*\%(elsif\|else\|when\|empty\)\>') + let ind -= sw * s:count(cline,'{%-\=\s*end\w*$') return ind endfunction diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim index 76c8f83399..4d1838b3aa 100644 --- a/runtime/indent/make.vim +++ b/runtime/indent/make.vim @@ -2,7 +2,7 @@ " Language: Makefile " Maintainer: Doug Kearns <dougkearns@gmail.com> " Previous Maintainer: Nikolai Weibull <now@bitwi.se> -" Last Change: 24 Sep 2021 +" Last Change: 2022 Apr 06 if exists("b:did_indent") finish @@ -13,7 +13,7 @@ setlocal indentexpr=GetMakeIndent() setlocal indentkeys=!^F,o,O,<:>,=else,=endif setlocal nosmartindent -let b:undo_indent = "setl ai< inde< indk<" +let b:undo_indent = "setl inde< indk< si<" if exists("*GetMakeIndent") finish diff --git a/runtime/indent/mma.vim b/runtime/indent/mma.vim index ebf98b9a38..9dbfd74d66 100644 --- a/runtime/indent/mma.vim +++ b/runtime/indent/mma.vim @@ -3,6 +3,7 @@ " Maintainer: Steve Layland <layland@wolfram.com> (Invalid email address) " Doug Kearns <dougkearns@gmail.com> " Last Change: Sat May 10 18:56:22 CDT 2005 +" 2022 April: b:undo_indent added by Doug Kearns " Source: http://vim.sourceforge.net/scripts/script.php?script_id=1274 " http://members.wolfram.com/layland/vim/indent/mma.vim " @@ -26,6 +27,8 @@ setlocal indentexpr=GetMmaIndent() setlocal indentkeys+=0[,0],0(,0) setlocal nosi "turn off smart indent so we don't over analyze } blocks +let b:undo_indent = "setl inde< indk< si<" + if exists("*GetMmaIndent") finish endif diff --git a/runtime/indent/nginx.vim b/runtime/indent/nginx.vim index d4afec1c11..8cef7662e0 100644 --- a/runtime/indent/nginx.vim +++ b/runtime/indent/nginx.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: nginx.conf " Maintainer: Chris Aumann <me@chr4.org> -" Last Change: Apr 15, 2017 +" Last Change: 2022 Apr 06 if exists("b:did_indent") finish @@ -15,3 +15,5 @@ setlocal cindent " Just make sure that the comments are not reset as defs would be. setlocal cinkeys-=0# + +let b:undo_indent = "setl inde< cin< cink<" diff --git a/runtime/indent/objc.vim b/runtime/indent/objc.vim index a5451a5a11..1d107050dd 100644 --- a/runtime/indent/objc.vim +++ b/runtime/indent/objc.vim @@ -1,9 +1,7 @@ " Vim indent file " Language: Objective-C " Maintainer: Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com> -" Last Change: 2004 May 16 -" - +" Last Change: 2022 Apr 06 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -19,6 +17,8 @@ setlocal indentexpr=GetObjCIndent() setlocal indentkeys-=: setlocal indentkeys+=<:> +let b:undo_indent = "setl cin< inde< indk<" + " Only define the function once. if exists("*GetObjCIndent") finish diff --git a/runtime/indent/occam.vim b/runtime/indent/occam.vim index 2979ac16ac..673940a7ec 100644 --- a/runtime/indent/occam.vim +++ b/runtime/indent/occam.vim @@ -2,7 +2,7 @@ " Language: occam " Maintainer: Mario Schweigler <ms44@kent.ac.uk> (Invalid email address) " Doug Kearns <dougkearns@gmail.com> -" Last Change: 23 April 2003 +" Last Change: 2022 Apr 06 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -17,6 +17,8 @@ setlocal indentexpr=GetOccamIndent() setlocal indentkeys=o,O,0=: "}}} +let b:undo_indent = "setl inde< indk<" + " Only define the function once if exists("*GetOccamIndent") finish diff --git a/runtime/indent/postscr.vim b/runtime/indent/postscr.vim index 0691cd237c..66094e3ed0 100644 --- a/runtime/indent/postscr.vim +++ b/runtime/indent/postscr.vim @@ -2,8 +2,8 @@ " Language: PostScript " Maintainer: Mike Williams <mrw@netcomuk.co.uk> (Invalid email address) " Doug Kearns <dougkearns@gmail.com> -" Last Change: 2nd July 2001 -" +" Last Change: 2022 Apr 06 + " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -14,6 +14,8 @@ let b:did_indent = 1 setlocal indentexpr=PostscrIndentGet(v:lnum) setlocal indentkeys+=0],0=>>,0=%%,0=end,0=restore,0=grestore indentkeys-=:,0#,e +let b:undo_indent = "setl inde< indk<" + " Catch multiple instantiations if exists("*PostscrIndentGet") finish diff --git a/runtime/indent/prolog.vim b/runtime/indent/prolog.vim index ac03c28064..0c4fd541f9 100644 --- a/runtime/indent/prolog.vim +++ b/runtime/indent/prolog.vim @@ -4,6 +4,7 @@ " Doug Kearns <dougkearns@gmail.com> " Revised on: 2002.02.18. 23:34:05 " Last change by: Takuya Fujiwara, 2018 Sep 23 +" 2022 April: b:undo_indent added by Doug Kearns " TODO: " checking with respect to syntax highlighting @@ -21,6 +22,8 @@ setlocal indentexpr=GetPrologIndent() setlocal indentkeys-=:,0# setlocal indentkeys+=0%,-,0;,>,0) +let b:undo_indent = "setl inde< indk<" + " Only define the function once. "if exists("*GetPrologIndent") " finish diff --git a/runtime/indent/qb64.vim b/runtime/indent/qb64.vim new file mode 100644 index 0000000000..09f815c43d --- /dev/null +++ b/runtime/indent/qb64.vim @@ -0,0 +1,11 @@ +" Vim indent file +" Language: QB64 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2022 Jan 24 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif + +runtime! indent/vb.vim diff --git a/runtime/indent/query.lua b/runtime/indent/query.lua new file mode 100644 index 0000000000..55cb73e62b --- /dev/null +++ b/runtime/indent/query.lua @@ -0,0 +1,6 @@ +-- Neovim indent file +-- Language: Tree-sitter query +-- Last Change: 2022 Mar 29 + +-- it's a lisp! +vim.cmd [[ runtime! indent/lisp.vim ]] diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim index 559d8652a6..6ce8529fd1 100644 --- a/runtime/indent/ruby.vim +++ b/runtime/indent/ruby.vim @@ -4,7 +4,7 @@ " Previous Maintainer: Nikolai Weibull <now at bitwi.se> " URL: https://github.com/vim-ruby/vim-ruby " Release Coordinator: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2021 Feb 03 +" Last Change: 2022 Mar 22 " 0. Initialization {{{1 " ================= @@ -40,9 +40,11 @@ setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetRubyIndent(v:lnum) setlocal indentkeys=0{,0},0),0],!^F,o,O,e,:,. -setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue,==begin,==end +setlocal indentkeys+==end,=else,=elsif,=when,=in\ ,=ensure,=rescue,==begin,==end setlocal indentkeys+==private,=protected,=public +let b:undo_indent = "setlocal indentexpr< indentkeys< smartindent<" + " Only define the function once. if exists("*GetRubyIndent") finish @@ -85,14 +87,17 @@ let s:skip_expr = " Regex used for words that, at the start of a line, add a level of indent. let s:ruby_indent_keywords = \ '^\s*\zs\<\%(module\|class\|if\|for' . - \ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue' . + \ '\|while\|until\|else\|elsif\|case\|when\|in\|unless\|begin\|ensure\|rescue' . \ '\|\%(\K\k*[!?]\?\s\+\)\=def\):\@!\>' . \ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' . \ '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>' +" Def without an end clause: def method_call(...) = <expression> +let s:ruby_endless_def = '\<def\s\+\k\+[!?]\=\%((.*)\|\s\)\s*=' + " Regex used for words that, at the start of a line, remove a level of indent. let s:ruby_deindent_keywords = - \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\):\@!\>' + \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|in\|end\):\@!\>' " Regex that defines the start-match for the 'end' keyword. "let s:end_start_regex = '\%(^\|[^.]\)\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\|do\)\>' @@ -104,15 +109,31 @@ let s:end_start_regex = \ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>' " Regex that defines the middle-match for the 'end' keyword. -let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|elsif\):\@!\>' +let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|\%(\%(^\|;\)\s*\)\@<=\<in\|elsif\):\@!\>' " Regex that defines the end-match for the 'end' keyword. let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end:\@!\>' -" Expression used for searchpair() call for finding match for 'end' keyword. -let s:end_skip_expr = s:skip_expr . - \ ' || (expand("<cword>") == "do"' . - \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\):\\@!\\>")' +" Expression used for searchpair() call for finding a match for an 'end' keyword. +function! s:EndSkipExpr() + if eval(s:skip_expr) + return 1 + elseif expand('<cword>') == 'do' + \ && getline(".") =~ '^\s*\<\(while\|until\|for\):\@!\>' + return 1 + elseif getline('.') =~ s:ruby_endless_def + return 1 + elseif getline('.') =~ '\<def\s\+\k\+[!?]\=([^)]*$' + " Then it's a `def method(` with a possible `) =` later + call search('\<def\s\+\k\+\zs(', 'W', line('.')) + normal! % + return getline('.') =~ ')\s*=' + else + return 0 + endif +endfunction + +let s:end_skip_expr = function('s:EndSkipExpr') " Regex that defines continuation lines, not including (, {, or [. let s:non_bracket_continuation_regex = @@ -572,6 +593,11 @@ function! s:AfterUnbalancedBracket(pline_info) abort call cursor(info.plnum, closing.pos + 1) normal! % + if strpart(info.pline, closing.pos) =~ '^)\s*=' + " special case: the closing `) =` of an endless def + return indent(s:GetMSL(line('.'))) + endif + if s:Match(line('.'), s:ruby_indent_keywords) return indent('.') + info.sw else @@ -610,7 +636,7 @@ function! s:AfterIndentKeyword(pline_info) abort let info = a:pline_info let col = s:Match(info.plnum, s:ruby_indent_keywords) - if col > 0 + if col > 0 && s:Match(info.plnum, s:ruby_endless_def) <= 0 call cursor(info.plnum, col) let ind = virtcol('.') - 1 + info.sw " TODO: make this better (we need to count them) (or, if a searchpair @@ -657,7 +683,7 @@ function! s:IndentingKeywordInMSL(msl_info) abort " TODO: this does not take into account contrived things such as " module Foo; class Bar; end let col = s:Match(info.plnum_msl, s:ruby_indent_keywords) - if col > 0 + if col > 0 && s:Match(info.plnum_msl, s:ruby_endless_def) <= 0 let ind = indent(info.plnum_msl) + info.sw if s:Match(info.plnum_msl, s:end_end_regex) let ind = ind - info.sw diff --git a/runtime/indent/sas.vim b/runtime/indent/sas.vim index 9cc9e025c4..bbbbbf02eb 100644 --- a/runtime/indent/sas.vim +++ b/runtime/indent/sas.vim @@ -2,7 +2,7 @@ " Language: SAS " Maintainer: Zhen-Huan Hu <wildkeny@gmail.com> " Version: 3.0.3 -" Last Change: Jun 26, 2018 +" Last Change: 2022 Apr 06 if exists("b:did_indent") finish @@ -12,6 +12,8 @@ let b:did_indent = 1 setlocal indentexpr=GetSASIndent() setlocal indentkeys+=;,=~data,=~proc,=~macro +let b:undo_indent = "setl inde< indk<" + if exists("*GetSASIndent") finish endif diff --git a/runtime/indent/sass.vim b/runtime/indent/sass.vim index d6dbf3a8bb..8c0ecd0746 100644 --- a/runtime/indent/sass.vim +++ b/runtime/indent/sass.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Sass " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2017 Jun 13 +" Last Change: 2022 Mar 15 if exists("b:did_indent") finish @@ -12,6 +12,8 @@ setlocal autoindent sw=2 et setlocal indentexpr=GetSassIndent() setlocal indentkeys=o,O,*<Return>,<:>,!^F +let b:undo_indent = "setl ai< inde< indk<" + " Only define the function once. if exists("*GetSassIndent") finish diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim index d2fb1ba452..aa47c6d1bd 100644 --- a/runtime/indent/sh.vim +++ b/runtime/indent/sh.vim @@ -109,7 +109,7 @@ function! GetShIndent() let ind += s:indent_value('continuation-line') endif elseif s:end_block(line) && !s:start_block(line) - let ind -= s:indent_value('default') + let ind = indent(lnum) elseif pnum != 0 && \ s:is_continuation_line(pline) && \ !s:end_block(curline) && diff --git a/runtime/indent/sml.vim b/runtime/indent/sml.vim index e760a8e350..a0b0c3e911 100644 --- a/runtime/indent/sml.vim +++ b/runtime/indent/sml.vim @@ -7,10 +7,11 @@ " Mike Leary <leary@nwlink.com> " Markus Mottl <markus@oefai.at> " OCaml URL: http://www.oefai.at/~markus/vim/indent/ocaml.vim -" Last Change: 2003 Jan 04 - Adapted to SML +" Last Change: 2022 Apr 06 " 2002 Nov 06 - Some fixes (JY) " 2002 Oct 28 - Fixed bug with indentation of ']' (MM) " 2002 Oct 22 - Major rewrite (JY) +" 2022 April: b:undo_indent added by Doug Kearns " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -26,6 +27,8 @@ setlocal nosmartindent setlocal textwidth=80 setlocal shiftwidth=2 +let b:undo_indent = "setl et< inde< indk< lisp< si< sw< tw<" + " Comment formatting if (has("comments")) set comments=sr:(*,mb:*,ex:*) diff --git a/runtime/indent/systemverilog.vim b/runtime/indent/systemverilog.vim index 16fb4515c5..f6114dc1fd 100644 --- a/runtime/indent/systemverilog.vim +++ b/runtime/indent/systemverilog.vim @@ -2,6 +2,7 @@ " Language: SystemVerilog " Maintainer: kocha <kocha.lsifrontend@gmail.com> " Last Change: 05-Feb-2017 by Bilal Wasim +" 2022 April: b:undo_indent added by Doug Kearns " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -16,6 +17,8 @@ setlocal indentkeys+==endclass,=endpackage,=endsequence,=endclocking setlocal indentkeys+==endinterface,=endgroup,=endprogram,=endproperty,=endchecker setlocal indentkeys+==`else,=`endif +let b:undo_indent = "setl inde< indk<" + " Only define the function once. if exists("*SystemVerilogIndent") finish diff --git a/runtime/indent/testdir/html.in b/runtime/indent/testdir/html.in index 1acf8c0402..b62c67ddb2 100644 --- a/runtime/indent/testdir/html.in +++ b/runtime/indent/testdir/html.in @@ -1,4 +1,4 @@ -" vim: set ft=html sw=4 : +" vim: set ft=html sw=4 ts=8 : " START_INDENT @@ -41,6 +41,11 @@ dd text dt text </dt> </dl> +<div +class="test" +style="color: yellow"> +text +</div> </body> </html> @@ -50,6 +55,7 @@ dt text % START_INDENT % INDENT_EXE let g:html_indent_style1 = "inc" % INDENT_EXE let g:html_indent_script1 = "zero" +% INDENT_EXE let g:html_indent_attribute = 1 % INDENT_EXE call HtmlIndent_CheckUserSettings() <html> <body> @@ -61,6 +67,11 @@ div#d2 { color: green; } var v1 = "v1"; var v2 = "v2"; </script> +<div +class="test" +style="color: yellow"> +text +</div> </body> </html> % END_INDENT diff --git a/runtime/indent/testdir/html.ok b/runtime/indent/testdir/html.ok index c0dfc9dc72..938e965d8c 100644 --- a/runtime/indent/testdir/html.ok +++ b/runtime/indent/testdir/html.ok @@ -1,4 +1,4 @@ -" vim: set ft=html sw=4 : +" vim: set ft=html sw=4 ts=8 : " START_INDENT @@ -41,6 +41,11 @@ div#d2 { color: green; } dt text </dt> </dl> + <div + class="test" + style="color: yellow"> + text + </div> </body> </html> @@ -50,6 +55,7 @@ div#d2 { color: green; } % START_INDENT % INDENT_EXE let g:html_indent_style1 = "inc" % INDENT_EXE let g:html_indent_script1 = "zero" +% INDENT_EXE let g:html_indent_attribute = 1 % INDENT_EXE call HtmlIndent_CheckUserSettings() <html> <body> @@ -61,6 +67,11 @@ div#d2 { color: green; } var v1 = "v1"; var v2 = "v2"; </script> + <div + class="test" + style="color: yellow"> + text + </div> </body> </html> % END_INDENT diff --git a/runtime/indent/vim.vim b/runtime/indent/vim.vim index a98c75e541..cd2d4982d8 100644 --- a/runtime/indent/vim.vim +++ b/runtime/indent/vim.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Vim script " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2021 Nov 03 +" Last Change: 2022 Mar 01 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -10,8 +10,9 @@ endif let b:did_indent = 1 setlocal indentexpr=GetVimIndent() -setlocal indentkeys+==end,=},=else,=cat,=finall,=END,0\\,0=\"\\\ +setlocal indentkeys+==endif,=enddef,=endfu,=endfor,=endwh,=endtry,=},=else,=cat,=finall,=END,0\\,0=\"\\\ setlocal indentkeys-=0# +setlocal indentkeys-=: let b:undo_indent = "setl indentkeys< indentexpr<" @@ -102,10 +103,11 @@ function GetVimIndentIntern() " A line starting with :au does not increment/decrement indent. " A { may start a block or a dict. Assume that when a } follows it's a " terminated dict. + " ":function" starts a block but "function(" doesn't. if prev_text !~ '^\s*au\%[tocmd]' && prev_text !~ '^\s*{.*}' - let i = match(prev_text, '\(^\||\)\s*\(export\s\+\)\?\({\|\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\|finall\%[y]\|fu\%[nction]\|def\|el\%[seif]\)\>\)') + let i = match(prev_text, '\(^\||\)\s*\(export\s\+\)\?\({\|\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\|finall\%[y]\|def\|el\%[seif]\)\>\|fu\%[nction][! ]\)') if i >= 0 - let ind += shiftwidth() + let ind += shiftwidth() if strpart(prev_text, i, 1) == '|' && has('syntax_items') \ && synIDattr(synID(lnum, i, 1), "name") =~ '\(Comment\|String\|PatSep\)$' let ind -= shiftwidth() @@ -169,10 +171,15 @@ function GetVimIndentIntern() let ind = ind + shiftwidth() endif - " Subtract a 'shiftwidth' on a :endif, :endwhile, :catch, :finally, :endtry, - " :endfun, :else and :augroup END. - if cur_text =~ '^\s*\(ene\@!\|cat\|finall\|el\|aug\%[roup]\s\+[eE][nN][dD]\)' + " Subtract a 'shiftwidth' on a :endif, :endwhile, :endfor, :catch, :finally, + " :endtry, :endfun, :enddef, :else and :augroup END. + " Although ":en" would be enough only match short command names as in + " 'indentkeys'. + if cur_text =~ '^\s*\(endif\|endwh\|endfor\|endtry\|endfu\|enddef\|cat\|finall\|else\|aug\%[roup]\s\+[eE][nN][dD]\)' let ind = ind - shiftwidth() + if ind < 0 + let ind = 0 + endif endif return ind diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim index da65417939..5bf53ad1f8 100644 --- a/runtime/indent/xml.vim +++ b/runtime/indent/xml.vim @@ -39,6 +39,8 @@ setlocal indentkeys=o,O,*<Return>,<>>,<<>,/,{,},!^F " autoindent: used when the indentexpr returns -1 setlocal autoindent +let b:undo_indent = "setl ai< inde< indk<" + if !exists('b:xml_indent_open') let b:xml_indent_open = '.\{-}<[:A-Z_a-z]' " pre tag, e.g. <address> @@ -51,6 +53,10 @@ if !exists('b:xml_indent_close') " let b:xml_indent_close = '.\{-}</\(address\)\@!' endif +if !exists('b:xml_indent_continuation_filetype') + let b:xml_indent_continuation_filetype = 'xml' +endif + let &cpo = s:keepcpo unlet s:keepcpo @@ -162,7 +168,7 @@ endfun func! <SID>IsXMLContinuation(line) " Checks, whether or not the line matches a start-of-tag - return a:line !~ '^\s*<' && &ft is# 'xml' + return a:line !~ '^\s*<' && &ft =~# b:xml_indent_continuation_filetype endfunc func! <SID>HasNoTagEnd(line) |