यह तुच्छ होना चाहिए, और यह मदद में भी हो सकता है, लेकिन मैं यह पता नहीं लगा सकता कि इसे कैसे नेविगेट किया जाए। मैं vi में कई लाइनों को जल्दी कैसे इंडेंट करूं?
यह तुच्छ होना चाहिए, और यह मदद में भी हो सकता है, लेकिन मैं यह पता नहीं लगा सकता कि इसे कैसे नेविगेट किया जाए। मैं vi में कई लाइनों को जल्दी कैसे इंडेंट करूं?
जवाबों:
>कमांड का उपयोग करें । पांच लाइनों को इंडेंट करने के लिए, 5>>। लाइनों के एक ब्लॉक को चिह्नित करने और इसे इंडेंट करने के लिए, Vjj>तीन लाइनों को इंडेंट करने के लिए (केवल विम)। एक घुंघराले ब्रेसिज़ ब्लॉक को इंडेंट करने के लिए, अपने कर्सर को घुंघराले ब्रेसिज़ में से एक पर रखें और >%ब्लॉक उपयोग के अंदर या कहीं से भी उपयोग करें >iB।
यदि आप पाठ के ब्लॉक को चारों ओर से कॉपी कर रहे हैं और इसके नए स्थान में ब्लॉक के इंडेंट को संरेखित करने की आवश्यकता है, तो ]pइसके बजाय उपयोग करें p। यह आसपास के पाठ के साथ चिपके हुए ब्लॉक को संरेखित करता है।
इसके अलावा, shiftwidth
सेटिंग आपको नियंत्रित करने की अनुमति देती है कि कितने स्थानों को इंडेंट करना है।
shiftwidth
इसे बदलने के तरीके के लिए सेटिंग देखें ।
यह उत्तर इस प्रश्न के अन्य उत्तरों और टिप्पणियों को सारांशित करता है, और यह विम प्रलेखन और विम विकी के आधार पर अतिरिक्त जानकारी जोड़ता है । संक्षिप्तता के लिए, यह उत्तर 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
संदर्भ
>}
। धन्यवाद लंबा
एक बड़ा चयन होगा:
gg=G
यह वास्तव में तेज़ है, और सब कुछ इंडेंट हो जाता है ;-)
gg=G
बस हर पंक्ति को स्थिति से शुरू करता है 1. सभी सफेद रिक्त स्थान हटा दिए गए हैं। क्या एक्सएमएल के लिए कुछ और विशिष्ट है?
set cindent
vimrc में होना चाहिए या :set cindent
उस कमांड को चलाने से पहले चलना चाहिए
सी-इंडेंटिंग इंडेंटेशन के लिए भी यह प्रयास करें । क्या :help =
अधिक जानकारी के लिए:
={
आप जिस वर्तमान कोड ब्लॉक में हैं, उसका ऑटो-इंडेंट करेंगे।
या केवल:
==
वर्तमान लाइन को ऑटो-इंडेंट करने के लिए।
अधिक दृश्य लोगों के लिए मुख्य प्रेस:
कमांड मोड दर्ज करें:
Escape
इंडेंट करने के लिए क्षेत्र की शुरुआत के आसपास घूमें:
hjkl↑↓←→
एक ब्लॉक शुरू करें:
v
इंडेंट करने के लिए क्षेत्र के अंत में घूमें:
hjkl↑↓←→
(वैकल्पिक) आप चाहते हैं इंडेंटेशन स्तर की संख्या लिखें
0..9
ब्लॉक पर इंडेंटेशन निष्पादित करें:
>
सभी आज्ञाओं का स्वामी है
gg=G
यह पूरी फाइल को इंडेंट करता है!
और नीचे कुछ सरल और सुरुचिपूर्ण आदेशों का उपयोग Vim या gVim में जल्दी से लाइनों को इंडेंट करने के लिए किया जाता है।
वर्तमान लाइन को इंडेंट करने के लिए
==
वर्तमान लाइन के नीचे की सभी लाइनों को इंडेंट करने के लिए
=G
n
वर्तमान लाइन के नीचे की रेखाओं को इंडेंट करने के लिए
n==
उदाहरण के लिए, वर्तमान लाइन के नीचे 4 लाइनों को इंडेंट करने के लिए
4==
कोड के एक ब्लॉक को इंडेंट करने के लिए, ब्रेसिज़ में से एक पर जाएं और कमांड का उपयोग करें
=%
ये कई लाइनों को इंडेंट करने के लिए सबसे सरल, अभी तक शक्तिशाली कमांड हैं।
vim
, नहीं vi
।
vim
उस पर नहीं देख रहे हैं जो इससे जुड़ा हुआ है vi
?
पहले से दिए गए और स्वीकार किए गए उत्तर के अलावा , एक मार्कर रखना भी संभव है और फिर वर्तमान कर्सर से मार्कर तक सब कुछ इंडेंट करें।
इस प्रकार, ma
जहाँ आप अपने इंडेंट ब्लॉक के ऊपर चाहते हैं , वहाँ दर्ज करें, जहाँ तक ज़रूरत हो, नीचे कर्सर करें और फिर टाइप करें >'a
(ध्यान दें कि " a
" किसी भी मान्य मार्कर नाम के लिए प्रतिस्थापित किया जा सकता है)। यह कभी कभी से अधिक आसान है 5>>
या vjjj>
।
पाठ की शुरुआत में जाएं
प्रस्तावित समाधानों के साथ, मैं एक समय में चीजों को एक पैराग्राफ करना पसंद करता हूं >}
जब आप किसी ब्लॉक का चयन करते हैं >और इंडेंट करने के लिए उपयोग करते हैं, तो यह इंडेंट करता है फिर सामान्य मोड में वापस चला जाता है। मेरे पास मेरी .vimrc फ़ाइल में यह है:
vnoremap < <gv
vnoremap > >gv
इससे आप जितनी बार चाहें अपने चयन को इंडेंट कर सकते हैं।
मान लीजिए कि आप अपने कोड को इंडेंट करने के लिए 2 स्थानों का उपयोग करते हैं। प्रकार:
:set shiftwidth=2
फिर:
तुम्हें नया तरीका मिल गया है।
( खाली लाइनों को इंडेंट नहीं मिलेगा, जो मुझे लगता है कि अच्छा है। )
मुझे इंडेंटिंग ब्लॉक्स के लिए (g) विम डॉक्युमेंट का जवाब मिला:
:help visual-block
/indent
यदि आप कमांड को एक गिनती देना चाहते हैं, तो ऑपरेटर चरित्र टाइप करने से ठीक पहले ऐसा करें: "v {Move-around} 3>" (मूव्स 3 इंडेंट को दाईं ओर ले जाएं)।
विम की यूआई की सुंदरता इसकी स्थिरता है। एडिटिंग कमांड कमांड और कर्सर चाल से बने होते हैं। कर्सर चाल हमेशा समान होते हैं:
'
।इसलिए, vim का उपयोग करने के लिए आपको कर्सर को स्थानांतरित करना सीखना होगा और आदेशों का एक प्रदर्शन याद रखना होगा, उदाहरण के लिए, >इंडेंट करने के लिए (और <"अतिरिक्त")।
इस प्रकार, स्क्रीन तुम क्या की चोटी पर कर्सर की स्थिति से लाइनों इंडेंट के लिए >H, >Gफ़ाइल की तह तक इंडेंट करने के लिए।
यदि, टाइप करने के बजाय >H, आप टाइप dHकरते हैं , तो आप लाइनों के उसी ब्लॉक को हटा रहे हैं, cHइसे बदलने के लिए, आदि।
कुछ कर्सर आंदोलनों विशिष्ट आदेशों के साथ बेहतर फिट होते हैं। विशेष रूप से, %कमांड पूरे HTML या XML ब्लॉक को इंडेंट करने के लिए आसान है। यदि फ़ाइल में सिंटैक्स हाइलाइट किया गया है ( :syn on
) तो टैग के पाठ में कर्सर सेट करना (जैसे, <div> के "i" में और प्रवेश >%करना बंद </ div> टैग के लिए प्रेरित होगा।
यह है कि विम कैसे काम करता है: किसी को केवल कर्सर आंदोलनों और आदेशों को याद रखना है, और उन्हें कैसे मिश्रण करना है। तो इस प्रश्न का मेरा उत्तर होगा "उन लाइनों के ब्लॉक के एक छोर पर जाएं जिन्हें आप इंडेंट करना चाहते हैं, और फिर >कमांड और ब्लॉक के दूसरे छोर पर एक आंदोलन टाइप करें " अगर इंडेंट को लाइनों को शिफ्ट करने के रूप में व्याख्या की जाती है, =अगर इंडेंट सुंदर मुद्रण के रूप में व्याख्या की है।
यह करो:
$vi .vimrc
और इस लाइन को जोड़ें:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
यह केवल एक cpp फ़ाइल के लिए है। आप इसे किसी अन्य फ़ाइल प्रकार के लिए भी कर सकते हैं, वह भी केवल फ़िलाटाइप को संशोधित करके ...
आप norm i
पंक्ति के आरंभ में दिए गए पाठ को सम्मिलित करने के लिए कमांड का उपयोग कर सकते हैं । 2-10 लाइनों से पहले 10 रिक्त स्थान सम्मिलित करने के लिए:
:2,10norm 10i
याद रखें कि कमांड के अंत में एक स्पेस कैरेक्टर होना चाहिए - यह वह कैरेक्टर होगा जिसे हम डालना चाहते हैं। हम किसी भी अन्य पाठ के साथ एक लाइन भी इंडेंट कर सकते हैं, उदाहरण के लिए पांच अंडरस्कोर वर्णों वाली फाइल में हर लाइन इंडेंट करने के लिए:
:%norm 5i_
या कुछ और भी फैंसी:
:%norm 2i[ ]
अधिक व्यावहारिक उदाहरण बैश / पायथन / आदि कोड के साथ # वर्ण टिप्पणी कर रहा है:
:1,20norm i#
के xबजाय फिर से इंडेंट उपयोग के लिए i। उदाहरण के लिए, पहले 5 वर्णों को प्रत्येक पंक्ति से हटाने के लिए:
:%norm 5x
इसका उपयोग करने का एक त्वरित तरीका VISUAL MODE
उसी प्रक्रिया का उपयोग करता है जो कोड के एक ब्लॉक पर टिप्पणी करता है।
यह उपयोगी है यदि आप अपने निर्देशों को बदलना shiftwidth
या किसी भी set
निर्देश का उपयोग नहीं करना पसंद करते हैं और TABS या SPACES या किसी अन्य चरित्र के साथ काम करने के लिए पर्याप्त लचीला है।
-- VISUAL MODE --
:
प्रॉम्प्ट पर स्विच करने के लिए टाइप करें3 प्रमुख स्थानों के साथ प्रतिस्थापित:
:'<,'>s/^/ /g
या प्रमुख टैब के साथ प्रतिस्थापित करना:
:'<,'>s/^/\t/g
संक्षिप्त विवरण:
'<,'>
- नेत्रहीन चयनित सीमा के भीतर
s/^/ /g
- पूरी रेंज के भीतर हर लाइन की शुरुआत में 3 स्पेस डालें
(या)
s/^/\t/g
- Tab
पूरी सीमा के भीतर हर लाइन की शुरुआत में डालें
मुझे इंडेंटेशन के लिए टेक्स्ट मार्क करना पसंद है:
पुनश्च: आप :'a,'zकिसी भी ऑपरेशन (d, y, s ///, आदि) के लिए एक सीमा को चिह्नित करने के लिए तकनीक का उपयोग कर सकते हैं जहां आप लाइनों, संख्याओं, या का उपयोग कर सकते हैं %।
:help left
में ex mode
आप उपयोग कर सकते हैं :left
या :le
संरेखित लाइनों के लिए एक निर्धारित राशि। विशेष रूप से, [रेंज] में लाइनों को संरेखित:left
करेंगे । यह इंडेंट को लाइनों में [इंडेंट] (डिफ़ॉल्ट 0) पर सेट करता है।
:%le3
या :%le 3
या :%left3
या :%left 3
तीन रिक्त स्थान के साथ गद्दी से पूरी फ़ाइल संयोजित करेगा।
:5,7 le 3
तीन स्थानों के साथ उन्हें पैडिंग करके 7 के माध्यम से 5 लाइनों को संरेखित करेगा।
:le
बिना किसी मूल्य के या :le 0
0 की गद्दी के साथ संरेखित किया जाएगा।
यह विम और जीवीएम में काम करता है।
:'<,'>le4
करने के लिए , फिर रिक्त स्थान सम्मिलित करने के लिए शिफ्ट-वी । धन्यवाद!
मेरे लिए, मैकविम (विजुअल) समाधान था, माउस और प्रेस ">" के साथ चयन करें, लेकिन निम्न पंक्तियों को "~ //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 पर्यावरण चर काफी लंबा हो सकता है।
5==
वर्तमान कर्सर स्थिति से पांच लाइनों को इंडेंट करेगा।
तो आप पहले कोई भी नंबर टाइप कर सकते हैं ==
। यह लाइनों की संख्या को इंगित करेगा। यह कमांड मोड में है।
gg=G
ऊपर से नीचे तक पूरी फाइल को इंडेंट करेगा।
मुझे टिप्पणियों में एक विधि नहीं मिली, इसलिए मैं इसे साझा करूँगा (मुझे लगता है कि केवल विम):
यह तब उपयोगी होता है जब आप vimrc
संपादन करते समय इसे बदलने के लिए इंडेंटेशन / टैब सेटिंग्स बदलना या उन्हें याद नहीं रखना चाहते हैं।
अनइंडेंट करने के लिए मैं एक ही Ctrl+ Vब्लॉक सिलेक्ट स्पेस का चयन करता हूं और इसके साथ डिलीट करता हूं D।
मुझे नहीं पता कि इस तरह से एक सरल उत्तर ढूंढना इतना मुश्किल क्यों है ...
यह जानने के लिए मुझे खुद बहुत संघर्ष करना पड़ा। यह बहुत सरल है:
.vimrc
होम डायरेक्टरी के तहत अपनी फाइल को एडिट करें ।इस लाइन को जोड़ें
set cindent
अपनी फ़ाइल में जहाँ आप ठीक से इंडेंट करना चाहते हैं।
सामान्य / कमांड मोड में
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
:line_num_start,line_num_end>
उदाहरण के लिए,
14,21> shifts line number 14 to 21 to one tab
अधिक टैब के लिए '>' प्रतीक बढ़ाएं।
उदाहरण के लिए,
14,21>>> for three tabs
:set number
लाइन नंबरों को टॉगल करने की आवश्यकता है (वे डिफ़ॉल्ट रूप से बंद हैं ), या set number
अपने vimrc में डाल दें ।
पायथन का उपयोग करते हुए, मुझे लगता है कि खुद को एक से अधिक इंडेंट द्वारा ब्लॉकों को स्थानांतरित करने की आवश्यकता है। आप ब्लॉक चयन के किसी भी तरीके का उपयोग करके ऐसा कर सकते हैं, और उसके बाद ही उन इंडेंट की संख्या दर्ज करें, जिन्हें आप ठीक से कूदना चाहते हैं>
उदाहरण के लिए, V5j3>
पांच लाइनों को तीन बार इंडेंट करेगा - यदि आप इंडेंट के लिए चार स्थानों का उपयोग करते हैं तो 12 स्थान है।
विकल्प 1: दृश्य ब्लॉक मोड के साथ तीन स्थानों में vi में कोड का एक ब्लॉक इंगित करें:
उस कोड के ब्लॉक का चयन करें जिसे आप इंडेंट करना चाहते हैं। Ctrl+Vपाठ का चयन करने के लिए इसे सामान्य मोड में उपयोग करें और नीचे जाएं। जबकि यह चयनित है, :
चयनित पाठ के ब्लॉक को कमांड देने के लिए दर्ज करें।
निम्नलिखित कमांड लाइन में दिखाई देगा: :'<,'>
तीन स्थानों पर इंडेंट सेट करने के लिए, टाइप करें le 3
और एंटर दबाएं। ऐसा प्रतीत होता है::'<,'>le 3
चयनित पाठ तुरंत तीन स्थानों के लिए प्रेरित होता है।
विकल्प 2: दृश्य पंक्ति मोड के साथ तीन स्थानों में vi में कोड के एक ब्लॉक को इंगित करें:
सामान्य मोड में रहें और निम्नलिखित कुंजियों को दबाएँ:
Vjjjj:le 3
आपने जो किया उसकी व्याख्या:
V
पाठ का चयन करना शुरू करें।
jjjj
चार लाइनों पर तीर, चार लाइनों पर प्रकाश डाला।
:
vi बताता है कि आप हाइलाइट किए गए पाठ के लिए एक निर्देश दर्ज करेंगे।
le 3
मतलब इंडेंट हाइलाइट किए गए टेक्स्ट की तीन पंक्तियों।
चयनित कोड तुरंत तीन स्थान इंडेंटेशन में बढ़ा या घटा दिया गया है।
विकल्प 3: इंडेंट बढ़ाने के लिए विजुअल ब्लॉक मोड और विशेष इंसर्ट मोड का उपयोग करें:
सामान्य मोड में रहें निम्नलिखित कुंजियों को दबाएं:
Ctrl+V
jjjj
(पांच बार स्पेसबार दबाएं)
Esc Shift+i
सभी हाइलाइट किए गए पाठ को अतिरिक्त पाँच रिक्त स्थान दिए गए हैं।
मैं ब्लॉक-मोड दृश्य चयन का उपयोग करता हूं:
I
( Shift+ I) दबाएँ ।यह यूनी-टास्कर नहीं है। यह काम करता हैं:
c
इसके बजाय उपयोग करें I
)।vim-prettier
डिफ़ॉल्ट इंडेंटिंग इंजन के बजाय का उपयोग करके ) के बाहर स्वरूपण करते हैं, तो यह जाने का तरीका है । >
अन्यथा प्रीतियर द्वारा किए गए प्रारूपण का उपयोग करेंगे।
चार द्वारा सभी फ़ाइल को इंडेंट करने के लिए:
esc 4G=G
स्रोत: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html