4 स्थानों के रूप में टैब को फिर से परिभाषित करें


1094

मेरी वर्तमान सेटिंग 8 रिक्त स्थान मानती है; मैं इसे कैसे फिर से परिभाषित कर सकता हूं?


4
बेहतर अभी तक, इसे चार स्थानों पर सेट करें और एक ही समय में ऑटो-इंडेंट को सक्षम करें: 4 स्थानों पर सेट किए गए टैब के साथ ऑटो-इंडेंट
solid_liq

7
@ heinrich5991 मुझे नहीं मिला। मुझे यह महसूस करने के लिए 8 रिक्त स्थान की आवश्यकता नहीं है कि एक पंक्ति इंडेंट की गई है, और आवश्यक से अधिक साधन आपके द्वारा पाठ की लंबी लाइन (कम से कम रैप करने से पहले) देख सकने वाले अक्षरों को सीमित कर सकते हैं। लेकिन प्रत्येक उसके अपने के लिए। :)
weberc2

40
@ heinrich5991 मेरा तर्क है "एक इंडेंटेड लाइन को आसानी से पहचानने के लिए जितना संभव हो उतना कम उपयोग करें"। मेरे अनुमान से, एक इंडेंटेशन को आसानी से पहचानने की क्षमता <3 स्थानों पर तेजी से गिरती है, और यह 4 स्थानों पर बढ़ना बंद कर देती है। इसलिए, 4 स्थानों से अधिक होने वाला इंडेंटेशन मेरे अनुभव में एक बेकार है।
weberc2

7
@ weberc2 संभवतः अधिक सहमत नहीं हो सकता, दोस्त। यही कारण है कि मुझे ऐसा लगता है कि रूबी या "आधुनिक-दिवस जावास्क्रिप्ट" पढ़ने के लिए बहुत बुरा है, जिनमें से प्रत्येक इंडेंटेशन के लिए 2-रिक्त स्थान का उपयोग करते हैं। यह वैध रूप से मुझे आँख तनाव देता है जब भारी-नेस्टेड संरचनाओं का पालन करने की कोशिश की जाती है। धमाकेदार जीत के लिए कड़ी मेहनत।

जवाबों:


1615

यह इस बात पर निर्भर करता है कि आपका क्या मतलब है। क्या आप चाहते हैं कि आपकी फ़ाइल में वास्तविक टैब वर्ण 4 रिक्त स्थान पर दिखाई दें , या "टैब" से आप वास्तव में एक इंडेंट का अर्थ करते हैं , जो टैब कुंजी दबाकर उत्पन्न होता है, जिसके परिणामस्वरूप फ़ाइल में शाब्दिक रूप से युक्त (अप करने के लिए) 4 स्थान वर्ण होंगे प्रत्येक "टैब" आप टाइप करते हैं?

आपके उत्तर के आधार पर, सेटिंग्स के निम्नलिखित सेटों में से एक आपके लिए काम करना चाहिए:

  • 4-रिक्त स्थान वाले टैब वर्णों के लिए :

    set tabstop=4
    

    यदि आप अपने स्रोत कोड में वास्तविक टैब वर्ण का उपयोग कर रहे हैं, तो आप शायद ये सेटिंग भी चाहते हैं (ये वास्तव में चूक हैं, लेकिन आप इन्हें रक्षात्मक रूप से सेट करना चाहते हैं):

    set softtabstop=0 noexpandtab
    

    अंत में, यदि आप एकल टैब के अनुरूप एक इंडेंट चाहते हैं, तो आपको इसका उपयोग भी करना चाहिए:

    set shiftwidth=4
    
  • ऐसे इंडेंट के लिए जिनमें 4 स्पेस कैरेक्टर होते हैं लेकिन टैब की के साथ दर्ज किए जाते हैं:

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

उपरोक्त सेटिंग्स को स्थायी बनाने के लिए इन लाइनों को अपने vimrc में जोड़ें ।

