2011-03-02 13 views
7

मैंविम retab रिक्त स्थान केवल

:set noet|retab! 

का उपयोग कर रहा हूँ currentling लेकिन समस्या यह है कि मैं में है वह पूरी फ़ाइल भर टैब के लिए 4 स्थानों के सभी उदाहरणों की जगह है चल रहा हूँ। मुझे केवल लाइनों की शुरुआत में 4 रिक्त स्थान के उदाहरणों को प्रतिस्थापित करने की आवश्यकता है।

यदि मैं हटा देता हूं! रीटैब के अंत में, रिक्त स्थान कहीं भी नहीं बदला जाता है।

मुझे लगता है कि किसी को बनाया एक कस्टम फ़ंक्शन का उपयोग करने की कोशिश की है:

" Retab spaced file, but only indentation 
command! RetabIndents call RetabIndents() 

" Retab spaced file, but only indentation 
func! RetabIndents() 
    let saved_view = winsaveview() 
    execute '%[email protected]^\(\{'.&ts.'}\)\[email protected]\=repeat("\t", len(submatch(0))/'.&ts.')@' 
    call winrestview(saved_view) 
endfunc 

लेकिन जब मैं चलाने मैं एक अच्छी छोटी त्रुटि संदेश मिलता है:

:RetabIndents 

त्रुटि का पता चला समारोह RetabIndents संसाधित करते समय :

लाइन 2:

ई 486: पैटर्न नहीं मिला:^({4}) +

+0

आप आप पहले से ही टैब के साथ शुरुआत रिक्त स्थान के सभी जगह नहीं है कुछ कर रहे हैं? क्या आप मूल फ़ाइल, या संशोधित फ़ाइल (या बफर) का उपयोग कर रहे हैं जिसमें आप पहले ही भाग चुके हैं: सेट नोएट | retab! '? – gotgenes

+0

ठीक है, तो यह मुद्दा है, कि मेरे पास प्रतिस्थापित करने के लिए कोई स्थान नहीं है। अगर कोई मिलान नहीं मिलता है तो अनदेखा करने के लिए कोई संशोधक नहीं होना चाहिए? –

+1

यह भी देखें http://stackoverflow.com/questions/5144284/force-vi-vim-to-use-leading-tabs-only-on-retab – wimh

उत्तर

9

इस बारे में कुछ अन्य लोगों के साथ बात करने के बाद, मुझे चुप जोड़ने की जरूरत है! निष्पादित करने से पहले कमांड।

autocmd BufWritePre * :RetabIndents 
command! RetabIndents call RetabIndents() 

func! RetabIndents() 
    let saved_view = winsaveview() 
    execute '%[email protected]^\(\ \{'.&ts.'\}\)\[email protected]\=repeat("\t", len(submatch(0))/'.&ts.')@e' 
    call winrestview(saved_view) 
endfunc 

तो अब इस समारोह स्वचालित रूप से टैब के साथ रिक्त स्थान केवल एक पंक्ति के आरंभ में बदल देगा: तो यह है कि मैं क्या अब काम कर रहा है।

+2

आप 'विकल्प' के अंत में 'e' ध्वज का उपयोग कर सकते हैं 'चुप!' के बजाय कमांड, 'एच: s_flags' देखें। – ZyX

+0

यही वह है जिसे मैं ढूंढ रहा था! धन्यवाद! ई ध्वज जोड़ा और चुप हटा दिया! –

0

मैं अपनी शैल स्क्रिप्ट की शुरुआत में रिक्त स्थान को टैब में बदलने के लिए एक अलग विधि का उपयोग करता हूं। मैं बस कमांड लाइन से sed का उपयोग करें।

बीएसडी का उपयोग sed:

sed -i "" -e ':loop' -e "s/^\([ ]*\) /\1 /" -e 't loop' somefile.sh 

* टिप्पणी: (i) वर्ग कोष्ठक में चरित्र एक टैब वर्ण (ii) aftger/\ 1 चरित्र भी एक टैब वर्ण है। Ctrl + v + Tab कुंजी संयोजन का उपयोग कर टर्मिनल में दोनों टैब cgharacters दर्ज किए जाते हैं।

जीएनयू का उपयोग sed:

sed -i -e ':loop' -e 's/^\([\t]*\) /\1\t/' -e 't loop' somefile.sh 
संबंधित मुद्दे