# Vue file # ‾‾‾‾‾‾‾‾ # Detection # ‾‾‾‾‾‾‾‾‾ hook global BufCreate .*\.vue %{ set-option buffer filetype vue } # Highlighters # ‾‾‾‾‾‾‾‾‾‾‾‾ add-highlighter shared/vue regions add-highlighter shared/vue/tag region < > regions add-highlighter shared/vue/pug region \K (?=) ref pug add-highlighter shared/vue/html region \K (?=) ref html add-highlighter shared/vue/scss region \K (?=) ref scss add-highlighter shared/vue/sass region \K (?=) ref sass add-highlighter shared/vue/less region \K (?=) ref less add-highlighter shared/vue/css region \K (?=) ref css add-highlighter shared/vue/ts region \K (?=) ref ts add-highlighter shared/vue/js region \K (?=) ref javascript add-highlighter shared/vue/tag/base default-region group add-highlighter shared/vue/tag/ region '"' (? s \h+$ d } } define-command -hidden vue-indent-on-greater-than %[ evaluate-commands -draft -itersel %[ # align closing tag to opening when alone on a line try %[ execute-keys -draft s ^\h+/(\w+)$ {c1,/1 s \A|.\z 1 ] ] ] define-command -hidden vue-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 : vue-filter-around-selections } # indent after lines ending with opening tag try %{ execute-keys -draft k <[^/][^>]+>$ j } } } # Initialization # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ hook -group vue-highlight global WinSetOption filetype=vue %{ add-highlighter window/vue ref vue } hook global WinSetOption filetype=vue %{ hook window ModeChange insert:.* -group vue-hooks vue-filter-around-selections hook window InsertChar '>' -group vue-indent vue-indent-on-greater-than hook window InsertChar \n -group vue-indent vue-indent-on-new-line set window comment_line '//' set window comment_block_begin '' } hook -group vue-highlight global WinSetOption filetype=(?!vue).* %{ remove-highlighter window/vue } hook global WinSetOption filetype=(?!vue).* %{ remove-hooks window vue-indent remove-hooks window vue-hooks }