On 2010-07-04, Benjamin R. Haskell wrote:
> On Sun, 4 Jul 2010, Gary Johnson wrote:
>
> > 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.
>
> The fact that 'foo' didn't already exist is key. (Try it with a 'touch
> foo' beforehand.) The :w triggers a BufNewFile event. (It appears the
> important filetypedetect group events are triggered on either BufRead or
> BufNewFile.) So, the BufNewFile triggers the filetypedetect autocmds
> that trigger their own BufRead events via :doau
But there is no evidence that BufNewFile is being triggered. It
didn't appear in the verbose output I posted earlier. Further,
another experiment shows neither BufNewFile nor BufRead events being
triggered by a :w if ":filetype on" has not been executed.
$ vim -N -u NONE
:au BufRead * let g:br="br"
:au BufNewFile * let g:bnf=:bnf"
:set verbose=15
:w foo
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
chdir(/home/garyjohn)
"foo" [New] 0L, 0C written
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