Vi / Vim में मल्टी-लाइन चयन की शुरुआत में टेक्स्ट कैसे डालें


423

में विम , मैं कैसे एक चयन में प्रत्येक पंक्ति के आरंभ में वर्ण डालने करते हैं?

उदाहरण के लिए, मैं //प्रत्येक पंक्ति की शुरुआत में अपनी भाषा की टिप्पणी प्रणाली मानकर ब्लॉक की टिप्पणी करने की अनुमति नहीं देता , कोड को ब्लॉक करना चाहता हूं /* */। यह मैं कैसे करूंगा?

जवाबों:


748
  • Esc'कमांड मोड' दर्ज करने के लिए दबाएँ
  • दृश्य ब्लॉक मोड में प्रवेश करने के लिए Ctrl+ Vका उपयोग करें
  • जिस पंक्ति में आप टिप्पणी करना चाहते हैं, उसमें पाठ के कॉलमों को चुनने Up/ स्थानांतरित Downकरने के लिए।
  • फिर हिट Shift+ iऔर वह पाठ लिखें जिसे आप सम्मिलित करना चाहते हैं।
  • फिर हिट करें Esc, 1 सेकंड प्रतीक्षा करें और सम्मिलित पाठ हर पंक्ति पर दिखाई देगा।

अधिक जानकारी और पढ़ने के लिए, विम टिप्स विकी में " कई लाइनों में पाठ सम्मिलित करें " देखें।


6
इसके साथ एकमात्र बुमराह यह है कि यह प्रतीत होता है कि Ctrl + V GVIM में ओवरराइड है।
जॉर्डन पैरा

14
मेरे लिए नहीं (लिनक्स पर) यह नहीं है
पिक्सेलबीट

23
आप gVim में प्रतिस्थापन के रूप में Ctrl-Q का उपयोग कर सकते हैं (जैसे: Ctrl-V बताते हैं) लेकिन आपको तीर कुंजियों के बजाय इस मोड में नेविगेट करने के लिए hjkl का उपयोग करने की आवश्यकता है
Gareth

9
यदि आपका ctrl-v विंडोज़ gvim में ओवरराइड है, तो आपको mswin.vim सहित रोकने के लिए वैश्विक vimrc को संपादित करना चाहिए।
ग्रेव

18
किसी भी विचार क्यों यह esc धक्का के बाद कुछ भी नहीं होगा? मैं ऐसा कुछ करने के लिए 10 सेकंड की तरह इंतजार कर रहे थे कम से कम एक सौ तर्ज पर - कोई बात नहीं, मैं जोर दे रहा था Shift + vनहींCTRL + v । @ vkaul11 संभवतः वही काम जो आपने किया था
Tek

186

यह प्रत्येक पंक्ति की शुरुआत "//" से करता है:

:%s!^!//!

यह प्रत्येक चयनित लाइन की शुरुआत की जगह लेता है ("का चयन करने के लिए दृश्य मोड का उपयोग करें") "//" के साथ:

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

ध्यान दें कि gv(सामान्य मोड में) अंतिम दृश्य चयन को पुनर्स्थापित करता है, यह समय-समय पर काम आता है।


3
धन्यवाद! कुल बोध कराता है। और पाठ को हटाने इस प्रकार है: '<,'> s! ^ // !!
जॉर्डन पार्लर