यदि आपको समायोजन करने की आवश्यकता होती है, या आप यह समझना चाहते हैं कि इन विकल्पों का क्या मतलब है, तो यहां प्रत्येक विकल्प का टूटना है:

tabstop

"स्पेस" में मापी गई हार्ड टैबस्टॉप की चौड़ाई - एक वास्तविक टैब कैरेक्टर की प्रभावी रूप से (अधिकतम) चौड़ाई।

shiftwidth

एक "इंडेंट" का आकार। यह रिक्त स्थान में भी मापा जाता है, इसलिए यदि आपका कोड आधार टैब वर्णों के साथ है, तो आप टैब वर्णों shiftwidthकी संख्या को बराबर करना चाहते हैं tabstop। यह भी तरह बातें द्वारा किया जाता है =, >और <आदेशों।

softtabstop

इसके अलावा गैर-शून्य मान पर सेट करने से tabstopटैब कुंजी बन जाएगी (इनसर्ट मोड में) इस चौड़ाई पर टैब स्टॉप का अनुकरण करने के लिए रिक्त स्थान (और संभवतः टैब) का संयोजन सम्मिलित करें।

expandtab

इसे सक्षम करने से टैब वर्ण (डालने मोड में) टैब वर्णों के बजाय रिक्त स्थान सम्मिलित करेगा। यह retabकमांड के व्यवहार को भी प्रभावित करता है ।

smarttab

इसे सक्षम करने से टैब कुंजी (इंसर्ट मोड में) अगले टैबस्टॉप के अगले इंडेंट में जाने के लिए रिक्त स्थान या टैब डालें जब कर्सर एक लाइन की शुरुआत में होता है (यानी केवल पूर्ववर्ती वर्ण व्हॉट्सएप हैं)।

इनमें से किसी पर अधिक जानकारी के लिए vim (उदा ) देखें:help 'optionname':help 'tabstop'


18
यह सुनिश्चित करना भी महत्वपूर्ण है कि मेकफाइल्स हमेशा हार्ड टैब वर्णों का उपयोग करें, अन्यथा बिल्ड विफल हो जाएंगे! मैंने दिखाया है कि कैसे, stackoverflow.com/questions/234564/… पर
Shervin Emami

29
@ अपरिभाषित यह प्रणाली vim सेटिंग है। ~/.vimrcउपयोगकर्ता की vim सेटिंग है। अधिकांश लोग सिस्टम सेटिंग्स को अकेले छोड़ देते हैं और उपयोगकर्ता सेटिंग्स को संपादित करते हैं। ध्यान दें कि ~/.vimrcजब तक आप इसे अधिकांश सिस्टम पर नहीं बनाते हैं, तब तक मौजूद नहीं होगा।
लॉरेंस गोंसाल्वेस

4
विम उपयोगकर्ताओं set softtabstop=4सुविधा का ध्यान रखना ! मैं आपके कोड को lessया किसी भी अन्य संपादक को छोड़कर पढ़ने की कोशिश कर के थक गया हूं vim, केवल निराला को देखने के लिए क्योंकि आपने टैब को कुछ मनमाने स्थान के लिए पुनर्परिभाषित किया (भले ही बाकी सिस्टम अन्यथा सोचता हो)! :-)
ओगरे Psalm33

6
क्या कोई मुझे यह समझने में मदद कर सकता है कि यह उत्तर tabstop=8उन इंडेंट के लिए उपयोग करने के लिए क्यों कहता है जिनमें 4 रिक्त स्थान होते हैं? विभिन्न सेटिंग्स के विवरण पढ़ने के बाद मुझे इसका कारण नहीं मिला। एक अन्य उत्तर का उपयोग करने के लिए कहते हैं, tabstop=4जो मेरे लिए थोड़ा अधिक समझ में आता है।
कोडोस जॉनसन

