Nice, thanks a lot!
Since I'm so new to all this I'm going to have to go through that script (as short as it may be) until I fully understand it... but I'm not complaining. Not to mention I didn't know I could set different syntaxes for the same buffer, that might really come in handy in the future.

Once again, thanks!

-- Sycc


On 10/29/2015 11:00 AM, Charles E Campbell wrote:
sycc wrote:
Hello all!
I'm trying to write a function for switching between the current
buffer syntax highlighting and whitespace, but I'm really new to vim
scripting and such and am having a hard time.
I switch to whitespace syntax highlighting and back quite frequently.
However, it's not as simple as switching back to the buffer's filetype
syntax because there are times when I've changed it to something else.
For instance, data in .txt files that I visualize with different
syntax highlighting formats depending on the situation.

What I've tried is creating a buffer variable on buffer creation and
then updating it, this is what I have so far:

au BufEnter * let b:current_syntax=&syntax
fu! SwitchHLwhitespace()
     if &syntax == "whitespace"
         let &syntax=b:current_syntax
     else
         let tmp=&syntax
         set syntax=whitespace
         let b:current_syntax=tmp
     endif
endfunction

This works pretty well until I open a second buffer, either with
split, newtab or whatever.
Now onto the questions...
1) If I don't use the tmp variable, somewhere inside the "set syntax"
routine the buffer var b:current_syntax disappears. I'm not entirely
sure why this happens, is it normal? For instance, right after opening
a file I can do "echo b:current_syntax" and get the correct output,
then I call my function and then once again the echo command and now
it fails with 'Undefined variable'. Why is this?
2) When opening a second buffer (lets name the A and B), if I call
this on A and switch it to whitespace, then B and switch it as well,
then back to A I can no longer go back, the buffer var has changed to
"whitespace" and no longer contains the stored syntax highlighting.

Now, I'm pretty sure I'm missing something important here... given
that I'm pretty new to vim scripting and such. I was under the
impression that b: variables were local to buffers, so I thought I
could create one per opened buffer and this would work, does it not
behave like this?
In addition to other's comments about the use of b:current_syntax, you
should use ownsyntax (see :help :ownsyntax).  I've attached a small
plugin which does this.

Regards,
Chip Campbell


--
--
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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to