क्यूई "उद्धृत क्षेत्र और सीआई के बाहर हो सकता है (केवल कोष्ठक के अंदर काम करता है)?


27

ci"कर्सर का उपयोग करते समय दोहरे उद्धृत क्षेत्र में निवास नहीं करना पड़ता है।

|String somestring = "some text";

मान लिया जाए कि पाइप कर्सर की स्थिति है, ci"तो यह उद्धृत क्षेत्र में कूद जाएगा।

दूसरी ओर, उपयोग करते समय ci(, कर्सर को काम करने के लिए कोष्ठक के अंदर होना चाहिए और कर्सर को उनके अंदर स्थानांतरित नहीं करना होगा।

व्यवहार में इस अंतर का कारण क्या है? मुझे लगता है कि चाबियाँ मैप करने का एक तरीका है ताकि यह व्यवहार मौजूद हो। क्या ऐसा करने में कोई कमियां हैं?


जवाबों:


25

यहाँ मुख्य अंतर यह है कि अभिभावकीय कथन (द्वारा लक्षित ci() नेस्टेड हो सकते हैं, जबकि उद्धृत स्ट्रिंग्स (द्वारा लक्षित ci") नहीं कर सकते।

यदि आपका कर्सर कुछ पैतृक कथन से बाहर है, तो यह अभी भी किसी अन्य के अंदर हो सकता है। उदाहरण के लिए ( *कर्सर स्थिति को चिह्नित करता है):

$foo = array(
    'x' => ar*ray(1, 2, 3),
);

कर्सर जिस लाइन पर है (1, 2, 3), वह है, लेकिन कर्सर बड़े array(...)ब्लॉक के अंदर भी है । इस मामले में, बड़ा लक्ष्य इसके लिए उपयुक्त लक्ष्य है ci(

यदि आपका कर्सर कुछ उद्धृत स्ट्रिंग के बाहर है, क्योंकि वे नेस्टेड नहीं हो सकते हैं, तो ऐसा करने के लिए कोई पूरी तरह से समझदार चीज नहीं है। तो, विम लाभ उठाता है और लाइन पर पहला उद्धृत स्ट्रिंग पाता है।


10

पाठ वस्तुओं (की बोली परिवार i', i", a', और a") में है कि वे केवल वर्तमान पंक्ति पर देखने के पाठ वस्तुओं के बाकी की तुलना में अलग हैं। इसके कारण, विकल्प को उद्धरण के भीतर कर्सर की आवश्यकता नहीं होने के लिए बनाया गया था। इसके बजाय, विम एक उद्धृत स्ट्रिंग को खोजने के लिए लाइन के भीतर आगे खोज करेगा जब कर्सर पहले से ही अंदर नहीं है।

कुछ पैच के आसपास एक चर्चा है जो इस आगे के खोज व्यवहार को ब्लॉक आधारित पाठ वस्तुओं के लिए भी लागू करने की अनुमति देगा।


8

अन्य उत्तर कवर किए गए कि ऐसा क्यों होता है। यहाँ इसके चारों ओर काम करने का एक अच्छा तरीका है।

wellle / targets.vim । मुझे अभी हाल ही में यह प्लगइन मिला है, और मुझे लगता है कि यह बेहद कम है। यह एक नया पाठ वस्तु प्रदान करता है: din(स्मरक:। (घ) हटाएं (i) nside (एन) ext "(" इस तरह के रूप में अन्य ऑपरेटरों और कई अलग अलग वस्तुओं, के साथ संगत है an(, in", il((पिछले कोष्ठक के अंदर)

यह डिफ़ॉल्ट व्यवहार को भी ओवरराइड करता है i(ताकि यह पहले यह देखे कि कर्सर कोष्ठक में है या नहीं, और यदि ऐसा नहीं है तो यह उसी तरह काम करता है in(। इस व्यवहार को चालू या बंद किया जा सकता है। उदाहरण के लिए:

def foo(bar):
^cursor here

टंकण ci(उसी तरह कार्य करता है, जैसा cin(कि कर्सर कोष्ठक में नहीं है।

def foo( ):
        ^Cursor here, and in insert mode

यह भी एक गिनती स्वीकार करता है:

def foo(bar):           #Define function foo(bar)
^cursor here

टाइपिंग c2in(:

def foo(bar):           #Define function foo( )
                                             ^cursor here

यह एक नई वस्तु, "तर्क" भी प्रदान करता है। उदाहरण के लिए, dana"अगले तर्क के आसपास हटाएं" का अर्थ है। यह भी एक गिनती स्वीकार करता है। उदाहरण के लिए:

def foo(arg1, arg2, BADarg3):
^ cursor here

टाइपिंग d3ana:

def foo(arg1, arg2):
                  ^ cursor here

रहे हैं कई अन्य सुविधाओं के इस प्लगइन है, लेकिन इन बुनियादी होते हैं।


1
अच्छा! यह एक अच्छा जोड़ है। मुझे इसकी जाँच करनी पड़ सकती है।
रिएक्टर

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