ताल में रिक्त स्थान के साथ टैब बदलें


358

मैं टैब को gVim में रिक्त स्थान में परिवर्तित करना चाहूंगा। मैंने अपने लिए निम्न पंक्ति जोड़ी _vimrc:

set tabstop=2

यह दो स्थानों पर रुकने के लिए काम करता है लेकिन फिर भी ऐसा लगता है कि एक टैब कुंजी डाली गई है (मैंने बाद में रिक्त स्थान की गणना करने के लिए एच कुंजी का उपयोग करने की कोशिश की)।

मुझे यकीन नहीं है कि जीवीएम को टैब से रिक्त स्थान में बदलने के लिए मुझे क्या करना चाहिए?


1
व्यक्तिगत रूप से, मुझे टैबस्टॉप = 2 बहुत छोटा इंडेंट मिलेगा; मैं ts = 4 का उपयोग करता हूं, और समझता हूं कि लोग (जैसे कि लिनक्स कर्नेल टीम) ts = 8 का उपयोग करते हैं (और वे विस्तारक - I का उपयोग नहीं करते हैं)।
जोनाथन लेफलर

4
क्या रिक्त स्थान को टैब के अंदर बदलने का कोई तरीका है?
cwd

2
@cwd टैब वर्ण के साथ रिक्त स्थान की जगह ( ^Iजो Ctrl-vतब से आते हैं Tab) काम करेगा, उदाहरण के लिए यदि आपका वर्तमान टैब 4 रिक्त स्थान है::%s/ /^I/g
इंद्र गिंजार

जवाबों:


381

IIRC, कुछ इस तरह है:

set tabstop=2 shiftwidth=2 expandtab

चाल चलनी चाहिए। यदि आपके पास पहले से ही टैब है, तो उन्हें डबल स्पेस के साथ बदलने के लिए एक अच्छी वैश्विक आरई के साथ पालन करें।


25
ओह, यह ":%! विस्तार! -T2"
पॉल

368
या आप बस का उपयोग कर सकते हैं: रेटब
रैंपियन

क्या होगा अगर मैं इसे रिक्त स्थान के साथ सहेजना चाहता हूं? अभी जब मैं: wq और फाइल को फिर से खोलता हूं तो मैं टैब पर वापस आ जाता हूं
गोर्केम युर्टसेवन

1
@ गोरक ने इन आदेशों को अपने .vimrc में डाला, ताकि विम हर सत्र में उन सेटिंग्स का उपयोग करे
क्रैकोकस


824

एक बार जब आप अन्य उत्तरों के अनुसार एक्सपेंडेबट प्राप्त कर लेते हैं, तो अपनी नई सेटिंग्स के अनुसार मौजूदा फ़ाइलों को परिवर्तित करने का अत्यंत सुविधाजनक तरीका है:

:retab

यह वर्तमान बफर पर काम करेगा।


लेकिन हम TAB की प्रत्येक घटना की पुष्टि कैसे कर सकते हैं?
ओकुलस डेक्सटर

8
और विम होने के नाते, यह नेत्रहीन चयनित क्षेत्रों पर भी काम करता है :)
एंडी

2
मुझे एक नई बात सिखाने के लिए धन्यवाद। मैंने :%s/\t/ /gआपकी टिप्पणी देखने से पहले वर्षों के लिए थकाऊ का उपयोग किया है ।
ताई ले

आप :args retab | wकमांड लाइन पर खोली गई सभी फाइलों, जैसे, पर भी कर सकते हैं vim *.txt
जेकड

क्या किसी को पता है कि विम का कौन सा संस्करण है: रेटाब? मेरा 7.3.322 नहीं है।
बिटमेकर

114

प्रयत्न

set expandtab

मुलायम टैब के लिए।

पहले से मौजूद टैब को ठीक करने के लिए:

:%s/\t/  /g

मैंने दो स्थानों का उपयोग किया है क्योंकि आप पहले से ही 2 स्थानों पर अपना टैबस्टॉप सेट कर चुके हैं।


5
वह फिक्स दो स्थान सम्मिलित करेगा जहाँ केवल एक की आवश्यकता होती है।
जोनाथन लेफ़लर

8
प्रतिस्थापन करने के बजाय, आप वह कर सकते हैं जो निक ने ऊपर सुझाया है - यानी रिटैब। यह आपके सभी मौजूदा टैब को आपके टैबस्टॉप में सेट किए गए रिक्त स्थान की संख्या के रूप में रीटैब करेगा।
गोवरी

बहुत बढ़िया टिप! विम ने मुझे पूरी तरह से पहचानी गई फ़ाइल दिखाई, जबकि बिल्ली (linux cmd) ने अनियमित पहचान दिखाई। मैं सिर्फ 2 रिक्त स्थान को 4 में बदल देता हूं जैसा कि मैं विम में उपयोग करता हूं set ts = 4
कारलफिलिप

60

यह मेरे लिए काम किया:

आप पहले ऐसा करने के साथ टैब देख सकते हैं:

:set list

तब टैब को प्रतिस्थापित करना संभव बनाने के लिए ऐसा करें:

:set expandtab

फिर

:retab

अब सभी टैब को उन स्थानों से बदल दिया गया है जिन्हें आप फिर से सामान्य दृश्य में ले जा सकते हैं:

:set nolist

1
:set listबस सुंदर है।
आमिर ए। शबानी

44

gg=G पूरी फाइल को रीइंडेंट कर देगा और सबसे ज्यादा निकाल देगा अगर सभी टैब जो मुझे सहकर्मियों की फाइलों में मिलते हैं।


