.vimrc

2013-03-12 4 views
17

का प्रगतिशील धीमा पुनः लोड करने का समय विम के लिए मेरा बूट समय लगभग आधे सेकेंड ("स्टार्टअपटाइम" के साथ परीक्षण किया गया है) है, लेकिन जब मैं source के माध्यम से दो बार vimrc को फिर से लोड करता हूं, तो यह बाद में धीमा हो जाता है। मैंने एक व्यवस्थित तरीके से .vimrc को डीबग नहीं किया है, इसलिए मुझे यकीन नहीं है कि कैसे आगे बढ़ना है। verbose सेट करने से यह देखने में मदद मिलती है कि क्या हो रहा है और मैं लगभग निश्चित हूं कि .vimrc एक से अधिक बार लोड किया जा रहा है। (विशेष रूप से filetype.vim और ftplugin.vim) जब भी मैं दबाता हूं तो Ctrl-C लटकने के लिए, मुझे filetype.vim में एक त्रुटि मिलती है, जो मुझे लगता है क्योंकि vim filetype.vim लोड करने का प्रयास करने में अधिकतर समय व्यतीत करता है। सबसे संभावित अपराधी मैं देख रहा हूँ .vimrc की ऑटो पुनः लोड है:.vimrc

if has("autocmd") 
    autocmd bufwritepost .vimrc source $MYVIMRC "auto source vimrc 
endif 

मैं कैसे ऐसा होने से रोक सकता है?

उत्तर

26

यहां अपराधी autocmd का उपयोग है। जब आप के साथ

autocmd <Event> <Action> 

vim एक स्वत: आदेश को परिभाषित एक नया ऑटो आदेश मौजूदा की परवाह किए बिना परिभाषित करता है। तो जब आपके .vimrc में ऐसे कई ऑटो कमांड हैं और बार-बार इसे स्रोत करते हैं (इस मामले में, प्रत्येक लिखने के लिए), तो आप सैकड़ों और हजारों ऑटो कमांड को परिभाषित करते हैं जो सभी एक ही चीज़ को बार-बार करते हैं। बहुत जल्द यह आपके विम सत्र को उड़ा देगा और धीमा कर देगा, जो आप देख रहे हैं।

इसके बजाय आपको क्या करना है, अपने ऑटो कमांड को समूहित करना है और फिर autocmd! के साथ उस समूह की परिभाषाओं को साफ़ करना है। एक साधारण उदाहरण के रूप में:

augroup Group1 
    autocmd! 
    autocmd <Event1> <Action1> 
    autocmd <Event2> <Action2> 
    ...  
augroup END 

आप के रूप में कई समूहों के रूप में आप की तरह है जो आप समान कार्यों/घटनाओं से उन्हें व्यवस्थित करने की अनुमति देता हो सकता है,।

1

यह मेरा समाधान है कि इसने पिछले मैपिंग को साफ करता है:

augroup VimrcGroup 
    autocmd! 
    " Make changes effective after saving .vimrc. Beware that autocommands are 
    " duplicated if .vimrc gets sourced again, unless they are wrapped in an 
    " augroup and the autocommands are cleared first using 'autocmd!' 
    autocmd bufwritepost $MYVIMRC call OnSavingVimrc() 
augroup END 

" Avoid infinite loops 
if !exists("*OnSavingVimrc") 
    function! OnSavingVimrc() 
    " Clear previous mappings, they don't go away automatically when sourcing vimrc 
    mapclear 
    echo "Sourcing Vimrc after saving it" 
    source $MYVIMRC 
    endfunction 
endif