2012-02-15 17 views
33

डिफ़ॉल्ट विम खरोज shiftwidth रिक्त स्थानविम: एक अंतरिक्ष (नहीं shiftwidth रिक्त स्थान) के साथ इंडेंट

उदा मांगपत्र आदेश

>> Indent line by shiftwidth spaces 
<< De-indent line by shiftwidth spaces 

एक या n (जहां n! = Shiftwidth) अंतरिक्ष (रों) के साथ इंडेंट करने के लिए कोई तरीका है?

एक तरीका यह है कि ऐसा करने के लिए खड़ी तो, I खड़ी डालने के लिए Ctrl+V साथ ब्लॉक में एक स्तंभ का चयन करने के लिए और फिर एक space और <Esc> टाइप है। लेकिन क्या कोई बेहतर तरीका है?

:set shiftwidth = <number> 

यहाँ details अधिक के लिए एक नज़र:

+2

आप 'sw' को बदलने से क्यों बचना चाहते हैं? यही वह है जो आगे है। – Daenyth

+0

दृश्य रेखा चयन में, '{count}>' '{count} * 'shiftwidth' द्वारा इंडेंट करेगा, जबकि सामान्य मोड में,' {count} 'का उपयोग इंडेंट किए गए लाइनों की गणना करने के लिए किया जाता है। शायद यही वह है जो आप चाहते हैं। ध्यान दें कि दृश्य ब्लॉक चयन के लिए, लेकिन रेखा की शुरुआत के बजाय ब्लॉक के पहले कॉलम से पहले अंतर डाला गया है। – Benoit

उत्तर

29

मुझे यकीन नहीं है कि एक बेहतर तरीका है। लेकिन, यहां कुछ तरीके है कि आप इसे (मैं का वैसे भी सोच सकते हैं कि) कर सकता है ... हैं

आपका दृश्य ब्लॉक समाधान

आप की तरह ने कहा: प्रेस Ctl-V लाइनों आप चाहते हैं का चयन डालने के लिए I दबाएं, और रिक्त स्थान की संख्या दर्ज करें।

खोजें

ऊपर, लेकिन एक छोटे से अधिक लचीला करने के लिए इसी तरह की है - आप 'का चयन पैरा' vip आदेश, या वास्तव में किसी भी सीमा के साथ साथ उपयोग कर सकते हैं: प्रेस v या vip या आप क्या चयन करने के लिए है रेंज, और टाइप :s/^/{n spaces} जहां {n रिक्त स्थान} उन रिक्त स्थानों की संख्या है जिन्हें आप सम्मिलित करना चाहते हैं।

यह थोड़ा और वर्बोज़ है, लेकिन किसी भी सीमा के लिए बहुत अच्छी तरह से काम करता है। बिल्ली, अगर आप पूरी फाइल करना चाहते हैं तो आप Ctl-A कर सकते हैं या आप (ओएस आश्रित) क्या कर सकते हैं और पूरी फ़ाइल को इंडेंट कर सकते हैं (या बस पूरी विज़ुअल मोड चीज़ को छोड़ दें और इसे कमांड मोड करें ... :1,$s/^/{n spaces}

में

ध्यान दें कि आप में /// जब से तुम अंत में किसी भी टैग डाल नहीं कर रहे हैं तीसरे स्लैश शामिल करने के लिए नहीं है।

वैश्विक

हो सकता है कि आप केवल मांगपत्र लाइनों करना चाहते हैं कि कुछ पैटर्न से मेल करें। कहें ... फू को शामिल करने वाली सभी पंक्तियां। कोई समस्या नहीं: :g/foo/s/^/{n spaces}

टाइप करें

ग्लोबल विशेष रूप से आसान है यदि इसके समान रेखा वाले बहु-रेखा खंड। आप बस सामान्य मोड भूमि से बच सकते हैं और अपनी इच्छित लाइनों का चयन कर सकते हैं और तदनुसार इंडेंट कर सकते हैं: :g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}। अंत में उस अतिरिक्त Ctl-V{Enter} के साथ थोड़ा अधिक जटिल लेकिन कुछ परिस्थितियों में उपयोगी है।

उपयोग tabstop और shiftwidth

हाँ, अगर आपके यह एक बहुत कुछ कर - :set ts=2 मुझे क्या करना चाहते हैं और :set et और :set sw=2 और >> का उपयोग करें और << हर किस तरफ ...

एक बनाओ फंक्शन

ठीक है, तो अभी भी पर्याप्त संक्षिप्त नहीं है और किसी भी कारण से आपको यह करने की ज़रूरत है और आपके साथ गड़बड़ नहीं कर सकते, et और ts सेटिंग्स। कोई बात नहीं, बस एक त्वरित समारोह ऊपर लिख सकते हैं और यह एक localleader मानचित्रण दे:

function! AddSpace(num) range 
    let s:counter = 0 
    let s:spaces = '' 
    while s:counter < a:num 
    let s:spaces .= ' ' 
    let s:counter = s:counter + 1 
    endwhile 
    execute a:firstline .','. a:lastline .'s/^/'. s:spaces 
endfunction 

:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter} 

हो सकता है कि सिर्फ इस केवल एक ही जानने से बेहतर है क्या करने के लिए एक ही रास्ता है और अधिक से अधिक जानने?

ctrl + वी, तो जे जे ': le एन', जहां n की संख्या है सब के बाद, कभी कभी सबसे अच्छा समाधान समस्या :)

+0

