Vi में कई लाइनों को शीघ्रता से इंगित करें


2158

यह तुच्छ होना चाहिए, और यह मदद में भी हो सकता है, लेकिन मैं यह पता नहीं लगा सकता कि इसे कैसे नेविगेट किया जाए। मैं vi में कई लाइनों को जल्दी कैसे इंडेंट करूं?

जवाबों:


2551

>कमांड का उपयोग करें । पांच लाइनों को इंडेंट करने के लिए, 5>>। लाइनों के एक ब्लॉक को चिह्नित करने और इसे इंडेंट करने के लिए, Vjj>तीन लाइनों को इंडेंट करने के लिए (केवल विम)। एक घुंघराले ब्रेसिज़ ब्लॉक को इंडेंट करने के लिए, अपने कर्सर को घुंघराले ब्रेसिज़ में से एक पर रखें और >%ब्लॉक उपयोग के अंदर या कहीं से भी उपयोग करें >iB

यदि आप पाठ के ब्लॉक को चारों ओर से कॉपी कर रहे हैं और इसके नए स्थान में ब्लॉक के इंडेंट को संरेखित करने की आवश्यकता है, तो ]pइसके बजाय उपयोग करें p। यह आसपास के पाठ के साथ चिपके हुए ब्लॉक को संरेखित करता है।

इसके अलावा, shiftwidthसेटिंग आपको नियंत्रित करने की अनुमति देती है कि कितने स्थानों को इंडेंट करना है।


77
मैं> i} (इंडेंट इनर {} ब्लॉक) का उपयोग करता हूं। में काम करता है। यह सुनिश्चित नहीं है कि यह vi में काम करता है।
आर। मार्टिनो फर्नांडिस

11
मेरी समस्या (gVim में) यह है कि कमांड> 2 से अधिक ब्लैंक को इंडेंट करता है (मुझे सिर्फ दो
ब्लैंक

28
@ कामरान: shiftwidthइसे बदलने के तरीके के लिए सेटिंग देखें ।
ग्रेग हेवगिल

4
@MattStevens: आप यहाँ इस घटना के बारे में विस्तृत चर्चा पा सकते हैं: meta.stackexchange.com/questions/9731/…
ग्रेग

5
मैं अक्सर एक पंक्ति में कई बार दृश्य ब्लॉकों को इंडेंट करता हूं, जैसे कि XML फ़ाइल में चिपकाए गए कुछ टैग को ठीक करना। प्रत्येक बार दृश्य मोड में ब्लॉक को फिर से चुनने के बजाय, कोई अंतिम दृश्य ब्लॉक का पुन: उपयोग करने के लिए 'जीवी' का उपयोग कर सकता है। संदर्भ सुपरयुसर.com
डेविड मैन

958

यह उत्तर इस प्रश्न के अन्य उत्तरों और टिप्पणियों को सारांशित करता है, और यह विम प्रलेखन और विम विकी के आधार पर अतिरिक्त जानकारी जोड़ता है । संक्षिप्तता के लिए, यह उत्तर Vi और विम-विशिष्ट आदेशों के बीच अंतर नहीं करता है।

नीचे दिए गए आदेशों में, "पुनः इंडेंट" का अर्थ है "आपकी इंडेंटेशन सेटिंग्स के अनुसार इंडेंट लाइनें ।" shiftwidthप्राथमिक चर है जो इंडेंटेशन को नियंत्रित करता है।

जनरल कमांड्स

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
5>>  Indent 5 lines
5==  Re-indent 5 lines

>%   Increase indent of a braced or bracketed block (place cursor on brace first)
=%   Reindent a braced or bracketed block (cursor on brace)
<%   Decrease indent of a braced or bracketed block (cursor on brace)
]p   Paste text, aligning indentation with surroundings

