क्या आप vi / vim में कोष्ठक के बीच पकड़ या हटा सकते हैं?


128

सी में कोड की इस लाइन को देखते हुए:

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));

क्या पहले बोल्ड कोष्ठक से उसके मिलान करने वाले कोष्ठक को हटाने या यांक करने का कोई तरीका है? मैंने df के बारे में सोचा ) , लेकिन यह आपको केवल 9.0 के बाद ही मिलेगा।

क्या नई बराबरी की परवाह किए बिना, मिलान वाले ब्रेसिज़ के बीच सब कुछ हड़पने के लिए विम पाने का एक समान तरीका है?

जवाबों:


167

विभिन्न उद्देश्य:%

%आदेश कर्सर के अंतर्गत आइटम के मैच के लिए कूदता है। उद्घाटन (या समापन) पर कर्सर को स्थिति दें और y%यांकिंग के लिए उपयोग करें या d%कर्सर से मिलान करने वाले सब कुछ को हटाने के लिए उपयोग करें ।

यह काम करता है क्योंकि %एक "गति कमांड" है, इसलिए इसका उपयोग कहीं भी किया जा सकता है क्योंकि इस तरह के कमांड की अपेक्षा है। से :help y:

["x]y{motion}       Yank {motion} text [into register x].  When no
                    characters are to be yanked (e.g., "y0" in column 1),
                    this is an error when 'cpoptions' includes the 'E'
                    flag.

डिफ़ॉल्ट रूप से, "आइटम" में कोष्ठक, ब्रेसिज़, परेंस, सी-स्टाइल टिप्पणियां और विभिन्न प्री-कंपाइलर स्टेटमेंट ( #ifdef, आदि) शामिल हैं।

"विस्तारित% मिलान" के लिए एक प्लगइन है जिसे आप विम होमपेज पर पा सकते हैं ।

आप कमांड मोड में %प्रवेश करके प्रलेखन और संबंधित गति आदेशों को पढ़ सकते हैं :help various-motions

वस्तु का चयन करें

गति कमांड का एक और सेट है जिसे आप विभिन्न पाठ ऑब्जेक्ट्स का चयन करने के लिए विज़ुअल मोड में उपयोग कर सकते हैं।

अपनी विशिष्ट समस्या को हल करने के लिए आप निम्न कार्य करेंगे:

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                   ^

मान लीजिए कि आपका कर्सर पर स्थित है ^। आप जिस भाग की तलाश कर रहे हैं, उसे चुनने के लिए निम्नलिखित अनुक्रम दर्ज करें:

v2a)

पहले vदृश्य मोड में प्रवेश करता है, फिर आप निर्दिष्ट करते हैं कि आप 2पार्न्स के स्तर को ऊपर जाना चाहते हैं । अंत में a)"एक ब्लॉक" का चयन करता है। उसके बाद आप उपयोग कर सकते हैं dया xहटा सकते हैं , आदि।

यदि आप बाहरी परनों को शामिल नहीं करना चाहते हैं, तो आप इसके बजाय "इनर ब्लॉक" का उपयोग कर सकते हैं:

v2i)

:help object-selectसंबंधित आदेशों की पूरी सूची देखें ।


धन्यवाद! मुझे पता था कि मिलान वाले आइटम के बीच% स्विचिंग है; यह कमांड के भीतर भी उपयोगी नहीं था। +1 और स्वीकार किया गया।
प्रेमदास

5
दिलचस्प है, मैंने हमेशा सोचा aथा कि "ए" के बजाय "आसपास" का मतलब है। ऐसा महसूस करें कि यह "आंतरिक" को बेहतर बनाता है। नहीं एक दिन लगता है विम के बारे में कुछ नया नहीं सीखकर ऐसा लगता है।
एंड्रयू मार्शल

218