1
यह रिक्त स्थान के साथ टैब को प्रतिस्थापित करता है?
जैसे कि

1
बहुत बढ़िया! मेरे लिए भी काम किया।
नवाज

1
क्या आप बता सकते हैं कि gg = G क्या करता है? यह वही है जो मैं देख रहा था। मेरे पास सबमिशन पर html है और जब मैंने इसे vim में चिपकाया, तो यह पागलपन का संकेत था। यह अब साफ दिखता है।
jes516

3
@ jes516 ggआपके कर्सर को बफर की शुरुआत में ले जाता है। =प्रारूप है, और एक आंदोलन आदेश लेता है। Gआपके कर्सर को बफ़र के अंत में ले जाता है, इसलिए यह आपके वर्तमान बफ़र के शुरू से अंत तक प्रारूप को बताता है।
जेक सेलर्स

40

निम्नलिखित पंक्तियों को अपने .vimrc में जोड़ें

set expandtab
set tabstop=4
set shiftwidth=4
map <F2> :retab <CR> :wq! <CR>

Vim में एक फ़ाइल खोलें और F2 दबाएं टैब को 4 स्थानों में बदल दिया जाएगा और फ़ाइल स्वचालित रूप से सहेजी जाएगी।


यह शायद ध्यान देने योग्य है कि qफ़ाइल के वर्तमान बफर को भी बंद कर देगा। यह वांछित हो भी सकता है और नहीं भी।
बजे विलेम वैन केटविच

14

यदि आप अपने \tबराबर 8 स्थानों को रखना चाहते हैं तो सेटिंग पर विचार करें:

   set softtabstop=2 tabstop=8 shiftwidth=2

यह आपको प्रति <TAB>प्रेस में दो स्थान देगा , लेकिन \tआपके कोड में वास्तविक अभी भी 8 वर्णों के रूप में देखा जाएगा।


उल्लेख करने के लिए धन्यवाद softtabstop, हत्यारा सुविधाओं में से एक, मुझे लगता है।
मार्टिन यूडिंग


4

आपकी फ़ाइल में टैब के लिए पहली खोज: / ^ I: सेट एक्सपेंडेब: रिटैब

काम करेगा।


पहला भाग आप यह बता सकते हैं कि
10

3

इस लेख में टैब + रिक्त स्थान को संभालने और उनके बीच में परिवर्तित करने के लिए एक उत्कृष्ट vimrc स्क्रिप्ट है।

ये आदेश दिए गए हैं:

Space2Tab रिक्त स्थान टैब में बदलें, केवल इंडेंट में।

Tab2Space टैब को केवल इंडेंट में रिक्त स्थान में बदलें।

RetabIndent Execute Space2Tab (यदि 'एक्सपेंडेबट सेट है'), या टैब 2स्पेस (अन्यथा)।

प्रत्येक कमांड एक तर्क को स्वीकार करता है जो टैब कॉलम में रिक्त स्थान की संख्या को निर्दिष्ट करता है। डिफ़ॉल्ट रूप से, 'टैबस्टॉप' सेटिंग का उपयोग किया जाता है।

स्रोत: http://vim.wikia.com/wiki/Super_retab#Script

" Return indent (all whitespace at start of a line), converted from
" tabs to spaces if what = 1, or from spaces to tabs otherwise.
" When converting to tabs, result has no redundant spaces.
function! Indenting(indent, what, cols)
  let spccol = repeat(' ', a:cols)
  let result = substitute(a:indent, spccol, '\t', 'g')
  let result = substitute(result, ' \+\ze\t', '', 'g')
  if a:what == 1
    let result = substitute(result, '\t', spccol, 'g')
  endif
  return result
endfunction

" Convert whitespace used for indenting (before first non-whitespace).
" what = 0 (convert spaces to tabs), or 1 (convert tabs to spaces).
" cols = string with number of columns per tab, or empty to use 'tabstop'.
" The cursor position is restored, but the cursor will be in a different
" column when the number of characters in the indent of the line is changed.
function! IndentConvert(line1, line2, what, cols)
  let savepos = getpos('.')
  let cols = empty(a:cols) ? &tabstop : a:cols
  execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e'
  call histdel('search', -1)
  call setpos('.', savepos)
endfunction

command! -nargs=? -range=% Space2Tab call IndentConvert(<line1>,<line2>,0,<q-args>)
command! -nargs=? -range=% Tab2Space call IndentConvert(<line1>,<line2>,1,<q-args>)
command! -nargs=? -range=% RetabIndent call IndentConvert(<line1>,<line2>,&et,<q-args>)

इससे मुझे उन उत्तरों की तुलना में थोड़ी अधिक मदद मिली जब मैंने पहली बार एक समाधान की खोज की थी।


3

expandटैब को रिक्त स्थान में बदलने के लिए एक यूनिक्स उपयोगिता है। यदि आप setविम में कुछ नहीं करना चाहते हैं , तो आप विम से शेल कमांड का उपयोग कर सकते हैं:

:!% expand -t8

1
यदि आप केवल कोड के एक हिस्से का विस्तार करना चाहते हैं: पहले दृश्य मोड में उस हिस्से का चयन करें, फिर दबाएं :। अब vim कमांड लाइन दिखाता है :'<,'>। तब !expand -t4टैब से 4 स्थान के लिए इनपुट । (परिणाम कमांड लाइन की तरह है :'<,'>!expand -t4)
पेंघे गेंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.