On Sun, 18 Sep 2011, Spiros Bousbouras wrote:
On Sep 17, 10:25 pm, "Benjamin R. Haskell" wrote:
On Sat, 17 Sep 2011, Spiros Bousbouras wrote:
If you define a syntax for a buffer , move away and then return is
the syntax remembered or do all the syntax commands have to be
executed again? Some tests I did indicate it's the latter.
It should be the former.
Specifically (with simplifications) my .vimrc (on Linux) has
autocmd BufReadPost,BufNewFile *.myfile source ~/myfile.vim
and file ~/myfile.vim has
if exists("b:myfile")
finish
endif
let b:myfile = 1
syntax match special /special/
highlight special term=bold cterm=bold
Either the simplifications have eliminated something important
(though I don't know what) or something else on your system is
interfering. The way you've set it up isn't the way a typical
filetype-related plugin should be laid out (see: :help new-filetype
). The way you've coded it will work, but it will get messy,
quickly, if you want to add multiple filetypes.
I did read :help new-filetype and I thought that the method
mentioned there is too complicated that's why I didn't follow it. It
seems much simpler to me to have different file types be recognised by
extension and then load syntax and anything else I want by sourcing an
appropriate script. Works well enough up to now but I only have 3-4
different file types.
The problem is that the filetype is being detected again every time you
switch buffers. Apparently Debian (like most distros) has a bunch of
auto-detection on filetypes. With your:
:let &verbose=20
You can see there's an autocmd on BufRead that gets triggered every
time. It's conditioned on:
if !did_filetype()
And, since your filetype isn't set up the way Debian expects it (which
may or may not be the way Vim normally does it), did_filetype() returns
0.
When I edit file.myfile the highlighting works correctly but if I
move away and return then there's no highlighting.
Does some plugin from your system set up some kind of autocmd on the
WinEnter, WinLeave, BufEnter, or BufLeave event(s)?
:au WinEnter,WinLeave,BufEnter,BufLeave
The above command returns
--- Auto-Commands ---
and nothing else. Apart from that , I have
let &loadplugins=0
in /etc/vim/vimrc so I don't think that any plugin is causing the
behaviour.
I missed the guilty autocmd (BufRead), because I always set the 'hidden'
option. So, files aren't re-read everytime I unhide them -- they're
only read when they're first loaded. And I was testing by switching
between two windows, with both visible.
On my system, I see about a dozen BufEnter entries, but none that
would affect a *.myfile buffer. Two in the filetypedetect augroup,
one in FileExplorer, and the ones in no group are vimball-related.
WinEnter only lists an autocmd in the matchparen group.
Here's a version of the problem with no simplifications:
File a contains
This is a special line
File b is empty. I do
vim -u NONE a b
:let &verbose=20
:syntax match special /special/
:highlight special term=bold cterm=bold
The word "special" gets highlighted.
2Ctrl-^
"b" 0 lines, 0 characters
Ctrl-^
"a" 1 line, 23 characters
Now "special" is no longer highlighted.
:syntax
No Syntax items defined for this buffer
:syntax match special /special/
The word "special" gets highlighted again. Note that this time I
didn't have to enter the highlight command to get the highlighting.
I would be especially interested if anyone who runs Debian Lenny would
try the above test.
Is Debian Lenny the same as Debian 6? I don't use Debian, but I have
VM's of Debian 5 and 6 for testing things. Under 6 is where I observed
the BufRead problem.
I'm not sure which parts of this are necessary, but the following works
for me. Using your example with the 'a' and 'b' files, but moving 'a'
to 'a.myfile' (so it can be detected by extension):
1. Change your autocmd for detection from:
(old:) autocmd BufReadPost,BufNewFile *.myfile source ~/myfile.vim
to, either:
i. if you *really* want to keep it in vimrc (for some reason -- not
recommended, but it worked fine in testing):
aug filetypedetect
autocmd BufReadPost,BufNewFile *.myfile setf myfile
aug END
ii. or just put it in ~/.vim/ftdetect/myfile.vim (where you don't need
the augroup wrapper):
au BufReadPost,BufNewFile *.myfile setf myfile
" au is short for :autocmd
" setf is short for :setfiletype
2. And create a file ~/.vim/syntax/myfile.vim containing just the
following two lines:
syn match special /special/
hi special term=bold cterm=bold
Then it's properly detected for me under Debian 6.
--
Best,
Ben
--
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