क्या बारे में dibया di(

यह आंतरिक (...) ब्लॉक को हटा देगा जहां कर्सर है।

मुझे टेक्स्ट-ऑब्जेक्ट गतियों और चयन से प्यार है !


10
सौभाग्य से, यह सवाल पहली हिट है जब मैंने इसके लिए Google किया - मुझे नहीं पता कि इस उत्तर ने मुझे कितनी बार बचाया है। और मैं हमेशा इसे भूल जाता हूं: :-(
कोनराड रूडोल्फ

16
क्या कोष्ठक सहित हटाना संभव है? (हाँ, मैंने अपने प्रश्न का उत्तर दिया: dab=> एक ब्लॉक (इसके कोष्ठक सहित) को
हटाएं

5
मैं वोट देता हूं। इसके अतिरिक्त यदि आप कोष्ठक के अंदर शब्द को सही करना चाहते हैं तो ciw करें
डेवलपर Marius ėilėnas

5
+1! जब मैंने हाल ही में टेक्स्ट-ऑब्जेक्ट गतियों की खोज की तो मैं मन-ही-मन खिल गया! कोई और अधिक सही स्थान पर कर्सर को
यान

36

कोष्ठक की एक जोड़ी के अंदर सभी को हटाने के लिए, आप हमेशा जारी कर सकते हैं di(और इसके डेरिवेटिव।

ध्यान दें :

जैसा कि @porglezomb ने अपनी टिप्पणी में सुझाव दिया है, आप पेरेंटेस को शामिल करने के लिए ("अंदर") के aबजाय ("साथ में") का उपयोग कर सकते हैं i। तो, da(अंदर (और )सहित (और सब कुछ हटाता है )

कोष्ठकों के तत्काल बाहरी जोड़े के अंदर पाठ को हटाना:

तो, कोड की इस लाइन के लिए

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                ^       ^
                                |       |
                                 \_______\___---> Cursor range

यह मानते हुए कि आपका कर्सर उपर्युक्त कर्सर सीमा के अंदर है, आप निम्न आदेश जारी कर सकते हैं:

di(   --> Deletes '5.0/9.0'
ci(   --> Substitutes '5.0/9.0'
yi(   --> Yanks '5.0/9.0'

कोष्ठक के n-वें बाहरी जोड़े के अंदर पाठ हटाना:

कोष्ठक के n-वें बाहरी जोड़े के अंदर सब कुछ हड़पने के लिए, बस nउपरोक्त आदेश से पहले जोड़ें । तो, ऊपर के समान कर्सर स्थिति के साथ,

2di(   --> Deletes '(5.0/9.0) * (fahr-32)'
2ci(   --> Substitutes '(5.0/9.0) * (fahr-32)'
2yi(   --> Yanks '(5.0/9.0) * (fahr-32)'

3di(   --> Deletes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3ci(   --> Substitutes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3yi(   --> Yanks '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'

3
आपको aप्रतिपक्ष के रूप में बात करने वाला एक नोट जोड़ना चाहिए i, क्योंकि इससे बहुत सारे लोगों की मदद करने की संभावना है।
porglezomp

@romandas यह स्वीकृत प्रश्न होना चाहिए। मैं आज ठीक उसी समस्या की खोज कर रहा था और @ केविन ही यहां उचित उत्तर दे रहा है। बेशक, मैं %इस समस्या के लिए "दुरुपयोग" कर सकता था , लेकिन इसमें अधिक समय लगता है और, मेरी राय में, केवल अधिक जटिल परिदृश्यों के लिए उपयोग किया जाना चाहिए। एक निश्चित दायरे के भीतर किसी चीज़ को हटाना वास्तव में उपयोग-के diलिए बनाया गया है।
daniel451

19

आप d%हटाने के लिए और y%यांकिंग के लिए उपयोग कर सकते हैं ।


3
% "मिलान किए गए कोष्ठक, ब्रैकेट, या ब्रेस" के लिए गति निर्दिष्ट है। किसी भी आंदोलन विनिर्देश को डी और वाई (और कई अन्य चीजों) के साथ जोड़ा जा सकता है।
अराजकता

10

अपने कर्सर को पहले कोष्ठक पर रखें, फिर दबाएं v%yया v%d


3
महान! % मैचिंग परीन को कूदता है। तो आप d% और y% का भी उपयोग कर सकते हैं।

1
ध्यान दें, भी, कि 'd%' एक फ़ंक्शन नाम की शुरुआत में शुरू हो सकता है, और पूरे फ़ंक्शन कॉल को हटा देगा। यह '{}', '[]' और यहां तक ​​कि '<>' जोड़ियों के लिए भी काम करता है।
जोनाथन लेफ़लर

@Leffler, सुझावों के लिए धन्यवाद! और यह दृश्य मोड में% कार्यों को भी जानना अच्छा है।
स्ट्रैजर

3

प्रयास करें ci [ब्लॉक-सराउंडर]

अपने मामले में, 2 कोष्ठक के बीच कहीं भी कर्सर रखें जिसे आपने हाईलाइज किया और कुंजियों को आज़माएं: ci (


लगभग। यह परीक्षण, ऐसा लगता है कि कर्सर को पहले कोष्ठक पर होना चाहिए, बीच में नहीं, और 'c' परिवर्तन कमांड है। प्रारंभिक कोष्ठक पर कर्सर के साथ, 'di (' मेल खाते हुए कोष्ठक को हटाता है, और 'yi ('
यान)

ci मेरे लिए हर समय काम करता है। मुझे केवल यह सुनिश्चित करने की ज़रूरत है कि कर्सर उन कोष्ठकों के बीच है जो पाठ के ब्लॉक को घेरते हैं जिन्हें मुझे हटाने की आवश्यकता है।
जस्टिन गुयेन

2

के रूप में इस सवाल का जवाब डेविड नॉर्मन की कहते हैं,

अपने कर्सर को पहले कोष्ठक पर रखें, फिर दबाएं v%yया v%d

से स्पष्टीकरण http://vimdoc.sourceforge.net/htmldoc/vimindex.html :

सामान्य मोड में टैग नोट कार्रवाई        
-------------------------------------------------- ----------------------------
| V | v स्टार्टर वाइज वाइज मोड
|% | % 1 अगले (घुंघराले / चौकोर) ब्रैकेट को खोजें
                                       यह लाइन और इसके मैच पर जाएं, या जाएं
                                       टिप्पणी ब्रैकेट मिलान करना, या मिलान पर जाना
| घ | ["x] d {गति} २ Nmove पाठ [बफर x में हटाएं]

इसका अर्थ यह है कि यह आपको चयन %करते समय दोनों कोष्ठकों के बीच (और ) को दृष्टिगत रूप से ( v) दिखाएगा और फिर इसे कॉपी y/ डिलीट / कट या यैंक dकरेगा। (डिफ़ॉल्ट बफर के लिए।)

आप के साथ डाल / पेस्ट कर सकते हैं p

इसका उत्तर "मछली को खुद सिखाना" दिया


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