On 2010-07-04, Benjamin R. Haskell wrote:
> On Sun, 4 Jul 2010, Gary Johnson wrote:
>
> > On 2010-07-03, John Little wrote:
> > > Daniel D Jones wrote:
> > >
> > > Using Gvim under Gentoo Linux, if I open a file with a .txt
> > > extension, Gvim sets the filetype to text and sets the appropriate
> > > word wrap, etc. that I have configured. But if I open Gvim, create
> > > a new buffer with :tabnew and then save that as a file with a .txt
> > > extension, Gvim doesn't set the filetype...
> > >
> > > Gary replied:
> > > > Vim assumes that you want to determine the file type when a file
> > > > is opened or a new buffer is created, i.e., before you start
> > > > viewing or editing, not when you write the file.
> > >
> > > I think that's quite wrong. I put
> > >
> > > au! BufRead,BufNewFile *.txt setfiletype text
> > >
> > > in my ~/.vim/filetype.vim according to :help new-filetype part C,
> > > and upon :tabnew, :save (or :write) the file type is set to text.
> >
> > I stand corrected. I don't understand why the 'filetype' is being
> > set, though. Some experimentation suggests that the BufRead event is
> > being triggered by the :w command, but only when the BufRead
> > autocommand is within the filetypedetect group. I don't get that from
> > reading ":help BufRead" and it doesn't make sense to me. Why does
> > writing a file trigger a BufRead event?
>
> Are you sure it's happening when the buffer is written, and not when the
> buffer is created?
>
> Several of the BufNewFile autocmds in the filetypedetect group call
> 'doau BufRead' (triggering their own BufRead events).
>
> Plus there's this entry: (among the long listing for :au filetypedetect)
> filetypedetect BufNewFile
> [...]
> * if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat |
> runtime! scripts.vim | endif
>
> I wouldn't be surprised if Daniel's ':tabnew, :save' is a ':tabnew
> something.txt'?
Here is one experiment.
$ vim -N -u NONE
:filetype on
:aug filetypedetect
:au BufRead * let g:x="hello"
:aug END
:echo x
E121: Undefined variable: x
E15: Invalid expression: x
:w foo
"foo" [New] 0L, 0C written
:echo x
hello
My BufRead autocommand is clearly being triggered by my :w command.
I ran that one again but executed ":set verbose=15" before ":w foo".
Here is the first part of the verbose output that followed the "w
foo" command.
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
Executing BufRead Auto commands for "*"
autocommand if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat |
runtime! scripts.vim | endif
...
That was running vim 7.2.327 on Cygwin. I don't see anything I did
that should have triggered a BufRead event.
Regards,
Gary
--
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