2010-03-05 6 views
5

मैं हर दिन कई अलग-अलग प्रोग्रामिंग भाषाओं का उपयोग करता हूं, और मैं प्रत्येक के लिए अलग-अलग टैब चौड़ाई (रिक्त स्थान) रखना चाहता हूं। उदाहरण के लिए: मैं रुबी के लिए "मानक" 2 रिक्त स्थान का उपयोग करता हूं, लेकिन हमारे सभी मौजूदा मैटलैब कोड 4 रिक्त स्थान का उपयोग करते हैं।विटा में Matlab के लिए Autocommands?

मैं अपने निजी ~/.vimrc से है:

augroup lang_perl 
    au! 
    set tabstop=4 " tabstop length N in spaces 
    set shiftwidth=4 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
    set expandtab " Use spaces instead of tabs 
augroup END 

augroup lang_ruby 
    au! 
    set tabstop=2 " tabstop length N in spaces 
    set shiftwidth=2 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
    set expandtab " Use spaces instead of tabs 
augroup END 

उन काम है, लेकिन निम्नलिखित नहीं करता है:

augroup lang_matlab 
    au! 
    set tabstop=4 " tabstop length N in spaces 
    set shiftwidth=4 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
    set expandtab " Use spaces instead of tabs 
augroup END 

मैं सच में समझ में नहीं आता कि कैसे है कि मैं कर रहा हूँ augroup lang_ruby आंकड़े बाहर एक रूबी फ़ाइल संपादित करना। (मेरी खोज ftdetect लाई, लेकिन समाधान स्पष्ट नहीं था।) ऐसा लगता है कि vim ऐसा नहीं लगता है कि मैं augroup lang_matlab का उपयोग कर मैटलैब को संपादित कर रहा हूं। मैं यह काम करने के लिए क्या बदलूं?

+0

जब आप एक matlab (.m) फ़ाइल संपादित कर रहे हैं, और आप 'फ़ाइल सेट टाइप करें' टाइप करते हैं, तो क्या यह 'filetype = matlab'' के साथ प्रतिक्रिया करता है? यह संभव है कि यह आपकी .m फ़ाइलों को दूसरी भाषा के रूप में पहचान रहा हो। – jagill

उत्तर

2

आप {filetype} के लिए सेटिंग्स की एक बड़ी संख्या करना चाहते हैं, तो आप उन्हें ~/.vim/ftplugin/{filetype}.vim में या फ़ाइल से मेल खाता है ~/.vim/ftplugin/{filetype}/**/*.vim (उदाहरण: ~/.vim/ftplugin/ruby/foo.vim, ~/.vim/ftplugin/ruby/foo/bar.vim) में डाल दिया जाना चाहिए। इस मामले में आपको किसी भी autocommands की आवश्यकता नहीं है। यदि आप अभी भी ऑटोकॉन्ड्स का उपयोग करना चाहते हैं, तो निम्न का उपयोग करें:

augroup lang_matlab 
    autocmd! 
    autocmd FileType matlab  setlocal ts=4 sw=4 et 
augroup END 

। दो चीजों पर ध्यान दें: फ़ाइल टाइप टाइप (यह वहां है और यह BufRead, BufNewFile नहीं है) और सादे set के बजाय setlocal है। सबसे पहले फ़ाइल टाइप सेटिंग्स के लिए इस्तेमाल किया जाना है, दूसरा यह है कि कैसे बफर-विशिष्ट विकल्प सेट किए जाने चाहिए।

बारे में क्यों पर्ल और गहरे लाल रंग का सेटिंग्स काम करते हैं और यही कारण है कि matlab सेटिंग्स नहीं करता है: अपने उदाहरण कोड सिर्फ इसलिए, यदि आप प्रभावी रूप से ts=2 sw=2 et सेट के रूप में

augroup lang_perl 
    autocmd! 
augroup END 
augroup lang_ruby 
    autocmd! 
augroup END 

set tabstop=4 " tabstop length N in spaces 
set shiftwidth=4 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
set expandtab " Use spaces instead of tabs 

set tabstop=2 " tabstop length N in spaces 
set shiftwidth=2 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
set expandtab " Use spaces instead of tabs 

