क्या पाठ संरेखण को बनाए रखते हुए टैब को रिक्त स्थान में परिवर्तित करना संभव है?
जब कोई प्रमुख पात्र नहीं होते हैं तो केवल उपयोगी तरीके से प्रतिस्थापित किया जाता है।
क्या पाठ संरेखण को बनाए रखते हुए टैब को रिक्त स्थान में परिवर्तित करना संभव है?
जब कोई प्रमुख पात्र नहीं होते हैं तो केवल उपयोगी तरीके से प्रतिस्थापित किया जाता है।
जवाबों:
आप :retabकमांड का उपयोग कर सकते हैं । से
:help :retab
<Tab>दिए गए नए टैबस्टॉप मान का उपयोग करके व्हाइट-स्पेस के नए तारों के साथ व्हाइट-स्पेस के सभी दृश्यों को बदलें । यदि आप एक नया टैबस्टॉप आकार निर्दिष्ट नहीं करते हैं या यह शून्य है, तो विम वर्तमान मूल्य का उपयोग करता है'tabstop'। [...]'expandtab'पर, Vim ने सभी टैब को रिक्त स्थान की उचित संख्या के साथ बदल दिया।
ध्यान दें कि कमांड एक सीमा को स्वीकार करता है, इसलिए आप एक दृश्य चयन कर सकते हैं और फिर केवल :retabचयनित लाइनें।
:retabजैसा कि कहा गया है, आप उपयोग कर सकते हैं , हालांकि, यह सभी टैब को रिक्त स्थान में बदल देगा , न केवल लाइन की शुरुआत में टैब
तो यह (जहां ⇥एक टैब वर्ण है):
if :; do
⇥echo "⇥hello"
end
बदल जाता है (जहां ␣एक अंतरिक्ष चरित्र है):
if :; do
␣␣echo "␣␣hello"
end
यह कुछ परिदृश्यों में अनपेक्षित दुष्परिणाम पैदा कर सकता है, और जब टैब में स्थान बदलते हैं तो यह और भी अधिक होता है!
इसलिए, मैंने लाइन के शुरू में केवल टैब / स्पेस बदलने के लिए एक छोटा सा फंक्शन लिखा :
" :retab changes *everything*, not just start of lines
fun! Retab(expandtab)
let l:spaces = repeat(' ', &tabstop)
" Replace tabs with spaces
if a:expandtab
silent! execute '%substitute#^\%(' . l:spaces . '\)\+#\=repeat("\t", len(submatch(0)) / &tabstop)#e'
" Replace spaces with tabs
else
silent! execute '%substitute#^\%(\t\)\+#\=repeat("' . l:spaces . '", len(submatch(0)))#e'
endif
endfun
इस संस्करण के साथ, आपको expandtabफ़ंक्शन कॉल में मैन्युअल रूप से निर्दिष्ट करना होगा (यानी :call Retab(1), स्थान को टैब बदलने के लिए), लेकिन आप इसे वर्तमान मूल्य &expandtab(जैसा कि यह पहले से ही करता है &tabstop) को पसंद करने के लिए संशोधित कर सकते हैं :retab। (मैं इसे मैन्युअल रूप से निर्दिष्ट करना पसंद करता हूं)।
aका if a:expandtabमतलब क्या है?
set expandtabअपने .vimrc में है और फिर autocmd BufWritePre * :call Retab(&expandtab)- रिक्त स्थान के बजाय इंडेंटेशन को टैब में बदल दिया जाएगा।
Vim !retabकमांड देता है जो दिए गए <Tab>नए टैबस्टॉप (जैसे :set tabstop=2) मूल्य का उपयोग करके सफेद-स्थान के नए तारों के साथ सभी अनुक्रमों को बदल देगा , लेकिन स्ट्रिंग के अंदर सभी टैब संशोधित किए जा सकते हैं (जैसे C प्रोग्राम में, आपको इससे \tबचने के लिए उपयोग करना चाहिए )!
इसलिए वैकल्पिक रूप से आप निम्न कमांड का उपयोग करके सभी टैब को रिक्त स्थान में बदल सकते हैं:
:%s/\t/ /g
या @ शहबाज द्वारा सुझाए गए अनुसार :
:%s/^\t\+/ g
तो केवल इंडेंटेशन में उपयोग किए जाने वाले टैब परिवर्तित किए जाते हैं।
स्पष्टीकरण:
%संपूर्ण बफ़र / फ़ाइल ( :help :%) का प्रतिनिधित्व करता हैsस्थानापन्न के लिए खड़ा है ( :help sub-replace-special)\t, या ^Iटैब के लिए खड़ा है - जितने स्पेस चाहिए उतने टैब के लिए इस्तेमाल करेंg - वैश्विक के लिए खड़ा है, और यह एक ही पंक्ति में टैब की कई घटनाओं को बदल देगाफिर संपूर्ण फ़ाइल के इंडेंटेशन को ठीक करने के लिए, आप कोशिश कर सकते हैं gg=G:। जांच करें: अधिक विवरण के लिए बुरी तरह से इंडेंट किए गए कोड को फिर से इंडेंट करना ।
टैब के बजाय डिफ़ॉल्ट रूप से रिक्त स्थान का उपयोग करने के लिए, आपको अपनी .vimrcफ़ाइल में निम्नलिखित सेटिंग्स जोड़ने की आवश्यकता है :
set tabstop=2 " (ts) width (in spaces) that a <tab> is displayed as
set expandtab " (et) expand tabs to spaces (use :retab to redo entire file)
set shiftwidth=2 " (sw) width (in spaces) used in each step of autoindent (aswell as << and >>)
वैकल्पिक समाधान का उपयोग करना है tidy
सम्बंधित:
%s/^\t\+/ gकि केवल इंडेंटेशन में उपयोग किए जाने वाले टैब ही रूपांतरित हों। इसके अलावा, gg=Gअजगर जैसी भाषाओं के साथ विनाशकारी हो सकता है।
प्रयोग करके देखें:
expand -t 4 input_filename output_filename
expandटैब को रिक्त स्थान में परिवर्तित करने के लिए एक कमांड-लाइन टूल है, जिसे आप शेल से या उसके साथ चला सकते हैं :!expand।
यह POSIX में है इसलिए यह अधिकांश प्रणालियों पर उपलब्ध होना चाहिए। unexpandउल्टा करेंगे, वैसे।
expand?
:%!expand -t 4विम के अंदर कर सकता है । बेहतर अभी तक, आप वर्तमान बदलाव चौड़ाई विकल्प का उपयोग भी कर सकते हैं: :exe '%!expand -t ' . &shiftwidth
पूर्णता के लिए, =इंडेंटेशन को ठीक करने के लिए भी इस्तेमाल किया जा सकता है, आपके द्वारा निर्दिष्ट करने के बाद कि टैब को रिक्त स्थान से बदल दिया जाता है। सामान्य मोड में, आप टाइप करके ऐसा कर सकते हैं :set expandtab। फिर =दो तरीकों से इस्तेमाल किया जा सकता है:
=चयनित कोड ब्लॉक के इंडेंटेशन को ठीक करेगा।gg=Gपूरी फ़ाइल को ठीक करेगा, जहाँ ggकर्सर को फ़ाइल की शुरुआत में ले जाता =है , फिर लागू किया जाता है, और Gकर्सर को फ़ाइल के अंत में ले जाता है।संदर्भ: लिंक
:h vim-faqऔर खोज करें/tab characters। टैग को याद रखना कठिन है:h faq-14.16।