2012-07-11 6 views
6

$VIMRUNTIME/ftplugin/ में कुछ स्क्रिप्ट्स (उदाहरण के लिए python.vim और ada.vim) b:undo_ftplugin को परिभाषित न करें। cpo विकल्प डिफ़ॉल्ट मान aABceFs है।क्या प्रत्येक 'ftplugin/name.vim` को' b: undo_ftplugin` परिभाषित करने की आवश्यकता है?

जब मैं set ft=python, तो set ft=css$VIMRUNTIME/ftplugin/css.vim तुरंत खत्म करें। और omnifunc=pythoncomplete#Complete हर समय।

प्रत्येक ftplugin/name.vim को b:undo_ftplugin परिभाषित करने की आवश्यकता है?


यह /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 

यह /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 

अगर मैं set ft=python, तो set ft=css। विम इस परीक्षण पारित नहीं कर सकते हैं:

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

b:did_ftplugin हटा दिया जाता है नहीं है, इसलिए तुरंत ftplugin/css.vim खत्म।

उत्तर

7

:help undo_ftplugin का उल्लेख है:

जब उपयोगकर्ता करता है ": setfiletype xyz" पिछले filetype के प्रभाव को नष्ट कर दिया जाना चाहिए।

ध्यान दें कि यह "चाहिए", "जरूरी नहीं" कहता है। लेकिन, कार्यान्वयन

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

के अनुसार एक ftplugin b:undo_ftplugin को परिभाषित करना होगा, या उसके filetype सेटिंग्स :setf के माध्यम से किसी भी अधिक नहीं बदला जा सकता। मुझे लगता है कि प्रलेखन को इंगित करना चाहिए, और सभी ftplugins वास्तव में b:undo_ftplugin सेट कर सकते हैं (यदि केवल खाली, नो-ऑप मान पर)।

संबंधित मुद्दे

 संबंधित मुद्दे