From 52f2ece16fa3c7ca2a100620af9aa778cebcc961 Mon Sep 17 00:00:00 2001 From: Andrew Haust Date: Tue, 9 Dec 2025 00:17:52 -0500 Subject: [PATCH 1/3] Add Hologram support * ~HOLO sigil * Event bindings ($click, $blur, etc) * Interpolation delimiters --- syntax/elixir.vim | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/syntax/elixir.vim b/syntax/elixir.vim index 01660e7..b6629a4 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -120,7 +120,7 @@ syntax region elixirLiveViewSigil matchgroup=elixirSigilDelimiter keepend start= syntax region elixirPhoenixESigil matchgroup=elixirSigilDelimiter keepend start=+\~E\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold syntax region elixirPhoenixeSigil matchgroup=elixirSigilDelimiter keepend start=+\~e\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold -syn cluster elixirTemplateSigils contains=elixirLiveViewSigil,elixirHeexSigil,elixirSurfaceSigil,elixirPhoenixESigil,elixirPhoenixeSigil +syn cluster elixirTemplateSigils contains=elixirLiveViewSigil,elixirHeexSigil,elixirSurfaceSigil,elixirPhoenixESigil,elixirPhoenixeSigil,elixirHologramSigil syn region heexComponent matchgroup=eelixirDelimiter start="<\.[a-z_]\+" end="%\@" contains=ALLBUT,@elixirNotTop keepend syn region eelixirExpression matchgroup=eelixirDelimiter start="<%" end="%\@" contains=ALLBUT,@elixirNotTop containedin=@elixirTemplateSigils keepend @@ -138,12 +138,20 @@ syn match heexSpecialAttribute ":\%(if\|for\|let\)\ze=" containedin=htmlTag syn match heexComponentName "<\zs\.[A-Z_a-z][A-Z_a-z0-9]\+" containedin=htmlTag syn match heexEndComponent "<\zs\/\.[A-Z_a-z][A-Z_a-z0-9]\+" containedin=htmlEndTag +" Hologram +syn region elixirHologramSigil matchgroup=elixirSigilDelimiter keepend start=+\~HOLO\=\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold +syn region elixirHologramBlockOpen matchgroup=heexDelimiter start="\zs{%\(for\|if\|raw\)" end="}" skip="%{[^}]*}" contains=ALLBUT,@elixirNotTop containedin=@elixirTemplateSigils keepend +syn region elixirHologramBlockClose matchgroup=heexDelimiter start="\zs{/\(for\|if\|raw\)" end="}" skip="%{[^}]*}" containedin=@elixirTemplateSigils keepend +syn region elixirHolgramInterpolation matchgroup=heexDelimiter start="\zs{[%/]\@!" end="}" skip="%{[^}]*}" contains=ALLBUT,elixirComment,@elixirNotTop containedin=elixirHologramSigil,htmlString +syn match elixirHologramEventBinding "$\%(blur\|change\|click\|focus\|mouse_move\|pointer_cancel\|pointer_down\|pointer_move\|pointer_up\|select\|submit\|transition_\(cancel\|end\|run\|start\)transition_start\)\ze=" containedin=htmlTag + hi def link eelixirDelimiter PreProc hi def link heexDelimiter PreProc hi def link heexComment Comment hi def link phxArg htmlArg hi def link heexArg htmlArg hi def link heexSpecialAttribute htmlArg +hi def link elixirHologramEventBinding Keyword hi def link heexComponentName htmlTagName hi def link heexEndComponent htmlTagName From c9d7fcbb83b042ab656d4ac14862efb524faf6a8 Mon Sep 17 00:00:00 2001 From: Andrew Haust Date: Sat, 21 Mar 2026 12:46:08 -0400 Subject: [PATCH 2/3] Fix HEEx expression highlighting --- syntax/elixir.vim | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/syntax/elixir.vim b/syntax/elixir.vim index b6629a4..a03fb6b 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -127,10 +127,8 @@ syn region eelixirExpression matchgroup=eelixirDelimiter start="<%" end="%\@" contains=ALLBUT,@elixirNotTop containedin=@elixirTemplateSigils keepend syn region eelixirQuote matchgroup=eelixirDelimiter start="<%%" end="%\@" contains=ALLBUT,@elixirNotTop containedin=@elixirTemplateSigils keepend syn region heexComment matchgroup=eelixirDelimiter start="<%!--" end="%\@