5
@KodosJohnson tabstopविकल्प एक कठिन टैब वर्ण की चौड़ाई को नियंत्रित करता है। यदि आप चाहते हैं कि आपके संकेत 4 टैब वाले एकल वर्णों के बजाय 4 अंतरिक्ष वर्णों से युक्त हों, तो आपके टैब वर्ण की चौड़ाई मायने नहीं रखती है - जैसे । व्यवहार में, आप संभवतः अपने टैब वर्ण की चौड़ाई को अपने इंडेंट की चौड़ाई से अलग करना चाहते हैं , ताकि उचित वर्णों के रूप में मेज़रिंग करने वाले टैब वर्णों की संभावना को कम किया जा सके। ( list+ expandtabयहां भी मदद कर सकते हैं) इसके अलावा, 8-चार-वाइड टैब "मानक" है - आपका टर्मिनल, पायथन, और कई अन्य उपकरण 8-चार-वाइड-टैब के लिए डिफ़ॉल्ट हैं।
लॉरेंस गोंसाल्वेस

744

वर्तमान उपयोगकर्ता के लिए इसे स्थायी आधार पर परिभाषित करने के लिए, .vimrcफ़ाइल बनाएं (संपादित करें) :

$ vim ~/.vimrc

फिर, फ़ाइल में नीचे कॉन्फ़िगरेशन पेस्ट करें। एक बार विम को रीस्टार्ट करने के बाद, टैब सेटिंग लागू होगी।

set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.

set shiftwidth=4    " Indents will have a width of 4

set softtabstop=4   " Sets the number of columns for a TAB

set expandtab       " Expand TABs to spaces

यदि आपके पास ~ / .vimrc नहीं है, तो / etc / vim / vimrc के साथ प्रयास करें। उबंटू 16.04 पर मेरे मामले में कॉन्फिग फाइल है। लेकिन ध्यान रखें कि इस फ़ाइल को बदलने से कॉन्फ़िगरेशन का उपयोग वैश्विक रूप से किया जाएगा।
टोडोर टोडोरोव

4
एक और बात, :retabमौजूदा tabको बदलने के लिए उपयोग करें spacesvim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong

57

या विम मॉडल के लिए आशुलिपि:

vim :set ts=4 sw=4 sts=4 et :

28

कुछ सेटिंग्स हैं जो परिभाषित करती हैं कि रिक्त स्थान या टैब का उपयोग करना है या नहीं।

तो यहाँ आसान कार्य हैं जो आपकी ~/.vimrcफ़ाइल में परिभाषित किए जा सकते हैं :

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

उपयोग:

:call UseTabs()
:call UseSpaces()

इसे प्रति फ़ाइल एक्सटेंशन का उपयोग करने के लिए, निम्नलिखित सिंटैक्स का उपयोग किया जा सकता है (जोड़ा गया .vimrc):

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

यह भी देखें: रिक्त स्थान के लिए टैब परिवर्तित


विकिया का एक और स्निपेट यहाँ दिया गया है जिसका उपयोग टैब और रिक्त स्थान के बीच टॉगल करने के लिए किया जा सकता है :

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

यह F9सेटिंग्स को टॉगल करने के लिए हर टैब के लिए 4 स्पेस और मैपिंग को सक्षम करता है।


27

मैंने इसे अपनी .vimrc फ़ाइल में कॉपी और पेस्ट किया:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

पहले 2 सेटिंग्स का मतलब है कि जब मैं टैब दबाता हूं तो मुझे 4 स्थान मिलते हैं। तीसरी सेटिंग का मतलब है कि जब मैं करता हूं V>(यानी दृश्य और इंडेंट) तो मुझे 4 स्थान भी मिलते हैं।

स्वीकार किए गए उत्तर के रूप में व्यापक नहीं है, लेकिन यह उन लोगों की मदद कर सकता है जो केवल कुछ कॉपी और पेस्ट करना चाहते हैं।


14