=i{  Re-indent the 'inner block', i.e. the contents of the block
=a{  Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block

>i{  Increase inner block indent
<i{  Decrease inner block indent

आप के {साथ बदल सकते हैं }या B, जैसे =iBएक मान्य ब्लॉक इंडेंट कमांड है। इन आदेशों को आज़माने के लिए एक अच्छे उदाहरण के लिए "इंड अ कोड ब्लॉक" पर एक नज़र डालें ।

यह भी याद रखें

.    Repeat last command

, इसलिए इंडेंटेशन कमांड को आसानी से और आसानी से दोहराया जा सकता है।

पूर्ण फ़ाइलों को फिर से इंडेंट करना

एक अन्य सामान्य स्थिति के लिए स्रोत फ़ाइल में निश्चित इंडेंटेशन की आवश्यकता होती है:

gg=G  Re-indent entire buffer

आप इस विचार को कई फ़ाइलों तक बढ़ा सकते हैं:

" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall

या कई बफ़र्स:

" Re-indent all open buffers:
:bufdo normal gg=G:wall

विजुअल मोड में

Vjj> Visually mark and then indent three lines

इन्सर्ट मोड में

ये आदेश वर्तमान लाइन पर लागू होते हैं:

CTRL-t   insert indent at start of line
CTRL-d   remove indent at start of line
0 CTRL-d remove all indentation from line

पूर्व आज्ञा

ये तब उपयोगी होते हैं जब आप अपने कर्सर को बिना हिलाए एक विशिष्ट श्रेणी की लाइनों को इंडेंट करना चाहते हैं।

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

मार्करों का उपयोग करके इंडेंट करना

एक और दृष्टिकोण मार्करों के माध्यम से है :

ma     Mark top of block to indent as marker 'a'

... स्थान समाप्त करने के लिए कर्सर ले जाएं

>'a    Indent from marker 'a' to current location

चर जो इंडेंटेशन को नियंत्रित करते हैं

आप इन्हें अपने .vimrc फ़ाइल में सेट कर सकते हैं ।

set expandtab       "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4    "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4   "Indent by 4 spaces when pressing <TAB>

set autoindent      "Keep indentation from previous line
set smartindent     "Automatically inserts indentation in some cases
set cindent         "Like smartindent, but stricter and more customisable

विम में फिल्टाइप के आधार पर बुद्धिमान इंडेंटेशन है। इसे अपने .vimrc में जोड़ने का प्रयास करें:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

संदर्भ


13
यह जवाब और ऊपर वाला दोनों महान थे। लेकिन मैंने इसे +1 किया क्योंकि इसने मुझे 'डॉट' ऑपरेटर की याद दिला दी, जो आखिरी कमांड को दोहराता है। यह अत्यंत उपयोगी है जब एक पूरे ब्लॉक को इंडेंट करने की आवश्यकता होती है, तो प्रेस रखने की आवश्यकता के बिना कई शिफ्टस्पेस (या इंडेंटेशन) >}। धन्यवाद लंबा
अमित

1
5 >> इंडेंट 5 लाइन: यह कमांड 5 लाइन नहीं, बल्कि पांचवीं लाइन को इंडेंट करता है । क्या यह मेरी VIM सेटिंग्स के कारण हो सकता है, या आपका शब्दांकन गलत है?
विप्रोज़न 16

1
@Wipqozn - यह अजीब है। यह निश्चित रूप से मेरे लिए अगली पांच लाइनों का संकेत देता है, जिनका परीक्षण विम 7.2.330 पर किया गया है।
ire_and_curses 16

8
> 42gg ​​इंडेंट जहां से आप लाइन में 42 हैं।
स्टीव

महान सारांश! यह भी ध्यान दें कि "इंडेंट इनसाइड ब्लॉक" और "इंडेंट ऑल ब्लॉक" (<i {> ए {आदि) कोष्ठक और कोष्ठक के साथ भी काम करता है:> ए (<i) आदि (और जब मैं उस पर हूं, तो) <> के अलावा, वे d, c, y आदि के साथ भी काम करते हैं)
aqn

123

एक बड़ा चयन होगा:

gg=G

यह वास्तव में तेज़ है, और सब कुछ इंडेंट हो जाता है ;-)


1
मैंने एक XML फ़ाइल बनाई है और सिंटैक्स हाइलाइटिंग चालू किया है। टंकण gg=Gबस हर पंक्ति को स्थिति से शुरू करता है 1. सभी सफेद रिक्त स्थान हटा दिए गए हैं। क्या एक्सएमएल के लिए कुछ और विशिष्ट है?
asgs

2
मुझे लगता है कि set cindentvimrc में होना चाहिए या :set cindentउस कमांड को चलाने से पहले चलना चाहिए
Amanuel Nega

3
मुझे लगता है कि सिंडींट को पहले सेट किया जाना चाहिए। और मुझे लगता है कि यह केवल cstyle प्रोग्रामिंग भाषाओं के लिए काम करता है।
अमानुएल नेगा

110

सी-इंडेंटिंग इंडेंटेशन के लिए भी यह प्रयास करें । क्या :help =अधिक जानकारी के लिए:

={

आप जिस वर्तमान कोड ब्लॉक में हैं, उसका ऑटो-इंडेंट करेंगे।

या केवल:

==

वर्तमान लाइन को ऑटो-इंडेंट करने के लिए।


2
मेरे लिए काम नहीं करता है, बस अपने कर्सर को 'वर्तमान कोड ब्लॉक i'm इन' के शुरुआती ब्रेस से ऊपर की रेखा तक डंप करता है।
अंडरस्कोर_ड

79

अधिक दृश्य लोगों के लिए मुख्य प्रेस:

  1. कमांड मोड दर्ज करें:
    Escape

  2. इंडेंट करने के लिए क्षेत्र की शुरुआत के आसपास घूमें:
    hjkl

  3. एक ब्लॉक शुरू करें:
    v

  4. इंडेंट करने के लिए क्षेत्र के अंत में घूमें:
    hjkl

  5. (वैकल्पिक) आप चाहते हैं इंडेंटेशन स्तर की संख्या लिखें
    0..9

  6. ब्लॉक पर इंडेंटेशन निष्पादित करें:
    >


2
यह बहुत अच्छा है, लेकिन यह रिक्त स्थान का उपयोग करता है न कि टैब का। इसे ठीक करने का कोई संभावित तरीका?
शेन रीस्टल

12
यदि टैब के बजाय इसका उपयोग रिक्त स्थान है, तो शायद इसका कारण यह है कि आपके पास रिक्त स्थान का उपयोग करने के लिए इंडेंटेशन सेट है। =)।
केंट फ्रेड्रिक

4
जब 'एक्सपेंडाटैब' विकल्प बंद होता है (यह डिफ़ॉल्ट है) विम इंडेंट बनाने के लिए यथासंभव <Tab> s का उपयोग करता है। ((सहायता:>)
केंट फ्रेड्रिक

1
केवल टैब / स्पेस संबंधी विम सेटिंग जो मैंने बदली है वह है: सेट टैबटॉप = 3। यह वास्तव में हर बार जब मैं उपयोग करता हूं तो इसे सम्मिलित करता हूं >>: "<टैब> <स्पेस> <स्पेस>"। एक ब्लॉक को इंडेंट करने के साथ। कोई विचार?
शेन रीस्टल

3
"रिक्त स्थान बनाम टैब" के लिए आप जिन तीन सेटिंग्स को देखना चाहते हैं, वे हैं 1. टैबस्टॉप 2. शिफ्टर 3. एक्सपेंडेब। आपके पास संभवत: "शिफ्टर = 5 नॉफ़ेंडाटैब" है, इसलिए एक "टैब" 3 रिक्त स्थान है, और एक इंडेंटेशन स्तर "5" स्थान है, इसलिए यह 1 टैब और 2 रिक्त स्थान के साथ 5 बनाता है।
केंट फ्रेड्रिक

66

सभी आज्ञाओं का स्वामी है
gg=G

यह पूरी फाइल को इंडेंट करता है!

और नीचे कुछ सरल और सुरुचिपूर्ण आदेशों का उपयोग Vim या gVim में जल्दी से लाइनों को इंडेंट करने के लिए किया जाता है।

वर्तमान लाइन को इंडेंट करने के लिए
==

वर्तमान लाइन के नीचे की सभी लाइनों को इंडेंट करने के लिए

=G

nवर्तमान लाइन के नीचे की रेखाओं को इंडेंट करने के लिए

n==

उदाहरण के लिए, वर्तमान लाइन के नीचे 4 लाइनों को इंडेंट करने के लिए

4==

कोड के एक ब्लॉक को इंडेंट करने के लिए, ब्रेसिज़ में से एक पर जाएं और कमांड का उपयोग करें

=%

ये कई लाइनों को इंडेंट करने के लिए सबसे सरल, अभी तक शक्तिशाली कमांड हैं।


3
यह सिर्फ में है vim, नहीं vi
रोजोमोक

3
मेरे Solaris या AIX बक्से पर नहीं। बराबर कुंजी हमेशा मेरे मानक तदर्थ मैक्रो असाइनमेंट में से एक रही है। क्या आप सुनिश्चित हैं कि आप vimउस पर नहीं देख रहे हैं जो इससे जुड़ा हुआ है vi?
रोजोमोक जुले

3
हाँ, लिनक्स पर, vi लगभग हमेशा विम का लिंक है। चलाने की कोशिश करें: वी के अंदर वी कमांड।
रोजोमोक

4
मुझे इस तरह के उत्तर पसंद हैं: स्पष्ट, सटीक और रसीला। डेबियन जेसी में मेरे लिए काम किया। धन्यवाद, @SJain
digitai

1
चूंकि मैं vim का उपयोग करता हूं, vi का नहीं, बहुत सुंदर इस उत्तर का है। धन्यवाद।
डैन निसेनबाम

66

पहले से दिए गए और स्वीकार किए गए उत्तर के अलावा , एक मार्कर रखना भी संभव है और फिर वर्तमान कर्सर से मार्कर तक सब कुछ इंडेंट करें।

इस प्रकार, maजहाँ आप अपने इंडेंट ब्लॉक के ऊपर चाहते हैं , वहाँ दर्ज करें, जहाँ तक ज़रूरत हो, नीचे कर्सर करें और फिर टाइप करें >'a(ध्यान दें कि " a" किसी भी मान्य मार्कर नाम के लिए प्रतिस्थापित किया जा सकता है)। यह कभी कभी से अधिक आसान है 5>>या vjjj>


1
यह वास्तव में उपयोगी है। मैं यह देखने जा रहा हूं कि सभी इसके साथ काम करते हैं। मुझे पता है कि डीएए और y'a, और क्या है?
user606723

2
यह बहुत उपयोगी है क्योंकि यह इस बात की गणना करने से बचता है कि आप कितनी लाइनों को इंडेंट करना चाहते हैं।
झिग्गी

29

पाठ की शुरुआत में जाएं

  • vदृश्य मोड के लिए दबाएँ ।
  • पाठ को हाइलाइट करने के लिए उपयोग up/ downतीर।
  • =आपके द्वारा हाइलाइट की गई सभी लाइनों को इंडेंट करने के लिए दबाएं ।

28

प्रस्तावित समाधानों के साथ, मैं एक समय में चीजों को एक पैराग्राफ करना पसंद करता हूं >}


2
हाँ, और यही कारण है कि मेरे बड़े पीव में से एक एक अन्यथा खाली लाइन पर सफेद स्थान है: वे "पैराग्राफ" की धारणा को गड़बड़ करते हैं।
अकन

28

जब आप किसी ब्लॉक का चयन करते हैं >और इंडेंट करने के लिए उपयोग करते हैं, तो यह इंडेंट करता है फिर सामान्य मोड में वापस चला जाता है। मेरे पास मेरी .vimrc फ़ाइल में यह है:

vnoremap < <gv

vnoremap > >gv

इससे आप जितनी बार चाहें अपने चयन को इंडेंट कर सकते हैं।


17
कई बार चयन को इंडेंट करने के लिए, आप बस प्रेस कर सकते हैं। पिछले आदेश को दोहराने के लिए।
सूंदर -

2
के साथ समस्या। इस स्थिति में आपको अपनी उंगलियों को हिलाना होगा। @ माइक के समाधान (एक ही मैं का उपयोग करें) के साथ आप पहले से ही इंडेंट कुंजी पर अपनी उंगलियां डाल चुके हैं और बस स्विच करने और कुछ और करने के बजाय इंडेंटिंग रखने के लिए इसे अजीब रख सकते हैं। पीरियड का उपयोग करने में अधिक समय लगता है क्योंकि आपको अपने हाथों को हिलाना पड़ता है और इसके लिए अधिक विचार की आवश्यकता होती है क्योंकि यह एक दूसरा, अलग, ऑपरेशन है।
मासूकॉमी

21

मान लीजिए कि आप अपने कोड को इंडेंट करने के लिए 2 स्थानों का उपयोग करते हैं। प्रकार:

:set shiftwidth=2
  • प्रकार v(दृश्य ब्लॉक संपादन मोड में प्रवेश करने के लिए)
  • कर्सर को तीर कुंजियों के साथ (या h/ j/ k/ l) उन लाइनों को हाइलाइट करने के लिए ले जाएं जिन्हें आप इंडेंट या अनइंडेंट करना चाहते हैं।

फिर:

  • >एक बार इंडेंट करने के लिए टाइप करें (2 स्पेस)।
  • 2>दो बार (4 रिक्त स्थान) इंडेंट करने के लिए टाइप करें।
  • 3>तीन बार इंडेंट करने के लिए टाइप करें (6 स्पेस)।
  • ...
  • <एक बार (2 रिक्त स्थान) को एक करने के लिए टाइप करें।
  • 2<दो बार (4 रिक्त स्थान) को एक करने के लिए टाइप करें।
  • 3<तीन बार अनइंडेंट (6 रिक्त स्थान) टाइप करें।
  • ...

तुम्हें नया तरीका मिल गया है।

( खाली लाइनों को इंडेंट नहीं मिलेगा, जो मुझे लगता है कि अच्छा है। )


मुझे इंडेंटिंग ब्लॉक्स के लिए (g) विम डॉक्युमेंट का जवाब मिला:

:help visual-block
/indent

यदि आप कमांड को एक गिनती देना चाहते हैं, तो ऑपरेटर चरित्र टाइप करने से ठीक पहले ऐसा करें: "v {Move-around} 3>" (मूव्स 3 इंडेंट को दाईं ओर ले जाएं)।


18

विम की यूआई की सुंदरता इसकी स्थिरता है। एडिटिंग कमांड कमांड और कर्सर चाल से बने होते हैं। कर्सर चाल हमेशा समान होते हैं:

  • Hस्क्रीन के शीर्ष पर, Lनीचे से, Mमध्य तक
  • nG लाइन पर जाने के लिए n , G, फ़ाइल की तह तक अकेले ggशीर्ष पर
  • nNपिछले करने के लिए , अगले खोज मैच में जाने के लिए
  • } पैराग्राफ के अंत के लिए
  • % कोष्ठक या टैग प्रकार के साथ अगले मिलान ब्रैकेट में
  • enter अगली पंक्ति के लिए
  • 'xx को चिह्नित करने के लिए जहां x एक अक्षर या अन्य है '
  • कई और, सहित wऔर Wशब्द के लिए, $या 0लाइन के सुझावों के लिए, आदि, जो यहां लागू नहीं होते हैं क्योंकि लाइन आंदोलनों नहीं हैं ।

इसलिए, vim का उपयोग करने के लिए आपको कर्सर को स्थानांतरित करना सीखना होगा और आदेशों का एक प्रदर्शन याद रखना होगा, उदाहरण के लिए, >इंडेंट करने के लिए (और <"अतिरिक्त")।

इस प्रकार, स्क्रीन तुम क्या की चोटी पर कर्सर की स्थिति से लाइनों इंडेंट के लिए >H, >Gफ़ाइल की तह तक इंडेंट करने के लिए।

यदि, टाइप करने के बजाय >H, आप टाइप dHकरते हैं , तो आप लाइनों के उसी ब्लॉक को हटा रहे हैं, cHइसे बदलने के लिए, आदि।

कुछ कर्सर आंदोलनों विशिष्ट आदेशों के साथ बेहतर फिट होते हैं। विशेष रूप से, %कमांड पूरे HTML या XML ब्लॉक को इंडेंट करने के लिए आसान है। यदि फ़ाइल में सिंटैक्स हाइलाइट किया गया है ( :syn on) तो टैग के पाठ में कर्सर सेट करना (जैसे, <div> के "i" में और प्रवेश >%करना बंद </ div> टैग के लिए प्रेरित होगा।

यह है कि विम कैसे काम करता है: किसी को केवल कर्सर आंदोलनों और आदेशों को याद रखना है, और उन्हें कैसे मिश्रण करना है। तो इस प्रश्न का मेरा उत्तर होगा "उन लाइनों के ब्लॉक के एक छोर पर जाएं जिन्हें आप इंडेंट करना चाहते हैं, और फिर >कमांड और ब्लॉक के दूसरे छोर पर एक आंदोलन टाइप करें " अगर इंडेंट को लाइनों को शिफ्ट करने के रूप में व्याख्या की जाती है, =अगर इंडेंट सुंदर मुद्रण के रूप में व्याख्या की है।


2
मैं कहूंगा कि vi / vim ज्यादातर सुसंगत है। उदाहरण के लिए, D, S और Y के समान व्यवहार नहीं करता है! :)
अक

14

यह करो:

$vi .vimrc

और इस लाइन को जोड़ें:

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

यह केवल एक cpp फ़ाइल के लिए है। आप इसे किसी अन्य फ़ाइल प्रकार के लिए भी कर सकते हैं, वह भी केवल फ़िलाटाइप को संशोधित करके ...


13

आप norm iपंक्ति के आरंभ में दिए गए पाठ को सम्मिलित करने के लिए कमांड का उपयोग कर सकते हैं । 2-10 लाइनों से पहले 10 रिक्त स्थान सम्मिलित करने के लिए:

:2,10norm 10i 

याद रखें कि कमांड के अंत में एक स्पेस कैरेक्टर होना चाहिए - यह वह कैरेक्टर होगा जिसे हम डालना चाहते हैं। हम किसी भी अन्य पाठ के साथ एक लाइन भी इंडेंट कर सकते हैं, उदाहरण के लिए पांच अंडरस्कोर वर्णों वाली फाइल में हर लाइन इंडेंट करने के लिए:

:%norm 5i_

या कुछ और भी फैंसी:

:%norm 2i[ ]

अधिक व्यावहारिक उदाहरण बैश / पायथन / आदि कोड के साथ # वर्ण टिप्पणी कर रहा है:

:1,20norm i#

के xबजाय फिर से इंडेंट उपयोग के लिए i। उदाहरण के लिए, पहले 5 वर्णों को प्रत्येक पंक्ति से हटाने के लिए:

:%norm 5x

1
यह फ़ाइल के बाईं ओर से शुरू होता है ... ब्लॉक की वर्तमान स्थिति नहीं
Eliethesaiyan

12

इसका उपयोग करने का एक त्वरित तरीका VISUAL MODEउसी प्रक्रिया का उपयोग करता है जो कोड के एक ब्लॉक पर टिप्पणी करता है।

यह उपयोगी है यदि आप अपने निर्देशों को बदलना shiftwidthया किसी भी setनिर्देश का उपयोग नहीं करना पसंद करते हैं और TABS या SPACES या किसी अन्य चरित्र के साथ काम करने के लिए पर्याप्त लचीला है।

  1. ब्लॉक पर शुरुआत में स्थिति कर्सर
  2. वी स्विच करने के लिए -- VISUAL MODE --
  3. इंडेंट होने के लिए टेक्स्ट का चयन करें
  4. :प्रॉम्प्ट पर स्विच करने के लिए टाइप करें
  5. 3 प्रमुख स्थानों के साथ प्रतिस्थापित:

    :'<,'>s/^/ /g

  6. या प्रमुख टैब के साथ प्रतिस्थापित करना:

    :'<,'>s/^/\t/g

  7. संक्षिप्त विवरण:

    '<,'> - नेत्रहीन चयनित सीमा के भीतर

    s/^/ /g - पूरी रेंज के भीतर हर लाइन की शुरुआत में 3 स्पेस डालें

    (या)

    s/^/\t/g- Tabपूरी सीमा के भीतर हर लाइन की शुरुआत में डालें


12

>}या >{वर्तमान लाइन से अगले पैराग्राफ तक इंडेंट

<}या <{उसी संयुक्त राष्ट्र


11

मुझे इंडेंटेशन के लिए टेक्स्ट मार्क करना पसंद है:

  1. पाठ की पंक्ति के आरंभ में जाएं ma( फिर a'm'ark से लेबल: यह कोई भी अक्षर हो सकता है)
  2. पाठ की अंतिम पंक्ति और प्रकार पर जाएं mz(फिर से, zकोई भी पत्र हो सकता है)
  3. :'a,'z>या :'a,'z<इंडेंट या एसेन्टेंट (क्या यह एक शब्द है?)
  4. देखा! पाठ को स्थानांतरित कर दिया गया है (रिक्त स्थान रिक्त स्थान के साथ खाली रहते हैं)

पुनश्च: आप :'a,'zकिसी भी ऑपरेशन (d, y, s ///, आदि) के लिए एक सीमा को चिह्नित करने के लिए तकनीक का उपयोग कर सकते हैं जहां आप लाइनों, संख्याओं, या का उपयोग कर सकते हैं %


10

:help left

में ex modeआप उपयोग कर सकते हैं :leftया :leसंरेखित लाइनों के लिए एक निर्धारित राशि। विशेष रूप से, [रेंज] में लाइनों को संरेखित:left करेंगे । यह इंडेंट को लाइनों में [इंडेंट] (डिफ़ॉल्ट 0) पर सेट करता है।

:%le3या :%le 3 या :%left3या :%left 3तीन रिक्त स्थान के साथ गद्दी से पूरी फ़ाइल संयोजित करेगा।

:5,7 le 3 तीन स्थानों के साथ उन्हें पैडिंग करके 7 के माध्यम से 5 लाइनों को संरेखित करेगा।

:leबिना किसी मूल्य के या :le 00 की गद्दी के साथ संरेखित किया जाएगा।

यह विम और जीवीएम में काम करता है।


1
बहुत बढ़िया, बस मैं जो देख रहा था (एक विशिष्ट संख्या में स्थान सम्मिलित करने का एक तरीका - मार्कडाउन कोड के लिए 4 स्थान - मेरे सामान्य इंडेंट को ओवरराइड करने के लिए)। मेरे मामले में मैं दृश्य मोड में लाइनों की एक विशिष्ट संख्या को इंडेंट करना चाहता था, इसलिए लाइनों को हाइलाइट :'<,'>le4करने के लिए , फिर रिक्त स्थान सम्मिलित करने के लिए शिफ्ट-वी । धन्यवाद!
सबफुज़ियन

9

मेरे लिए, मैकविम (विजुअल) समाधान था, माउस और प्रेस ">" के साथ चयन करें, लेकिन निम्न पंक्तियों को "~ //vimrc" में डालने के बाद से मुझे टैब के बजाय रिक्त स्थान पसंद हैं:

set expandtab
set tabstop=2
set shiftwidth=2

कमांड-लाइन (Terminal.app) से मैकविम को कॉल करने में सक्षम होना उपयोगी है, इसलिए चूंकि मेरे पास निम्न सहायक निर्देशिका "~ / बिन" है, जहां मैं "मैकविम" नामक एक स्क्रिप्ट रखता हूं:

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

और निश्चित रूप से "~ / .bashrc" में:

export PATH=$PATH:$HOME/bin

MacPorts "~ / / .profile" के साथ बहुत गड़बड़ करता है, इसलिए PATH पर्यावरण चर काफी लंबा हो सकता है।


9

5== वर्तमान कर्सर स्थिति से पांच लाइनों को इंडेंट करेगा।

तो आप पहले कोई भी नंबर टाइप कर सकते हैं ==। यह लाइनों की संख्या को इंगित करेगा। यह कमांड मोड में है।

gg=G ऊपर से नीचे तक पूरी फाइल को इंडेंट करेगा।


9

मुझे टिप्पणियों में एक विधि नहीं मिली, इसलिए मैं इसे साझा करूँगा (मुझे लगता है कि केवल विम):

  1. Esc कमांड मोड में प्रवेश करने के लिए
  2. उस अंतिम पंक्ति के पहले वर्ण पर जाएं जिसे आप इंडेंट करना चाहते हैं
  3. Ctrl+ Vब्लॉक चयन शुरू करने के लिए
  4. पहली पंक्ति के उस पहले वर्ण पर जाएँ जिसे आप इंडेंट करना चाहते हैं
  5. Shift+ Iविशेष डालने मोड में प्रवेश करने के लिए
  6. उदाहरण के लिए (उदाहरण के लिए) आपको इंडेंट करने के लिए जितने स्थान / टैब चाहिए उतने टाइप करें
  7. प्रेस Escऔर रिक्त स्थान सभी लाइनों में दिखाई देंगे

यह तब उपयोगी होता है जब आप vimrcसंपादन करते समय इसे बदलने के लिए इंडेंटेशन / टैब सेटिंग्स बदलना या उन्हें याद नहीं रखना चाहते हैं।

अनइंडेंट करने के लिए मैं एक ही Ctrl+ Vब्लॉक सिलेक्ट स्पेस का चयन करता हूं और इसके साथ डिलीट करता हूं D


9

मुझे नहीं पता कि इस तरह से एक सरल उत्तर ढूंढना इतना मुश्किल क्यों है ...

यह जानने के लिए मुझे खुद बहुत संघर्ष करना पड़ा। यह बहुत सरल है:

  • .vimrcहोम डायरेक्टरी के तहत अपनी फाइल को एडिट करें ।
  • इस लाइन को जोड़ें

    set cindent
    

    अपनी फ़ाइल में जहाँ आप ठीक से इंडेंट करना चाहते हैं।

  • सामान्य / कमांड मोड में

    10==   (This will indent 10 lines from the current cursor location)
    gg=G   (Complete file will be properly indented)
    

8
:line_num_start,line_num_end>

उदाहरण के लिए,

14,21> shifts line number 14 to 21 to one tab

अधिक टैब के लिए '>' प्रतीक बढ़ाएं।

उदाहरण के लिए,

14,21>>> for three tabs

1
इसे हल करने के लिए स्पष्ट रूप से बहुत सारे तरीके हैं, लेकिन इसे लागू करना सबसे आसान है, क्योंकि लाइन नंबर डिफ़ॉल्ट रूप से दिखाते हैं और इसके लिए गणित की आवश्यकता होती है।
होल्डऑफहुंगर

@HoldOffHunger लाइन नंबर डिफ़ॉल्ट रूप से नहीं दिखते हैं। आपको :set numberलाइन नंबरों को टॉगल करने की आवश्यकता है (वे डिफ़ॉल्ट रूप से बंद हैं ), या set numberअपने vimrc में डाल दें ।
ड्राईलैब्रेल

7

पायथन का उपयोग करते हुए, मुझे लगता है कि खुद को एक से अधिक इंडेंट द्वारा ब्लॉकों को स्थानांतरित करने की आवश्यकता है। आप ब्लॉक चयन के किसी भी तरीके का उपयोग करके ऐसा कर सकते हैं, और उसके बाद ही उन इंडेंट की संख्या दर्ज करें, जिन्हें आप ठीक से कूदना चाहते हैं>

उदाहरण के लिए, V5j3>पांच लाइनों को तीन बार इंडेंट करेगा - यदि आप इंडेंट के लिए चार स्थानों का उपयोग करते हैं तो 12 स्थान है।


7

फ़ाइल प्रकार में प्रत्येक पंक्ति को इंडेंट करने के लिए, Escऔर फिर G=gg


6

किसी स्थान पर तुरंत vi में हाइलाइट किए गए कोड को कैसे इंडेंट करें:

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

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

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

  3. तीन स्थानों पर इंडेंट सेट करने के लिए, टाइप करें le 3और एंटर दबाएं। ऐसा प्रतीत होता है::'<,'>le 3

  4. चयनित पाठ तुरंत तीन स्थानों के लिए प्रेरित होता है।

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

  1. Vi में अपनी फ़ाइल खोलें।
  2. अपने कर्सर को कुछ कोड पर रखें
  3. सामान्य मोड में रहें और निम्नलिखित कुंजियों को दबाएँ:

    Vjjjj:le 3
    

    आपने जो किया उसकी व्याख्या:

    V पाठ का चयन करना शुरू करें।

    jjjj चार लाइनों पर तीर, चार लाइनों पर प्रकाश डाला।

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

    le 3 मतलब इंडेंट हाइलाइट किए गए टेक्स्ट की तीन पंक्तियों।

    चयनित कोड तुरंत तीन स्थान इंडेंटेशन में बढ़ा या घटा दिया गया है।

विकल्प 3: इंडेंट बढ़ाने के लिए विजुअल ब्लॉक मोड और विशेष इंसर्ट मोड का उपयोग करें:

  1. Vi में अपनी फ़ाइल खोलें।
  2. अपने कर्सर को कुछ कोड पर रखें
  3. सामान्य मोड में रहें निम्नलिखित कुंजियों को दबाएं:

    Ctrl+V

    jjjj
    

    (पांच बार स्पेसबार दबाएं)

    Esc Shift+i

    सभी हाइलाइट किए गए पाठ को अतिरिक्त पाँच रिक्त स्थान दिए गए हैं।


6

मैं ब्लॉक-मोड दृश्य चयन का उपयोग करता हूं:

  • स्थानांतरित करने के लिए ब्लॉक के सामने जाएं (ऊपर या नीचे)।
  • दृश्य ब्लॉक मोड में प्रवेश करने के लिए Ctrl+ दबाएँ V
  • लाइनों के सामने एक कॉलम चुनने के लिए नेविगेट करें।
  • इन्सर्ट मोड डालने के लिए I( Shift+ I) दबाएँ ।
  • कुछ रिक्त स्थान टाइप करें।
  • प्रेस करें Esc। सभी लाइनें शिफ्ट हो जाएंगी।

यह यूनी-टास्कर नहीं है। यह काम करता हैं:

  • लाइनों के बीच में।
  • सभी लाइनों पर किसी भी स्ट्रिंग को सम्मिलित करने के लिए।
  • एक कॉलम बदलने के लिए ( cइसके बजाय उपयोग करें I)।
  • यान, हटाना, स्थानापन्न, आदि ...

यह बोझिल है, लेकिन यदि आप कोर VIM (उदाहरण के लिए, vim-prettierडिफ़ॉल्ट इंडेंटिंग इंजन के बजाय का उपयोग करके ) के बाहर स्वरूपण करते हैं, तो यह जाने का तरीका है । >अन्यथा प्रीतियर द्वारा किए गए प्रारूपण का उपयोग करेंगे।
ऑलिगॉफ्रेन

मजेदार, मुझे यह कुछ भी लगता है लेकिन बोझिल है। यह एक यूनी-टास्कर नहीं है! इस विधि को सीखना इंडेंटिंग से परे कई उपयोग हैं।
sqqqrly

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

5
  • कोड के एक ब्लॉक के लिए, {}: =+%

  • चयनित पंक्ति के लिए: Shift+ vअप / डाउन एरो कीज़ का उपयोग करके चयन करें, और फिर दबाएँ =

  • संपूर्ण फ़ाइल के लिए: gg+ =+G

नोट: 'gg' का अर्थ लाइन 1 पर जाना है, '=' इंडेंट कमांड है, और 'G' कर्सर को फाइल के अंत में ले जाता है


4

चार द्वारा सभी फ़ाइल को इंडेंट करने के लिए:

esc 4G=G

3
...क्या? '4 स्थानों से इंडेंट'? नहीं, यह 4 पंक्ति के लिए कूदता है और फिर वर्तमान में चयनित इंडेंट मोड (यदि हो तो) का उपयोग करके फ़ाइल के अंत तक सब कुछ इंगित करता है।
अंडरस्कोर_ड

2
  1. दृश्य लाइन मोड में प्रवेश करने के लिए "SHIFT + v" दबाएँ।
  2. उस पाठ का चयन करें जिसे आप इंडेंट करना चाहते हैं लेकिन कर्सर कुंजी या "जे" और "के" कुंजी का उपयोग कर रहे हैं।
  3. "SHIFT + dot" (> वर्ण) प्रेस करने के लिए।

स्रोत: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html

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