# http://json.org # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ # Detection # ‾‾‾‾‾‾‾‾‾ hook global BufCreate .*[.](json) %{ set-option buffer filetype json } # Highlighters # ‾‾‾‾‾‾‾‾‾‾‾‾ add-highlighter shared/ regions -default code json \ string '"' (? s \h+$ d } } define-command -hidden json-indent-on-char %< evaluate-commands -draft -itersel %< # align closer token to its opener when alone on a line try %< execute-keys -draft ^\h+[]}]$ m s \A|.\z 1 > > > define-command -hidden json-indent-on-new-line %< evaluate-commands -draft -itersel %< # preserve previous line indent try %{ execute-keys -draft \; K } # filter previous line try %{ execute-keys -draft k : json-filter-around-selections } # indent after lines beginning with opener token try %< execute-keys -draft k ^\h*[[{] j > > > # Initialization # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ hook -group json-highlight global WinSetOption filetype=json %{ add-highlighter window ref json } hook global WinSetOption filetype=json %{ hook window InsertEnd .* -group json-hooks json-filter-around-selections hook window InsertChar .* -group json-indent json-indent-on-char hook window InsertChar \n -group json-indent json-indent-on-new-line } hook -group json-highlight global WinSetOption filetype=(?!json).* %{ remove-highlighter window/json } hook global WinSetOption filetype=(?!json).* %{ remove-hooks window json-indent remove-hooks window json-hooks }