Thursday, October 29, 2015

Re: Switching syntax highlighting

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

No comments: