सवाल वीआई में जल्दी से कई लाइनें इंडेंट करें


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


1969
2017-10-25 03:27


मूल




जवाब:


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

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

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


2324
2017-10-25 03:28



<shift> -v भी विम में एक लाइन का चयन करने के लिए काम करता है। - akdom
मैं> i} (इंडेंट आंतरिक {} ब्लॉक) का उपयोग करता हूं। विम में काम करता है। यकीन नहीं है कि यह vi में काम करता है। - R. Martinho Fernandes
मेरी समस्या (जीवीआईएम में) यह है कि कमांड> 2 रिक्त स्थान से अधिक इंडेंट करता है (मुझे केवल दो रिक्त स्थान चाहिए लेकिन> 5 रिक्त स्थान की तरह इंडेंट करें) - Kamran Bigdely
@ कामरान: देखें shiftwidth इसे बदलने के तरीके के लिए सेटिंग। - Greg Hewgill
@MattStevens: आप इस घटना के बारे में विस्तारित चर्चा यहां पा सकते हैं: meta.stackexchange.com/questions/9731/... - Greg Hewgill


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

नीचे दिए गए आदेशों में, "पुनः इंडेंट" का अर्थ है "इंडेंट लाइनें आपके अनुसार इंडेंटेशन सेटिंग्स। " 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 3 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

संदर्भ


887
2018-03-06 17:29