अपनी वांछित सेटिंग्स ~ / .vimrc फ़ाइल में रखें - कुछ दिशानिर्देशों और सर्वोत्तम प्रथाओं के लिए नीचे देखें।

विम में टैब का उपयोग करने के चार मुख्य तरीके हैं:

  1. 8 पर हमेशा 'टैबस्टॉप' रखें, 'सॉफ्टटैबटॉप' और 'शिफ्ट' को 4 (या 3 या जो भी आप पसंद करते हैं) को सेट करें और 'noexpandtab' का उपयोग करें। फिर विम टैब और रिक्त स्थान के मिश्रण का उपयोग करेगा, लेकिन टाइप करना और व्यवहार करना होगा जैसे टैब हर 4 (या 3) वर्णों में दिखाई देता है।

    नोट: 8 से किसी अन्य मान के लिए 'टैबस्टॉप' सेट करना आपकी फ़ाइल को कई स्थानों पर गलत कर सकता है (जैसे, इसे प्रिंट करते समय)।

  2. Set टैबस्टॉप ’और 'शिफ्ट एक्सपोजर’ को आप जो चाहें पसंद करें और ab एक्सपेंडेब ’का उपयोग करें। इस तरह आप हमेशा रिक्त स्थान डालेंगे। जब 'टैबस्टॉप' को बदल दिया जाता है, तो फ़ॉर्मेटिंग कभी गड़बड़ नहीं होगी।

  3. जो कुछ भी आप पसंद करते हैं और एक का उपयोग करें 'tabstop' और 'shift Shift' सेट करें फ़ाइल को फिर से संपादित करते समय इन मूल्यों को सेट करने के लिए। फ़ाइल को संपादित करने के लिए विम का उपयोग करते समय केवल काम करता है।

  4. हमेशा 'tabstop' और 'shiftwidth' को समान मान और 'noexpandtab' पर सेट करें। इसके बाद किसी भी टैबस्टॉप सेटिंग के लिए काम करना चाहिए (शुरुआती इंडेंट के लिए) जो लोग उपयोग करते हैं। यदि आप ऐसा करते हैं, तो पहले गैर-रिक्त स्थान के रूप में सम्मिलित किए जाने के बाद टैब करना अच्छा होगा। अन्यथा Otherwise टैबस्टॉप ’के बदलने पर संरेखित टिप्पणियाँ गलत होंगी।

स्रोत:


टैबस्टॉप सेट करने के कारण समझाने के लिए +1! = 8 खराब हो सकता है!
ओगरे Psalm33 13

3
यह बहुत अच्छा है, लेकिन आपको ध्यान देना चाहिए कि यह vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'या :help tabstopvim से शब्दशः है ।
बेलाक्वा




2

टिप्पणी के साथ मेरा मूल ~ / .vimrc:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 

0

सभी उपयोगकर्ताओं के लिए स्थायी (जब आप सर्वर पर अकेले होते हैं):

# echo "set tabstop=4" >> /etc/vim/vimrc

आम तौर पर नए सर्वर apt-get purge nano mcऔर अपना समय बचाने के लिए अन्य सभी पर । अन्यथा आप संपादक को फिर से परिभाषित करेंगे git, crontabआदि


1
यदि आप EDITOR सेट करते हैं, तो अधिकांश प्रोग्राम इसका सम्मान करेंगे।
डी। बेन नोबल

@ D.BenKnoble आप सही हैं। मैंने कोशिश की। अभी के लिए मैं अपना समय और तंत्रिकाओं को बचाना पसंद करता हूं। यह नहीं देख सकता कि वास्तव में क्या चलता है F10, nanoलेकिन मैं हमेशा कुछ तरकीबें बचाकर रखता हूं (शायद F10यह एक समाधान है)। या उस में काम नहीं करता है screen? मुझे याद नहीं है, बस इससे नफरत है)
वासिली सुरिकोव

वैसे भी यह अतीत में ...
Vasilii Suricov
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.