2013-02-01 14 views
19

हम सभी जानते हैं क्या ci"ci'ci(ci[ ... हर रोज के संपादन में करता है। बहुत आसान। मैं कुछ अजीब पाया, और मदद की जाँच की, नहीं था ' टी पता लगाना क्योंक्यों ci "और ci (, ci {.... व्यवहार करते हैं अलग तरह से?

कहते हैं, मैं एक फ़ाइल है:।

foo "target" 
foo 'target' 
foo (target) 
foo {target} 
foo [target] 
foo <target> 

अगर प्रत्येक पंक्ति का, ('f' पर) शुरुआत में मेरी कर्सर, तो मैं ci टाइप ", ci ', सीआई (...

cix केवल उद्धरण (एकल या दोहरा) के साथ काम करता है, ब्रैकेट के लिए काम नहीं करता है। वे अलग तरीके से क्यों व्यवहार करते हैं?

(dix, vix ही)

--noplugin के साथ परीक्षण किया, vim 7.3

धन्यवाद।

अद्यतन

धन्यवाद जवाब के लिए @romainl। मैं अभी भी संदेह इस उदाहरण

जांच "vim में जोड़ी संसाधन" के बारे में है:

foo "targ\"eti\" some\"thing else " 

अगर मैं, ऊपर की तरह एक लाइन है मैं ci" टाइप करें, कोई फर्क नहीं पड़ता कर्सर, शुरुआत में या उद्धरण के बीच है यह पूरी तरह से काम करता है, ऐसा लगता है कि विम के पास "जोड़ी" का विचार है?

और यह शायद जोड़ी के बारे में आपका मतलब था?

foo "target x some"thing else " 
foo (target x some(thing else) 

मैं, दो पंक्तियों से ऊपर है (x पर कर्सर) मैं ci" और ci( टाइप कुछ भी नहीं 2 लाइन को क्या हुआ है, लेकिन पहले लाइन में बदल गया है,:,

foo "I"thing else " (I is cursor) 
+3

विम उद्धरण जोड़ी नहीं जोड़ता है। इसका उपयोग करने वाला ह्युरिस्टिक वास्तव में बहुत आसान है: '' 'या' '' खोजने के लिए बाएं तरफ स्कैन करें। यदि कोई हिट नहीं है तो दाएं दोहराएं। फिर बंद उद्धरण खोजने के लिए फिर से दोहराएं। बच निकले उद्धरण '\ '' '\" ' कभी ध्यान में नहीं लिया। – glts

+4

यह भी देखें [मेरा जवाब] (http://stackoverflow.com/a/7804666/254635) प्रश्न में "[विम में कोष्ठक के बाहर से पैराथेसिस के अंदर पाठ का चयन करना] (http://stackoverflow.com/q/7803905/254,635) "। –

+0

@ib। और टिप्पणियों के लिए glts, thx। वोट दें! – Kent

उत्तर

13

ci(ci[ के अनुरूप है ci{ और cit और अन्य सभी <action>i<something>। केवल ci' और ci" काम करते हैं जैसे वे करते हैं। आउटलाइजर्स उद्धरण हैं, यहां, ब्रैकेट नहीं।

विम इस बात पर विचार नहीं करता है कि ब्रैकेट करते समय उद्धरण जोड़े में आते हैं। इसमें मेल खाने वाले जोड़े के लिए एक आंतरिक तर्क है जो वास्तविक जोड़ों के साथ काम करता है लेकिन उद्धरण के साथ व्यवहार में अंतर नहीं है।

आप उस विसंगति के बारे में शिकायत करने वाले पहले व्यक्ति नहीं हैं: this is one solution, शायद आप दूसरों को ढूंढ सकते हैं।

संपादित

मैं विम के internals का एक गहरा ज्ञान की जरूरत नहीं है, दुर्भाग्य से, तो मैं केवल मान्यताओं यहाँ कर सकते हैं।

आप विम ci" करने के लिए पूछना अगर यह जोड़े के द्वारा मत जाओ दोहरे उद्धरण चिह्नों लेकिन दोहरे उद्धरण चिह्नों की एक जोड़ी खोजने के लिए अपना सर्वश्रेष्ठ देता है: कोई रास्ता नहीं है, तो एक " समापन एक या उद्घाटन एक विपरीत करने के लिए है यह बताने के लिए है कोष्ठक। इसके कारण, विम को कुछ विकल्प बनाना चाहिए। आईएमओ, यह विकल्प जो परिवार के अन्य सदस्यों के काम पर विचार करने के बारे में सबसे ज्यादा समझ में आता है, यह मानना ​​होगा कि कर्सर उद्धरणों के बीच है और पहले से दाएं से दाएं से दाएं तक का चयन करें। मैं केवल यह मान सकता हूं कि यह विधि किसी भी तरह से गलत साबित हुई है या किसी कारण से काम नहीं की है और दूसरी विधि (वर्तमान एक) प्रबल है।

एक और स्पष्टीकरण यह हो सकता है कि i<something> तंत्र किसी भी तरह से एक विशिष्ट उपप्रणाली (शायद showmatch के समान) से जुड़ा हुआ है जो उद्धरणों के साथ सही ढंग से निपटने में असमर्थ है।

वैसे भी, आपके जैसे ही, मुझे यह विसंगति अजीब लगता है और मैंने किसी भी तरह से इसका आंतरिककरण किया है और अन्य लोगों के काम के लिए <action>i" के उपयोग को गठबंधन किया है। वास्तव में 2t"ci" या ci" के बजाय कुछ संस्करण करने के बिंदु पर !! अक्षम, मुझे पता है।

क्या आपने :h a' पढ़ा था? मैं पूरी तरह से भूल गया कि मुझे इस मुद्दे की "सीमित समझ" कहाँ मिली लेकिन यह वहां था! यह कहता है:

"केवल एक पंक्ति के भीतर काम करता है। जब कर्सर उद्धरण पर शुरू होता है, तो विम यह पता लगाएगा कि कौन से उद्धरण जोड़े लाइन की शुरुआत से खोज कर स्ट्रिंग बनाते हैं।"

यह क्या मैं उस से मिलता है: कुछ कारणों हमें अज्ञात के लिए, विम अन्य जोड़े के लिए की तुलना में उद्धरण मिलान के लिए एक और तंत्र का उपयोग करता है और यही कारण है ci"cib और दोस्तों से अलग है कि है। अंतर्निहित कारण बिल्कुल स्पष्ट नहीं है लेकिन मैं काफी हद तक निश्चित हूं कि बड़ी तस्वीर मुझे कल्पना की तरह दिखती है।

मेरे लिए, यह एक बग या एक सुविधा के रूप में छिपी हुई सीमा की तरह दिखता है।

यदि आप अभी भी उत्सुक हैं, तो मैं सुझाव दूंगा कि आप vim-dev पर कोई और प्रश्न पूछें।

+0

उत्तर के लिए धन्यवाद। बेहतर प्रारूप समर्थन प्राप्त करने के लिए मुझे अभी भी कुछ संदेह हैं, मैं सवाल अपडेट करता हूं। क्या आप एक नज़र डाल सकते हैं? धन्यवाद। – Kent

+0

@Kent, कृपया मेरा संपादन देखें। – romainl

+0

स्पष्टीकरण के लिए धन्यवाद! मैं अपने .vimrc में कुछ मैपिंग कर दूंगा ताकि वे व्यवहार कर सकें। जवाब स्वीकार कर लिया! – Kent