Check out this URL:

https://vim.fandom.com/wiki/Different_syntax_highlighting_within_regions_of_a_file

My overarching goal is to be able to write a shell script (bash) with embedded 
code in other languages (Perl, AWK, sed, Python, Expect, whatever) and have the 
main script syntax highlighted as shell (of course), but have the regions 
containing code in other languages highlighted in those other languages.

Specifically, right now, I am working on a shell script with embedded Expect.  
Something like

expect -c '
# Expect script here
'

At the above link, there is a solution that sort of works.  It's really quite 
frustrating, because it will work one minute then not the next and so on.  I 
can't find any rhyme or reason to it.

So, if anyone wants to check it out and see what's wrong with it (note, BTW, 
that the comments section there indicate the same sort of frustration as I'm 
seeing - people complaining that it works, then it doesn't and so on), that'd 
be great.  Also, please suggest alternatives.  Thanks.

Here is the function they provide at the URL:

" Found at:
" 
https://vim.fandom.com/wiki/Different_syntax_highlighting_within_regions_of_a_file
function! TextEnableCodeSnip(filetype,start,end,textSnipHl) abort
  let ft=toupper(a:filetype)
  let group='textGroup'.ft
  if exists('b:current_syntax')
    let s:current_syntax=b:current_syntax
    " Remove current syntax definition, as some syntax files (e.g. cpp.vim)
    " do nothing if b:current_syntax is defined.
    unlet b:current_syntax
  endif
  execute 'syntax include @'.group.' syntax/'.a:filetype.'.vim'
  try
    execute 'syntax include @'.group.' after/syntax/'.a:filetype.'.vim'
  catch
  endtry
  if exists('s:current_syntax')
    let b:current_syntax=s:current_syntax
  else
    unlet b:current_syntax
  endif
  execute 'syntax region textSnip'.ft.'
  \ matchgroup='.a:textSnipHl.'
  \ keepend
  \ start="'.a:start.'" end="'.a:end.'"
  \ contains=@'.group
endfunction

After sourcing the above file, I do:

call 
TextEnableCodeSnip('expect','@begin=expect@','@end=expect@','SpecialComment')

Then I start typing (starting with the @begin...@ thing) and sometimes it 
works, sometimes it doesn't.

Also, the original instructions at the URL, have a line in there about :hi link
which I can't tell what it is there for or if it is needed.  Sometimes, it 
works without it, sometimes not.

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/1689131849.206325.1617998848033%40mail.yahoo.com.

Reply via email to