Thursday, October 29, 2015

Re: Switching syntax highlighting

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 vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: