# 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 ) ref scss
add-highlighter shared/vue/sass region ) ref sass
add-highlighter shared/vue/less region ) ref less
add-highlighter shared/vue/css region ) ref css
add-highlighter shared/vue/ts region ) ref ts
add-highlighter shared/vue/js region ) 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
}