# http://haml.info # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ # Detection # ‾‾‾‾‾‾‾‾‾ hook global BufCreate .*[.](haml) %{ set-option buffer filetype haml } # Highlighters # ‾‾‾‾‾‾‾‾‾‾‾‾ add-highlighter shared/ regions -default code haml \ comment ^\h*/ $ '' \ eval ^\h*%([A-Za-z][A-Za-z0-9_-]*)([#.][A-Za-z][A-Za-z0-9_-]*)?\{\K|#\{\K (?=\}) \{ \ eval ^\h*[=-]\K (? s \h+$ d } } define-command -hidden haml-indent-on-new-line %{ evaluate-commands -draft -itersel %{ # copy '/' comment prefix and following white spaces try %{ execute-keys -draft k s ^\h*\K/\h* y gh j P } # preserve previous line indent try %{ execute-keys -draft \; K } # filter previous line try %{ execute-keys -draft k : haml-filter-around-selections } # indent after lines beginning with : or - try %{ execute-keys -draft k ^\h*[:-] j } } } # Initialization # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ hook -group haml-highlight global WinSetOption filetype=haml %{ add-highlighter window ref haml } hook global WinSetOption filetype=haml %{ hook window ModeChange insert:.* -group haml-hooks haml-filter-around-selections hook window InsertChar \n -group haml-indent haml-indent-on-new-line } hook -group haml-highlight global WinSetOption filetype=(?!haml).* %{ remove-highlighter window/haml } hook global WinSetOption filetype=(?!haml).* %{ remove-hooks window haml-indent remove-hooks window haml-hooks }