में ही है। लेकिन $VIMRUNTIME/ftplugin/perl.vim निम्नलिखित कोड शामिल हैं: अपने vimrc में

setlocal tabstop=4 
setlocal shiftwidth=4 

हां, पर्ल के लिए ts=4 sw=4ftplugin/perl.vim में सेट किया गया है, नहीं (आप पर्ल समर्थन प्लगइन स्थापित किया है)। आप इसे tabstop=4tabstop=8 के साथ vimrc में बदलकर देख सकते हैं।

0

मैं आपको यह नहीं बता सकता कि यह कैसे निर्धारित किया गया है कि lang_perl या lang_ruby पढ़ा जाएगा।

augroup gzip 
    autocmd! 
    autocmd BufReadPre,FileReadPre  *.gz set bin 
    autocmd BufReadPost,FileReadPost  *.gz '[,']!gunzip 
    autocmd BufReadPost,FileReadPost  *.gz set nobin 
    autocmd BufReadPost,FileReadPost  *.gz execute ":doautocmd BufReadPost " . expand("%:r") 
    autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r 
    autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r 
    autocmd FileAppendPre    *.gz !gunzip <afile> 
    autocmd FileAppendPre    *.gz !mv <afile>:r <afile> 
    autocmd FileAppendPost    *.gz !mv <afile> <afile>:r 
    autocmd FileAppendPost    *.gz !gzip <afile>:r 
augroup END 

यह देखें: लेकिन autocommand प्रलेखन को देख Gzipped फ़ाइलों के लिए एक उदाहरण (:he gzip-example) को लाता है? प्रत्येक autocmd निर्दिष्ट होता है जिसमें एक ईवेंट होता है (BufReadPre, FileReadPre) और वह एक्सटेंशन जिसके लिए इसे निष्पादित किया जाएगा (*.gz)। यह अब तक मेरी राय का समर्थन कर रहा है कि आप अपने augroup के लिए किसी भी नाम का उपयोग कर सकते हैं लेकिन इसे एक एक्सटेंशन निर्दिष्ट करना होगा कि augroup सही तरीके से काम करने के लिए जिम्मेदार होगा।

:he autocmd-groups का एक और बोली:

आम तौर पर, जब autocommands स्वचालित रूप से क्रियान्वित करने, विम सभी समूहों के लिए autocommands उपयोग करता है। समूह केवल ": doautocmd" या ": doautoall" के साथ autocommands को निष्पादित करते समय या ऑटोोकॉन्ड्स को परिभाषित या हटाते समय केवल महत्वपूर्ण है।

तो, क्रम matlab फ़ाइलों के लिए एक augroup बनाने के लिए, यह एक चाल करना चाहिए:

augroup lang_matlab 
    autocmd! 
    autocmd BufRead  *.m set ts=4 sw=4 expandtab 
augroup END 

और यह सुनिश्चित करें कि इन सेटिंग्स किसी भी augroup रों है कि द्वारा ओवरराइट नहीं करते हैं कुछ बिना शर्त (यानी अन्य augroup परिभाषाओं को भी संशोधित करें)।

+0

'autocmd BufRead * .m सेट ts = 4 sw = 4 expandtab' में दो त्रुटियां हैं: 1) फ़ाइल प्रकार-विशिष्ट सेटिंग्स के लिए' setlocal' का उपयोग करें जैसे कि $ $ VIMRUNTIME/ftplugin' में कोई प्लगइन; 2) '$ VIMRUNTIME/filetype.vim' द्वारा पहले से किए गए काम को दोबारा न करें:' BufRead * .m' के बजाय 'FileType matlab' का उपयोग करें। – ZyX

+0

@ZyX: चूंकि सेटिंग यहां सेट की जा रही हैं (ts, sw, expandtab) बफर-स्थानीय हैं, मुझे कोई समस्या नहीं होगी। और * त्रुटि * IMHO एक बहुत बड़ा शब्द है। – eckes

+0

@ZyX: और यदि उत्तर 100% सही नहीं है, तो मैं कम से कम दावा कर सकता हूं कि ** यह ** काम करता है और मैंने पिछले साल मार्च से चारों ओर घूमने वाले प्रश्न को वापस लाया :-) – eckes