2015-10-28 2:52 GMT+03:00 sycc <[email protected]>: > 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.
*Don’t* use b:current_syntax name. It has special meaning, see :h b:current_syntax-variable. Specifically after `set syntax=whitespace` it must be set to `whitespace`. You need to use buffer variable which has no special meaning. > > 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? > > Thank you all for your help!! > > -- Sycc > > -- > -- > 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. -- -- 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.
