2012-07-11 8 views
6

Alcuni script in $VIMRUNTIME/ftplugin/ (ad esempio python.vim e ada.vim) non definiscono b:undo_ftplugin. Il valore predefinito dell'opzione cpo è aABceFs.Dovrebbe ogni `ftplugin/nome.vim` dover definire` b: undo_ftplugin`?

Quando I set ft=python, quindi set ft=css. $VIMRUNTIME/ftplugin/css.vim termina immediatamente. E omnifunc=pythoncomplete#Complete tutto il tempo.

Se ogni ftplugin/name.vim deve definire b:undo_ftplugin?


Questo è /usr/share/vim/vim73/ftplugin.vim:

" Vim support file to switch on loading plugins for file types 
" 
" Maintainer: Bram Moolenaar <[email protected]> 
" Last change: 2006 Apr 30 

if exists("did_load_ftplugin") 
    finish 
endif 
let did_load_ftplugin = 1 

augroup filetypeplugin 
    au FileType * call s:LoadFTPlugin() 

    func! s:LoadFTPlugin() 
    if exists("b:undo_ftplugin") 
     exe b:undo_ftplugin 
     unlet! b:undo_ftplugin b:did_ftplugin 
    endif 

    let s = expand("<amatch>") 
    if s != "" 
     if &cpo =~# "S" && exists("b:did_ftplugin") 
     " In compatible mode options are reset to the global values, need to 
     " set the local values also when a plugin was already used. 
     unlet b:did_ftplugin 
     endif 

     " When there is a dot it is used to separate filetype names. Thus for 
     " "aaa.bbb" load "aaa" and then "bbb". 
     for name in split(s, '\.') 
     exe 'runtime! ftplugin/' . name . '.vim ftplugin/' . name . '_*.vim ftplugin/' . name . '/*.vim' 
     endfor 
    endif 
    endfunc 
augroup END 

Questo è /usr/share/vim/vim73/ftplugin/css.vim:

" Vim filetype plugin file 
" Language:   CSS 
" Maintainer:  Nikolai Weibull <[email protected]> 
" Latest Revision: 2008-07-09 

if exists("b:did_ftplugin") 
    finish 
endif 
let b:did_ftplugin = 1 

let s:cpo_save = &cpo 
set cpo&vim 

let b:undo_ftplugin = "setl com< cms< inc< fo< ofu<" 

setlocal comments=s1:/*,mb:*,ex:*/ commentstring& 
setlocal formatoptions-=t formatoptions+=croql 
setlocal omnifunc=csscomplete#CompleteCSS 

let &l:include = '^\s*@import\s\+\%(url(\)\=' 

let &cpo = s:cpo_save 
unlet s:cpo_save 

Se io set ft=python, quindi set ft=css. Vim non può superare questa prova:

if &cpo =~# "S" && exists("b:did_ftplugin") 

b:did_ftplugin non viene cancellato, in modo ftplugin/css.vim finitura immediatamente.

risposta

7

:help undo_ftplugin menzioni:

Quando l'utente fa ": setfiletype xyz" l'effetto del tipo di file precedente dovrebbe essere annullata.

Nota che dice "dovrebbe", non "deve". Ma, in funzione dell'attuazione

func! s:LoadFTPlugin() 
    if exists("b:undo_ftplugin") 
     exe b:undo_ftplugin 
     unlet! b:undo_ftplugin b:did_ftplugin 
    endif 

un ftplugin deve definire b:undo_ftplugin, o le impostazioni filetype non può essere modificato più via :setf. Penso che la documentazione dovrebbe farlo notare, e tutti i ftplugins dovrebbero in effetti impostare b:undo_ftplugin (se solo su un valore vuoto, non operativo).

Problemi correlati