क्या पाठ संरेखण को बनाए रखते हुए टैब को रिक्त स्थान में परिवर्तित करना संभव है?
जब कोई प्रमुख पात्र नहीं होते हैं तो केवल उपयोगी तरीके से प्रतिस्थापित किया जाता है।
क्या पाठ संरेखण को बनाए रखते हुए टैब को रिक्त स्थान में परिवर्तित करना संभव है?
जब कोई प्रमुख पात्र नहीं होते हैं तो केवल उपयोगी तरीके से प्रतिस्थापित किया जाता है।
जवाबों:
आप :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
।