Vim में, ब्रेसिज़ / पैरेंस के मिलान के लिए पीछे की ओर खोजें


10

जैसा कि आप में से अधिकांश शायद जानते हैं, आप %अगले युग्मित ब्रेस / ब्रैकेट / परन को खोजने के लिए लाइन पर आगे की ओर खोज करने के लिए उपयोग कर सकते हैं और इसके मिलान किए गए साथी पर जा सकते हैं:

|a|rray[index] = value;
" |e| is the cursor; hit %:
array[index|]| = value;

मुझे उम्मीद है कि एक समान कुंजी है जो लाइन पर पीछे की ओर खोजती है, जैसे:

array[index] = value|;|
" |;| is the cursor again, hit the key I'm looking for:
array|[|index] = value;

अधिकांश vim कमांड में पीछे और आगे दोनों होते हैं, इसलिए ऐसा लगता है कि यह करना चाहिए। क्या इसका कोई साथी नहीं है? यदि हां, तो ऐसा इसलिए है क्योंकि एक बार यह है पर एक बनती चरित्र वे एक ही काम करेगा?


यह ध्यान दिया जाना चाहिए कि %न केवल एक ही पंक्ति पर युग्मित ब्रैकेट के लिए खोज करता है, बल्कि फ़ाइल को और नीचे करता है। मुझे यह विशेष रूप से पसंद की किसी भी कार्यक्रम भाषा में छोरों आदि के लिए पसंद है।
बर्नहार्ड

1
@ बर्नहार्ड हाँ, लेकिन केवल जब यह लाइन पर ब्रेसिज़ में से एक पाता है।
केविन

यदि आप एडऑन स्क्रिप्ट के विरोध में नहीं हैं, तो मैचऑन एडऑन एक g%कमांड प्रदान करता है जो कि आप जो खोज रहे हैं, उसके समान है।
jw013

मूर्खतापूर्ण लेकिन, आपका प्रश्न बताता है कि आप जानना चाहते हैं कि कोई साथी क्यों नहीं है। क्या आपका मतलब है "क्या कोई ऐसा साथी है जिसके बारे में मुझे जानकारी नहीं है?" :)
rjewell

@rjewell ठीक है, मैंने इसे विभाजित कर दिया है इसलिए यह अब तकनीकी रूप से नहीं पूछ रहा है।
केविन

जवाबों:


4

यदि आप वास्तव में सामान्य मिलान वर्णों के लिए पीछे की ओर खोजना चाहते हैं, तो आप इनमें से एक- vimआज्ञा का उपयोग कर सकते हैं :

  • [(... (पिछले बेजोड़ (चरित्र पर जाएं)
  • [{... (पिछले बेजोड़ {चरित्र पर जाएं)

इन दो आदेशों का मिलान आगे के साझेदारों से होता है:

  • ])... (अगले बेजोड़ )चरित्र पर जाएं)
  • ]}... (अगले बेजोड़ }चरित्र पर जाएं)

#ifdefC टिप्पणियों के लिए और अन्य समान आदेश हैं ।

आप vimकमांड का उपयोग करके अधिक पा सकते हैं :help %


मुझे पता है, समस्या यह है कि वे बेजोड़ जोड़े पाते हैं , मुझे मिलान जोड़े खोजने की जरूरत है ।
केविन

@ केविन: मैंने डॉक्स (आह) को गलत समझा। बेशक, एक बार उपयोग करने के %बाद यह दोनों तरीके से जाता है - मिलान किए गए साथी को ढूंढना। इसके अलावा, अगर एक ब्लॉक के अंदर है, तो उपरोक्त कमांड उपयुक्त मैच पाएंगे।
17

4

मिलान ब्रैकेट का% पता लगाएं। तो अगर आप चालू हैं (या {यह आगे की खोज करेगा।

यदि आप एक} या) पर हैं, तो यह पीछे की ओर खोज करेगा।

% दिशात्मक नहीं है, यह केवल मिलान ब्रैकेट का पता लगाता है।


अगर मैं एक जोड़ी के पीछे हूं, तो% वह भागीदार होगा। यदि मैं एक पंक्ति के अंत में हूं, तो यह लाइन पर पहले वाला जोड़ा नहीं मिलेगा।
केविन

क्या यह सही उत्तर नहीं चुना जाना चाहिए?
जैक

2

मैंने सिर्फ :map ^] ^%%( ^]= Ctrl+ v Ctrl+ के साथ 5, यहाँ %= Shift+ के साथ एक सादृश्य के रूप में 5) की कोशिश की।

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


यह एक बेहतर उपाय है; यह बदसूरत है और शायद सरल करने के लिए बहुत सारे कमरे हैं, लेकिन मुझे लगता है कि शब्दार्थ बिल्कुल सही हैं (कर्सर नहीं ले जाता है अगर कोई खुला पेरेन नहीं है, और वर्तमान कॉलम से पहले पहले खुले पेरेन में जाता है )।

:map ^] ^[:call search("[({[]", "bes", line("."))^M

के लिये

  • ^]= Ctrl+ v Ctrl+5
  • ^[= Ctrl+v Esc
  • ^M= Ctrl+v Return

यह एक समान नहीं होगा यदि एक रेखा पर दो गैर-नेस्टेड जोड़े हैं, लेकिन यह निश्चित रूप से अब तक का सबसे अच्छा सुझाव है, धन्यवाद।
केविन

यह केवल एक ब्लॉक के भीतर काम करेगा, है ना? यदि ऐसा है, तो [(बस के रूप में अच्छी तरह से काम करेगा और एक की आवश्यकता नहीं है map
मेई

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