यह प्रतीत होता है कि खोज विधि का उपयोग करते समय, रिक्त स्थान की रिक्त स्थान पर रिक्त स्थान डाला जाएगा। क्या इससे बचने का एक साफ और चालाक तरीका है? इसके अलावा मैंने पाया कि मुझे एक स्थान के लिए दृष्टि से चयन करने की आवश्यकता है, फिर ':', फिर '<,'> s/^//' एक स्थान के लिए। धन्यवाद! दृश्य ब्लॉक समाधान के लिए – ryanjdillon

+0

+1। यह त्वरित संशोधनों के लिए बिल्कुल सही है – verboze

11

खरोज के लिए डाला अंतरिक्ष वर्णों की संख्या को बदलने के लिए, shiftwidth विकल्प का उपयोग करें।

आप इसे अपने .vimrc फ़ाइल में भी जोड़ सकते हैं।

+1

यह मेरे समय का टन बचाता है। कुडोस! – fruqi

+1

1up। सुझाए गए समाधान में से कुछ काम नहीं करते क्योंकि वे शिफ्टविड्थ सेट किए बिना दावा करते हैं। – yantaq

5

मैं सही ढंग से समझ रहा हूँ, तो आप इस्तेमाल कर सकते हैं पर निर्भर करता है रिक्त स्थान इंडेंट करने के लिए।

http://vim.wikia.com/wiki/Shifting_blocks_visually

20

इंडेंट दृश्य ब्लॉक मोड के साथ रिक्त स्थान तीन से vi में कोड का एक खंड:

  1. आप इंडेंट करने के लिए चाहते हैं कोड के ब्लॉक का चयन करें। सामान्य मोड में Ctrl + V का उपयोग कर और पाठ का चयन करने के लिए नीचे arrowing ऐसा करें। यह चयन किया जाता है, वहीं दर्ज ":" चयनित पाठ का ब्लॉक करने के लिए एक कमांड देने के लिए।

  2. निम्नलिखित आदेश पंक्ति में दिखाई देगा: :'<,'>

  3. 3 रिक्त स्थान, प्रकार le 3 और enter दबाने से मांगपत्र सेट करने के लिए। यह वही है प्रकट होता है: :'<,'>le 3

  4. चयनित पाठ तुरंत 3 रिक्त स्थान के लिए इंडेंट है।

इंडेंट दृश्य लाइन मोड के साथ तीन रिक्त स्थान द्वारा vi में कोड का एक खंड:

  1. छठी में अपनी फ़ाइल खोलें। आप जो किया

    Vjjjj:le 3 
    

व्याख्या:

  • कुछ कोड
  • निम्नलिखित चाबियाँ सामान्य मोड प्रेस में रहो पर अपने कर्सर रखो

    V साधन पाठ का चयन शुरू करते हैं।

    jjjj 4 लाइनों को हाइलाइट करते हुए 4 लाइनों के नीचे तीर।

    : बताता है कि आप हाइलाइट किए गए टेक्स्ट के लिए एक निर्देश दर्ज करेंगे।

    le 3 का अर्थ इंडेंट हाइलाइट किए गए टेक्स्ट 3 लाइनों का है।

  • +0

    यह कमाल है, सिवाय इसके कि ... जब खाली रेखा होती है, तो यह खाली रिक्त स्थान डालती है। वैसे भी इससे बचने के लिए? – ryanjdillon

    +0

    यह बेहतर जवाब है। चुना गया उत्तर बहुत जटिल था, और उस जवाब में विकल्प 1 "आपका विजुअल ब्लॉक समाधान" अधिकांश सिस्टम पर काम नहीं करता है। – user1271772

    +5

    मैं असहमत हूं, क्योंकि बाएं मार्जिन (कॉलम 1/0) से ': le 3' इंडेंट्स के साथ समाधान, लेकिन मुझे लगता है कि ओपी चाहता था कि आगे की स्थिति से टेक्स्ट का ब्लॉक ब्लॉक करें। उदाहरण के लिए, कोड/टेक्स्ट के बेहतर ऊर्ध्वाधर संरेखण के लिए जो बेहतर स्थिति की तुलना में केवल कुछ रिक्त स्थान को बंद कर दिया गया था। –

    3

    प्लेस के निशान कोड के बीच आप इंडेंट करने के लिए चाहते हैं ('एक' और 'बी'):

    <position cursor at top of block> 
    m a 
    <position cursor at bottom of block> 
    m b 
    

    एक कमांड की जगह क्या ऐसा है कि अपने निशान के बीच प्रत्येक न्यू लाइन चरित्र वांछित स्थानों की संख्या से बदला जाता है (इस उदाहरण में, 2 रिक्त स्थान):

    :'a,'bs/^/ /g 
    
    0

    मैं एक vim स्क्रिप्ट के अंदर, रिक्त स्थान की दी गई संख्या, amount द्वारा dedent करना पड़ा। यह काम किया:

    let sw_setting = &shiftwidth 
        set shiftwidth=1 
        exe "normal v" . amount . "<" 
        let &shiftwidth = sw_setting 
    

    एक दुष्प्रभाव यह है कि यह अंतिम दृश्य मोड चयन को रीसेट करता है। इसके बजाय, आप exe... लाइन को संपादित करना चाहेंगे जैसे कि यह "< <" सामान्य मोड में amount बार दोहराया गया है। यही है: normal v3< के बजाय, इसे normal <<<<<< बनाएं, यदि amount है 3.

    संबंधित मुद्दे