4
उपरोक्त उत्तर में विस्मयादिबोधक चिह्न का क्या अर्थ है? (-% s! ^! //!)
हेनरिक के

19
@ HKK, आम तौर पर एक फॉरवर्ड स्लैश चरित्र का उपयोग करता है / खोज के लिए एक परिधि के रूप में और कमांड को प्रतिस्थापित करता है। इस मामले में हम खोज के भाग के रूप में एक आगे की स्लैश डाल रहे हैं और प्रतिस्थापित करें ताकि हम एक वैकल्पिक परिधि, अर्थात् विस्मयादिबोधक चरित्र का उपयोग करें!
साइबर-साधु

+1 यह VsVim में काम करता है जहां (Ctrl + V) (शिफ़्ट + I) Esc नहीं है।
सेठ रेनो

4
+1, (मैं उपयोग कर रहा था यहाँ कोई पता नहीं आप regex परिसीमक के रूप में कुछ और ही इस्तेमाल कर सकते हैं के लिए किया था /और भागने के लिए होने //में :s/^/\/\/लेखन के बजाय :s!^!//)
Hashbrown

83

खोज और बदलने के लिए सामान्य पैटर्न है:

:s/search/replace/

वर्तमान लाइन के लिए 'बदलें' के साथ 'खोज' की पहली घटना को प्रतिस्थापित करता है

:s/search/replace/g

वर्तमान लाइन के लिए 'बदलें' के साथ 'खोज' की सभी घटनाओं को बदलता है, 'जी' 'वैश्विक' के लिए कम है

यह कमांड 'खोज' की प्रत्येक घटना को केवल वर्तमान लाइन के लिए 'प्रतिस्थापित' से बदल देगा। % का उपयोग पूरी फ़ाइल को खोजने के लिए किया जाता है। प्रत्येक प्रतिस्थापन की पुष्टि करने के लिए अंतःक्रियात्मक रूप से पुष्टि के लिए एक 'ग' जोड़ें:

:%s/search/replace/c

इंटरएक्टिव पूरी फ़ाइल के लिए 'बदलें' के साथ 'खोज' की पुष्टि करता है

% वर्ण के बजाय आप एक पंक्ति संख्या सीमा का उपयोग कर सकते हैं (ध्यान दें कि '^' वर्ण रेखा की शुरुआत के लिए एक विशेष खोज वर्ण है) :

:14,20s/^/#/

14-20 लाइनों की शुरुआत में एक '#' वर्ण सम्मिलित करता है

यदि आप किसी अन्य टिप्पणी चरित्र का उपयोग करना चाहते हैं (जैसे //) तो अपना कमांड परिसीमन बदलें:

:14,20s!^!//!

14-20 लाइनों की शुरुआत में एक '//' वर्ण अनुक्रम सम्मिलित करता है

या आप हमेशा सिर्फ // वर्णों से बच सकते हैं जैसे:

:14,20s/^/\/\//

14-20 लाइनों की शुरुआत में एक '//' वर्ण अनुक्रम सम्मिलित करता है

यदि आप अपने संपादक में लाइन नंबर नहीं देख रहे हैं, तो बस निम्नलिखित टाइप करें

:set nu

शुरुआत को हटाने के लिए #: के बजाय: 14,20s / # / ^ /, आपको उपयोग करना चाहिए: 14,20s / # //
cn1h

1
@ cn1h मुझे लगता है कि यह #लाइन में अन्य की जगह लेगा । आपको ^#इसके बजाय उपयोग करना चाहिए ।
अंकुश

मूल बातें समझाने के लिए धन्यवाद। यह जानना अच्छा है कि कुछ क्यों होता है।

38

एक और तरीका जो नए लोगों के लिए आसान हो सकता है:

 some█
 code
 here

कर्सर को पहली पंक्ति पर रखें, जैसे कि

gg

और इन्सर्ट मोड में आने के लिए और अपना टेक्स्ट जोड़ने के लिए निम्न टाइप करें:

I / / Space

 // █some
 code
 here

Escकमांड मोड में वापस आने के लिए और डिग्राफ का उपयोग करने के लिए दबाएं :

j . j .

 // some
 // code
 //█here

jएक गति कमांड एक पंक्ति से नीचे जाने और .आपके द्वारा किए गए अंतिम संपादन कमांड को दोहराता है।


3
यह वास्तव में आसान है :)। अगर आपको इससे परेशानी हो रही है तो हो सकता है कि आप |एक पूंजी के बजाय एक बार (अपने साथ दूसरा प्रतीक) टाइप कर रहे हों I। मुझे लगा कि यह |पहली बार में है।
17

1
अगर मैं "5." यह एक ही पंक्ति से 5 वर्ण हटाता है। मैं इसे प्रत्येक पंक्ति से एक बार में 5 वर्णों को कैसे हटाऊं?
राहुल प्रसाद

1
@RahulPrasad मान लीजिए कि आपके पास 25 लाइनें हैं, तो पहली पंक्ति के सामने से शुरू करके सिर्फ 5xj को एक रजिस्टर में रिकॉर्ड करें और 24 बार रजिस्टर करने वाले नाटक को खेलें, उदाहरण के लिए: qa5xjq25 @ a लेकिन यह बेहतर होगा यदि इसे एक वास्तविक प्रश्न के रूप में पोस्ट किया जाए अगर यह पहले से मौजूद नहीं है ...
7

26

और फिर भी एक और तरीका:

  • एक पंक्ति की शुरुआत में ले जाएँ
  • विज़ुअल ब्लॉक मोड दर्ज करें ( CTRL- v)
  • लाइनों चुनें (के साथ आगे बढ़ / नीचे j/ k[लाइन] के साथ एक लाइन के लिए, या कूद G)
  • प्रेस I(यह पूंजी मैं है)
  • टिप्पणी चरित्र टाइप करें
  • दबाएँ ESC

20

यह #हर पंक्ति की शुरुआत में जोड़ता है :

:%s/^/#/

और लोग आपकी ठीक से टिप्पणी करने वाली स्क्रिप्ट की कमी के बारे में शिकायत करना बंद कर देंगे।


2
क्या होगा यदि आप केवल चयनित (या कुछ) लाइनों पर # जोड़ना चाहते हैं
राहुल प्रसाद

15

यदि आप इसके बारे में सुपर फैंसी प्राप्त करना चाहते हैं, तो इसे अपने .vimrc में डालें:

vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>

फिर, जब भी दृश्य मोड में है, तो आप हिट कर सकते हैं \cकरने के लिए सी ब्लॉक omment और \uकरने के लिए यू यह ncomment। बेशक, आप उन शॉर्टकट कीस्ट्रोक्स को बदल सकते हैं जो भी हो।


Upvoted क्योंकि यह कुछ नया पेश किया - vmap!
अंकुश

11

अभी तक एक और तरीका:

:'<,'>g/^/norm I//

/^/हर लाइन से मेल खाने के लिए सिर्फ एक डमी पैटर्न है। normआपको सामान्य-मोड कमांड चलाने देता है जो अनुसरण करता है। I//कर्सर को लाइन की शुरुआत में जंप करते समय इंसर्ट-मोड दर्ज करने के लिए कहते हैं, फिर निम्नलिखित टेक्स्ट (दो स्लैश) डालें।

:g कई लाइनों पर कुछ जटिल करने के लिए अक्सर काम होता है, जहाँ आप कई मोड्स के बीच कूदना चाहते हैं, लाइनों को हटाना या जोड़ना, कर्सर को इधर-उधर करना, मैक्रोज़ का एक गुच्छा चलाना आदि। और आप इसे केवल लाइनों पर काम करने के लिए कह सकते हैं। एक पैटर्न मैच।


1
वास्तव में: जी कमांड आवश्यक नहीं है। यह करेगा:: '<,'> आदर्श I //
साइबर ओलिवेरा

1
और: इस मामले में उपयोग करना बेहतर है।
ग्रेव

यह सबसे उपयोगी उत्तर है।
शांतिपूर्ण

3

कोड के ब्लॉक पर टिप्पणी करने के लिए, मुझे एनईआरडी टिप्पणीकर्ता प्लगइन पसंद है।

कुछ पाठ का चयन करें:

Shift-V
...select the lines of text you want to comment....

टिप्पणी:

,cc

टिप्पणी हटाएं:

,cu

या सिर्फ एक पंक्ति या ब्लॉक की टिप्पणी स्थिति को टॉगल करें:

,c<space>

2

मैं EnhCommentify plugin की सिफारिश कर सकता हूं ।

जैसे। इसे अपने vimrc पर रखें:

let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'

आप तब 'सी' के साथ (चयनित) लाइनों पर टिप्पणी / असहज कर सकते हैं


3
आप Nerd Commenter का उपयोग vim.org/scripts/script.php?script_id=1218
नाथन

1

दृश्य ब्लॉक के रूप में टिप्पणी करने के लिए क्षेत्र को चिह्नित करें ( <C-V)

और करो c#<ESC>p

  1. cइसे "#" पर लटकाएं
  2. इसे वापस डाल

यदि आप इसे अक्सर करते हैं, तो \qअपने .vimrc में एक शॉर्ट कट (उदाहरण ) को परिभाषित करें

:vmap \q c#<ESC>p

1

यदि किसी की बहु-लाइन-चयन वास्तव में एक पैराग्राफ है, तो लाइनों को मैन्युअल रूप से चुनने की कोई आवश्यकता नहीं है। विम आपके लिए ऐसा कर सकता है:

  1. vip: पूरे पैराग्राफ का चयन करें और चिह्नित करें
  2. shift-i: लाइन शुरुआत में टेक्स्ट डालें
  3. escape: इंसर्ट मोड छोड़ें / सामान्य मोड दर्ज करें [लाइन शुरुआत अभी भी चयनित]
  4. escape: अचयनित लाइन शुरुआत

0

प्रत्येक पंक्ति की शुरुआत में "एबीसी" सम्मिलित करने के लिए:

1) कमांड मोड पर जाएं

2):% आदर्श I ABC


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