यह जवाब दोनों और इसके ऊपर एक महान थे। लेकिन मैंने इसे +1 किया क्योंकि यह मुझे 'डॉट' ऑपरेटर की याद दिलाता है, जो अंतिम कमांड को दोहराता है। ये है अत्यंत उपयोगी होने पर दबाव डालने की आवश्यकता के बिना एक पूरे ब्लॉक को कई shiftspaces (या इंडेंटेशन) इंडेंट करने की आवश्यकता होती है >}। बहुत लंबा धन्यवाद - Amit
5 >> इंडेंट 5 लाइनें: यह कमांड इंडेंट करता है पांचवां लाइन, 5 लाइनों नहीं। क्या यह मेरी वीआईएम सेटिंग्स के कारण हो सकता है, या आपका शब्द गलत है? - Wipqozn
@Wipqozn - यह अजीब है। यह निश्चित रूप से मेरे लिए अगले पांच लाइनों को इंडेंट करता है, जो कि वीम 7.2.330 पर परीक्षण किया गया है। - ire_and_curses
> 42gg ​​इंडेंट जहां से आप 42 लाइन पर हैं। - Steve
महान सारांश! यह भी ध्यान रखें कि "ब्लॉक के अंदर इंडेंट" और "इंडेंट सभी ब्लॉक" (<i {> a {आदि) भी ब्रांड्स और ब्रैकेट के साथ काम करता है:> a (<i] आदि (और जब मैं इसमें हूं, में <> के अलावा, वे डी, सी, वाई आदि के साथ भी काम करते हैं) - aqn


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

gg=G

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


116
2018-01-20 21:11



मेरे पास एक एक्सएमएल फ़ाइल है और सिंटैक्स हाइलाइटिंग चालू है। टाइपिंग gg=G बस स्थिति से शुरू होने वाली प्रत्येक पंक्ति डालता है 1. सभी सफेद रिक्त स्थान हटा दिए गए हैं। क्या एक्सएमएल के लिए कुछ और विशिष्ट है? - asgs
stackoverflow.com/questions/7600860/... - Johan
मुझे लगता है set cindent vimrc में होना चाहिए या भागना चाहिए :set cindent उस आदेश को चलाने से पहले - Amanuel Nega
मुझे लगता है कि सिंडेंट पहले सेट किया जाना चाहिए। और @asgs मुझे लगता है कि यह केवल cstyle प्रोग्रामिंग भाषाओं के लिए काम करता है। - Amanuel Nega


इसके लिए भी कोशिश करें सी-इंडेंट इंडेंटेशन, करो :help = अधिक जानकारी के लिए:

={

यह उस मौजूदा कोड ब्लॉक को स्वतः इंडेंट करेगा जिसमें आप हैं।

या केवल:

==

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


105
2017-10-25 04:21



मेरे लिए काम नहीं करता है, बस मेरे कर्सर को 'वर्तमान कोड ब्लॉक में हूं' के उद्घाटन ब्रेस के ऊपर लाइन पर डंप करता है। - underscore_d


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

  1. कमांड मोड दर्ज करें:
    पलायन 

  2. इंडेंट के लिए क्षेत्र की शुरुआत में चारों ओर ले जाएं:
    jकश्मीरएल 

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

  4. क्षेत्र के अंत में इंडेंट के लिए चारों ओर ले जाएं:
    jकश्मीरएल 

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

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


73
2017-10-25 09:16



यह बहुत अच्छा है, लेकिन यह रिक्त स्थान का उपयोग करता है और टैब नहीं। इसे ठीक करने का कोई भी संभावित तरीका? - Shane Reustle
यदि यह टैब के बजाए रिक्त स्थान का उपयोग कर रहा है, तो संभवतः क्योंकि आपके पास रिक्त स्थान का उपयोग करने के लिए इंडेंटेशन सेट है। =)। - Kent Fredric
जब 'expandtab' विकल्प बंद होता है (यह डिफ़ॉल्ट है) Vim इंडेंट बनाने के लिए जितना संभव हो सके <Tab> s का उपयोग करता है। (: सहायता:>) - Kent Fredric
मैंने जो टैब / स्पेस से संबंधित विम सेटिंग बदल दी है वह है: टैबस्टॉप = 3 सेट करें। यह वास्तव में हर बार जब मैं उपयोग करता हूं >>: "<tab> <space> <space>"। एक ब्लॉक इंडेंट करने के साथ ही। कोई विचार? - Shane Reustle
"रिक्त स्थान बनाम टैब" के लिए आप जिन तीन सेटिंग्स को देखना चाहते हैं वे हैं 1. टैबस्टॉप 2. शिफ्टविड्थ 3. विस्तारटैब। आपके पास शायद "shiftwidth = 5 noexpandtab" है, इसलिए एक "टैब" 3 रिक्त स्थान है, और एक इंडेंटेशन स्तर "5" रिक्त स्थान है, इसलिए यह 5 टैब के साथ 5 और 2 रिक्त स्थान बनाता है। - Kent Fredric


पहले से दिए गए और स्वीकार किए गए उत्तर के अलावा, मार्कर लगाने और फिर मौजूदा कर्सर से मार्कर तक सब कुछ इंडेंट करना भी संभव है। इस प्रकार, दर्ज करें ma जहां आप अपने इंडेंट ब्लॉक के शीर्ष चाहते हैं, जहां तक ​​आपको आवश्यकता हो, कर्सर नीचे रखें और फिर टाइप करें >'a (ध्यान दें कि "a"किसी वैध मार्कर नाम के लिए प्रतिस्थापित किया जा सकता है)। यह कभी-कभी आसान होता है 5>> या vjjj>


62
2017-10-25 04:00



यह वास्तव में उपयोगी है। मुझे यह देखने की ज़रूरत है कि इसके साथ क्या काम करता है। मुझे पता है डी और एक, और क्या? - user606723
यह बहुत उपयोगी है क्योंकि यह गिनने की आवश्यकता से बचाता है कि आप कितनी लाइनें इंडेंट करना चाहते हैं। - ziggy


सभी आदेशों का मालिक है
gg=G

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

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

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

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

=G

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

n==

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

4==

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

=%

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


60
2018-04-18 18:41



यह बस में है vim, नहीं vi। - rojomoke
@rojomoke: नहीं, यह vi में भी काम करता है - Sagar Jain
मेरे सोलारिस या एईक्स बॉक्स पर नहीं, यह नहीं है। बराबर कुंजी हमेशा मेरे मानक विज्ञापन इस मैक्रो असाइनमेंट में से एक रहा है। क्या आप वाकई देख रहे हैं कि आप एक नहीं देख रहे हैं vim जैसा कि से जुड़ा हुआ है vi? - rojomoke
हाँ, लिनक्स पर, vi लगभग हमेशा एक लिंक है। Vi के अंदर आदेश कमांड चलाने का प्रयास करें। - rojomoke
मुझे इस तरह के उत्तर पसंद हैं: स्पष्ट, सटीक और संक्षेप में। डेबियन जेसी में मेरे लिए काम किया। धन्यवाद, @ एसजेन - datelligence