Re: can't source a file inside my _vimrc
- Gary Johnson a écrit :
> On 2007-03-01, kib2 <kib2@...> wrote:Thanks Gary for this long Vim lesson, I'll try to modify my _vimrc now
>>> Try ':filetype on'
>> filetype on is already inside my mimrc.
>> In fact, I've made a special function for the different languages I use :
>> au BufEnter *.py exe Fpython()
>> function Fpython()
>> au FileType python source C:\Program Files\vim\vim70\scripts\python.vim
>> autocmd BufRead,BufNewFile *.py syntax on
>> autocmd BufRead,BufNewFile *.py set ai
>> filetype on
>> " les tabs sont des espaces pour Python:
>> au BufNewFile,BufRead *.py set expandtab
>> au BufNewFile,BufRead *.py set tabstop=4
>> au BufNewFile,BufRead *.py set shiftwidth=4
>> Where do I go wrong ?
> If you want vim to automatically detect the file type, "filetype on"
> must be executed _before_ any buffer is loaded, that is, before the
> BufNewFile or BufRead events, and certainly before the BufEnter
> event. Executing "filetype on" is like arming the file detection
> mechanism, but the code above arms the detection _after_ the
> triggering events have occurred.
> So first of all, the "filetype on" line should be in the main body
> of the _vimrc so that it is executed when _vimrc is sourced, not
> later when an autocommand is triggered.
> Secondly, if you want "syntax on", et al. to be executed when you
> enter a buffer containing a Python file, you should either execute
> Fpython() in an autocommand and remove all the autocommands from
> within Fpython(), or you should execute Fpython() unconditionally
> and leave the autocommands within Fpython() as they are. Otherwise,
> the settings within Fpython() won't be executed until the second
> Python file is loaded and vim's behavior will appear to be
> Your whole approach is really more complicated and error-prone than
> it needs to be. I would recommend that you take all the settings
> now in Fpython() (except "filetype on"), remove the autocommand
> parts, and put them all in a separate file, C:\Program
> Files\vim\vim70\after\ftplugin\python.vim. Then change all the
> "set" commands to "setlocal", like this:
> source "C:/Program Files/vim/vim70/scripts/python.vim"
> syntax on
> setlocal ai
> " les tabs sont des espaces pour Python:
> setlocal expandtab
> setlocal tabstop=4
> setlocal shiftwidth=4
> Vim's filetype detection will cause this file to be sourced whenever
> you open a Python file. Using "setlocal" will cause those settings
> to apply only to the current buffer, that is, only to buffers
> containing Python files, rather that to every buffer in the current
> vim instance.
> Lastly, if you execute "syntax on" like this, you enable syntax
> highlighting for every buffer, regardless of file type. If you want
> syntax highlighting for only certain file types, I would recommend
> syntax manual
> in your _vimrc and
> setlocal syntax=ON
> in the C:\Program Files\vim\vim70\after\ftplugin\ file for each
> filetype for which you want highlighting enabled.
with all your comments in mind.