__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
" Vim indent file
" Language: JSONC (JSON with Comments)
" Original Author: Izhak Jakov <izhak724@gmail.com>
" Acknowledgement: Based off of vim-json maintained by Eli Parra <eli@elzr.com>
" https://github.com/elzr/vim-json
" Last Change: 2021-07-01
" 2023 Aug 28 by Vim Project (undo_indent)
" 0. Initialization {{{1
" =================
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal nosmartindent
" Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetJSONCIndent()
setlocal indentkeys=0{,0},0),0[,0],!^F,o,O,e
let b:undo_indent = "setlocal indentexpr< indentkeys< smartindent<"
" Only define the function once.
if exists("*GetJSONCIndent")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
" 1. Variables {{{1
" ============
let s:line_term = '\s*\%(\%(\/\/\).*\)\=$'
" Regex that defines blocks.
let s:block_regex = '\%({\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
" 2. Auxiliary Functions {{{1
" ======================
" Check if the character at lnum:col is inside a string.
function s:IsInString(lnum, col)
return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'jsonString'
endfunction
" Find line above 'lnum' that isn't empty, or in a string.
function s:PrevNonBlankNonString(lnum)
let lnum = prevnonblank(a:lnum)
while lnum > 0
" If the line isn't empty or in a string, end search.
let line = getline(lnum)
if !(s:IsInString(lnum, 1) && s:IsInString(lnum, strlen(line)))
break
endif
let lnum = prevnonblank(lnum - 1)
endwhile
return lnum
endfunction
" Check if line 'lnum' has more opening brackets than closing ones.
function s:LineHasOpeningBrackets(lnum)
let open_0 = 0
let open_2 = 0
let open_4 = 0
let line = getline(a:lnum)
let pos = match(line, '[][(){}]', 0)
while pos != -1
let idx = stridx('(){}[]', line[pos])
if idx % 2 == 0
let open_{idx} = open_{idx} + 1
else
let open_{idx - 1} = open_{idx - 1} - 1
endif
let pos = match(line, '[][(){}]', pos + 1)
endwhile
return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
endfunction
function s:Match(lnum, regex)
let col = match(getline(a:lnum), a:regex) + 1
return col > 0 && !s:IsInString(a:lnum, col) ? col : 0
endfunction
" 3. GetJSONCIndent Function {{{1
" =========================
function GetJSONCIndent()
if !exists("s:inside_comment")
let s:inside_comment = 0
endif
" 3.1. Setup {{{2
" ----------
" Set up variables for restoring position in file. Could use v:lnum here.
let vcol = col('.')
" 3.2. Work on the current line {{{2
" -----------------------------
" Get the current line.
let line = getline(v:lnum)
let ind = -1
if s:inside_comment == 0
" TODO iterate through all the matches in a line
let col = matchend(line, '\/\*')
if col > 0 && !s:IsInString(v:lnum, col)
let s:inside_comment = 1
endif
endif
" If we're in the middle of a comment
if s:inside_comment == 1
let col = matchend(line, '\*\/')
if col > 0 && !s:IsInString(v:lnum, col)
let s:inside_comment = 0
endif
return ind
endif
if line =~ '^\s*//'
return ind
endif
" If we got a closing bracket on an empty line, find its match and indent
" according to it.
let col = matchend(line, '^\s*[]}]')
if col > 0 && !s:IsInString(v:lnum, col)
call cursor(v:lnum, col)
let bs = strpart('{}[]', stridx('}]', line[col - 1]) * 2, 2)
let pairstart = escape(bs[0], '[')
let pairend = escape(bs[1], ']')
let pairline = searchpair(pairstart, '', pairend, 'bW')
if pairline > 0
let ind = indent(pairline)
else
let ind = virtcol('.') - 1
endif
return ind
endif
" If we are in a multi-line string, don't do anything to it.
if s:IsInString(v:lnum, matchend(line, '^\s*') + 1)
return indent('.')
endif
" 3.3. Work on the previous line. {{{2
" -------------------------------
let lnum = prevnonblank(v:lnum - 1)
if lnum == 0
return 0
endif
" Set up variables for current line.
let line = getline(lnum)
let ind = indent(lnum)
" If the previous line ended with a block opening, add a level of indent.
" if s:Match(lnum, s:block_regex)
" return indent(lnum) + shiftwidth()
" endif
" If the previous line contained an opening bracket, and we are still in it,
" add indent depending on the bracket type.
if line =~ '[[({]'
let counts = s:LineHasOpeningBrackets(lnum)
if counts[0] == '1' || counts[1] == '1' || counts[2] == '1'
return ind + shiftwidth()
else
call cursor(v:lnum, vcol)
end
endif
" }}}2
return ind
endfunction
" }}}1
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:set sw=2 sts=2 ts=8 noet:
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| aap.vim | File | 331 B | 0644 |
|
| ada.vim | File | 11.06 KB | 0644 |
|
| ant.vim | File | 290 B | 0644 |
|
| automake.vim | File | 243 B | 0644 |
|
| awk.vim | File | 7.68 KB | 0644 |
|
| bash.vim | File | 390 B | 0644 |
|
| basic.vim | File | 250 B | 0644 |
|
| bib.vim | File | 346 B | 0644 |
|
| bitbake.vim | File | 583 B | 0644 |
|
| bst.vim | File | 1.86 KB | 0644 |
|
| bzl.vim | File | 2.86 KB | 0644 |
|
| c.vim | File | 391 B | 0644 |
|
| cdl.vim | File | 4.26 KB | 0644 |
|
| ch.vim | File | 556 B | 0644 |
|
| chaiscript.vim | File | 1.18 KB | 0644 |
|
| changelog.vim | File | 264 B | 0644 |
|
| chatito.vim | File | 731 B | 0644 |
|
| clojure.vim | File | 11.29 KB | 0644 |
|
| cmake.vim | File | 2.98 KB | 0644 |
|
| cobol.vim | File | 8.63 KB | 0644 |
|
| config.vim | File | 2.17 KB | 0644 |
|
| context.vim | File | 1.67 KB | 0644 |
|
| cpp.vim | File | 395 B | 0644 |
|
| cs.vim | File | 1.88 KB | 0644 |
|
| css.vim | File | 1.77 KB | 0644 |
|
| cucumber.vim | File | 2.74 KB | 0644 |
|
| cuda.vim | File | 371 B | 0644 |
|
| d.vim | File | 605 B | 0644 |
|
| dictconf.vim | File | 411 B | 0644 |
|
| dictdconf.vim | File | 414 B | 0644 |
|
| docbk.vim | File | 336 B | 0644 |
|
| dosbatch.vim | File | 1.35 KB | 0644 |
|
| dtd.vim | File | 11.79 KB | 0644 |
|
| dtrace.vim | File | 451 B | 0644 |
|
| dts.vim | File | 1.69 KB | 0644 |
|
| dune.vim | File | 430 B | 0644 |
|
| dylan.vim | File | 2.75 KB | 0644 |
|
| eiffel.vim | File | 3.24 KB | 0644 |
|
| elm.vim | File | 3.2 KB | 0644 |
|
| erlang.vim | File | 50.74 KB | 0644 |
|
| eruby.vim | File | 2.95 KB | 0644 |
|
| eterm.vim | File | 743 B | 0644 |
|
| expect.vim | File | 207 B | 0644 |
|
| falcon.vim | File | 13.84 KB | 0644 |
|
| fennel.vim | File | 273 B | 0644 |
|
| fish.vim | File | 2.66 KB | 0644 |
|
| fortran.vim | File | 7.72 KB | 0644 |
|
| framescript.vim | File | 891 B | 0644 |
|
| freebasic.vim | File | 237 B | 0644 |
|
| gdscript.vim | File | 4.26 KB | 0644 |
|
| gitconfig.vim | File | 841 B | 0644 |
|
| gitolite.vim | File | 1.29 KB | 0644 |
|
| go.vim | File | 1.73 KB | 0644 |
|
| gyp.vim | File | 169 B | 0644 |
|
| haml.vim | File | 2.19 KB | 0644 |
|
| hamster.vim | File | 1.65 KB | 0644 |
|
| hare.vim | File | 4.38 KB | 0644 |
|
| hog.vim | File | 1.85 KB | 0644 |
|
| html.vim | File | 33.12 KB | 0644 |
|
| htmldjango.vim | File | 273 B | 0644 |
|
| idlang.vim | File | 1.68 KB | 0644 |
|
| ishd.vim | File | 1.83 KB | 0644 |
|
| j.vim | File | 1.77 KB | 0644 |
|
| java.vim | File | 4.19 KB | 0644 |
|
| javascript.vim | File | 15.13 KB | 0644 |
|
| javascriptreact.vim | File | 109 B | 0644 |
|
| json.vim | File | 4.54 KB | 0644 |
|
| jsonc.vim | File | 4.74 KB | 0644 |
|
| jsp.vim | File | 462 B | 0644 |
|
| julia.vim | File | 15.29 KB | 0644 |
|
| kotlin.vim | File | 1.53 KB | 0644 |
|
| krl.vim | File | 4.25 KB | 0644 |
|
| ld.vim | File | 1.82 KB | 0644 |
|
| less.vim | File | 243 B | 0644 |
|
| lifelines.vim | File | 638 B | 0644 |
|
| liquid.vim | File | 2.03 KB | 0644 |
|
| lisp.vim | File | 349 B | 0644 |
|
| livebook.vim | File | 206 B | 0644 |
|
| logtalk.vim | File | 1.91 KB | 0644 |
|
| lua.vim | File | 2.22 KB | 0644 |
|
| luau.vim | File | 252 B | 0644 |
|
| mail.vim | File | 385 B | 0644 |
|
| make.vim | File | 3.48 KB | 0644 |
|
| matlab.vim | File | 4.81 KB | 0644 |
|
| meson.vim | File | 5.19 KB | 0644 |
|
| mf.vim | File | 164 B | 0644 |
|
| mma.vim | File | 2.31 KB | 0644 |
|
| mp.vim | File | 9.72 KB | 0644 |
|
| nginx.vim | File | 1.7 KB | 0644 |
|
| nsis.vim | File | 3.23 KB | 0644 |
|
| objc.vim | File | 1.65 KB | 0644 |
|
| obse.vim | File | 1.4 KB | 0644 |
|
| ocaml.vim | File | 9.09 KB | 0644 |
|
| occam.vim | File | 4.63 KB | 0644 |
|
| pascal.vim | File | 5.66 KB | 0644 |
|
| perl.vim | File | 5.91 KB | 0644 |
|
| php.vim | File | 25.76 KB | 0644 |
|
| postscr.vim | File | 1.64 KB | 0644 |
|
| pov.vim | File | 2.71 KB | 0644 |
|
| prolog.vim | File | 1.91 KB | 0644 |
|
| ps1.vim | File | 410 B | 0644 |
|
| pyrex.vim | File | 326 B | 0644 |
|
| python.vim | File | 886 B | 0644 |
|
| qb64.vim | File | 232 B | 0644 |
|
| qml.vim | File | 1.27 KB | 0644 |
|
| quarto.vim | File | 23 B | 0644 |
|
| r.vim | File | 13.96 KB | 0644 |
|
| racket.vim | File | 2.87 KB | 0644 |
|
| raku.vim | File | 3.45 KB | 0644 |
|
| raml.vim | File | 285 B | 0644 |
|
| rapid.vim | File | 7.97 KB | 0644 |
|
| readline.vim | File | 786 B | 0644 |
|
| rhelp.vim | File | 2.83 KB | 0644 |
|
| rmd.vim | File | 2.25 KB | 0644 |
|
| rnoweb.vim | File | 1.1 KB | 0644 |
|
| rpl.vim | File | 1.82 KB | 0644 |
|
| rrst.vim | File | 1.19 KB | 0644 |
|
| rst.vim | File | 1.9 KB | 0644 |
|
| ruby.vim | File | 30.33 KB | 0644 |
|
| rust.vim | File | 10.26 KB | 0644 |
|
| sas.vim | File | 5.18 KB | 0644 |
|
| sass.vim | File | 926 B | 0644 |
|
| scala.vim | File | 19.3 KB | 0644 |
|
| scheme.vim | File | 372 B | 0644 |
|
| scss.vim | File | 191 B | 0644 |
|
| sdl.vim | File | 2.76 KB | 0644 |
|
| sh.vim | File | 9.04 KB | 0644 |
|
| sml.vim | File | 6.42 KB | 0644 |
|
| solidity.vim | File | 12.61 KB | 0644 |
|
| sql.vim | File | 1.18 KB | 0644 |
|
| sqlanywhere.vim | File | 12.96 KB | 0644 |
|
| sshconfig.vim | File | 796 B | 0644 |
|
| systemverilog.vim | File | 10.55 KB | 0644 |
|
| tcl.vim | File | 2.48 KB | 0644 |
|
| tcsh.vim | File | 1.35 KB | 0644 |
|
| teraterm.vim | File | 1.38 KB | 0644 |
|
| tex.vim | File | 13.52 KB | 0644 |
|
| tf.vim | File | 1.57 KB | 0644 |
|
| tilde.vim | File | 1.11 KB | 0644 |
|
| treetop.vim | File | 785 B | 0644 |
|
| typescript.vim | File | 14.28 KB | 0644 |
|
| typescriptreact.vim | File | 109 B | 0644 |
|
| vb.vim | File | 4.69 KB | 0644 |
|
| verilog.vim | File | 8.08 KB | 0644 |
|
| vhdl.vim | File | 14.43 KB | 0644 |
|
| vim.vim | File | 675 B | 0644 |
|
| vroom.vim | File | 379 B | 0644 |
|
| vue.vim | File | 385 B | 0644 |
|
| wat.vim | File | 458 B | 0644 |
|
| xf86conf.vim | File | 786 B | 0644 |
|
| xhtml.vim | File | 325 B | 0644 |
|
| xinetd.vim | File | 1.28 KB | 0644 |
|
| xml.vim | File | 7.6 KB | 0644 |
|
| xsd.vim | File | 253 B | 0644 |
|
| xslt.vim | File | 297 B | 0644 |
|
| yacc.vim | File | 858 B | 0644 |
|
| yaml.vim | File | 5.45 KB | 0644 |
|
| zig.vim | File | 2.09 KB | 0644 |
|
| zimbu.vim | File | 3.92 KB | 0644 |
|
| zsh.vim | File | 411 B | 0644 |
|