मैं कमांड लाइन में रहते हुए रिकॉर्डिंग कैसे रोकूँ?


20

जब मैं एक मैक्रो रिकॉर्ड कर qरहा हूँ और मैं कर रहा हूँ, मैं टाइप कर सकता हूँ:

  • q यदि मैं सामान्य या दृश्य मोड में हूं तो रिकॉर्डिंग बंद करना।
  • <c-o>q अगर मैं इन्सर्ट मोड में हूँ तो रिकॉर्डिंग को रोकना है।
  • ..

    यदि मेरा मैक्रो कमांड मोड में समाप्त होता है तो मैं रिकॉर्डिंग कैसे रोक सकता हूं?


इसके लिए आपका उपयोग मामला क्या है? मैं वास्तव में बहुत उत्सुक हूं :)
फिलिपफ्रैंक

2
@PhilippFrank मैं अक्सर पाठ के विभिन्न ब्लॉकों में अलग-अलग लोगों के साथ एक ही पैटर्न खोज और प्रतिस्थापित करूंगा। इस तरह के मैक्रो के साथ, ब्लॉक को चुनना, वास्तविक खोज पैटर्न लिखना और कर्सर को रिप्लेसमेंट चेन टाइप करने के लिए अच्छी स्थिति में रखना स्वचालित रूप से बनाया जा सकता है। जब मैं इसे खेलता हूं, तो यह ब्लॉक का चयन करेगा, कमांड मोड दर्ज करेगा, :'<,'>s/toBeReplaced//gफिर दोनों के बीच कर्सर रखें, //ताकि मुझे जो करना है वह टाइप करना है newString<cr>और मैं कर रहा हूं। :)
iago-lito

तो यह एक पैरामीटर के साथ एक मैक्रो की तरह है। बहुत अच्छा विचार है, धन्यवाद!
फिलिप्रेंक

@PhilippFrank की तरह, हाँ। मैं खुश हूँ कि आपको यह पसंद है। :)
iago-lito

जवाबों:


13

एक अन्य उपाय यह है कि कमांड लाइन मोड में, रिकॉर्डिंग बंद करने के लिए उपयोग करें Ctrl-fऔर दबाएं q

Ctrl-fआपको कमांड लाइन विंडो खोलने की अनुमति देता है, जिसमें आप कमांड को सामान्य मोड में संपादित कर सकते हैं। आदेश को मान्य करने के लिए, बस प्रवेश का उपयोग करें।


इसलिए, कुछ जोड़ने के बाद:

cnoremap <c-q> <c-f>i<c-o>q

अपने में .vimrc, आप <c-q>कमांड मोड में रहते हुए मैक्रो को रिकॉर्ड करना बंद कर सकते हैं ।


फ्लोरेंट


आपको अभी भी ^Fमैक्रो के अंत से <Cf> चरित्र ( ) को निकालना है , है ना? कम से कम मैं यही देखता हूं।
वनलेसर

लगभग वहाँ पहुँच गया! वास्तव में उपयोगी (मैं कमांड लाइन विंडो के बारे में नहीं जानता था लेकिन यह बहुत अच्छा है), लेकिन .. आरा! ऐसा लगता है कि सम्मिलित मोड से इस विंडो में प्रवेश करने से आपका चयनित क्षेत्र खो जाता है। क्या आपके द्वारा चयनित क्षेत्र पर कमांड लाइन विंडो कार्य से लॉन्च की गई कमांड बनाने का कोई तरीका है?
इगो-लिटो

@VanLaser नहीं, चूंकि आप कमांड-लाइन विंडो में अपना कमांड टाइप करके जा सकते हैं। आपका मैक्रो जैसा होगा qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>qऔर इसलिए रिकॉर्डिंग वास्तव में बंद हो गई है जब आपके कमांड भाग टाइप कर रहे थे। मैक्रो का उपयोग करने के लिए: @qFINISHYOURCOMMAND<cr>और आप कर रहे हैं: इसे संपादित करने की कोई आवश्यकता नहीं है। दुर्भाग्य से, यह दृश्य मोड से काम नहीं करता है (या यह चयन खो देता है) .. या मैंने कुछ याद किया है?
इगो-लिटो

आह, ठीक है :) BTW, मैं एक दृश्य रेंज का चयन कर सकता था, फिर करो @qऔर रेंज को कमांड स्टार्ट पर जोड़ा गया '<,'>- जब तक मैक्रो के साथ शुरू हुआ :....
VanLaser

@ लैगो-लिटो वास्तव में, ऐसा लगता है कि भले ही आप अपना चयन न देखें, निर्दिष्ट श्रेणी (यानी '<,'>) अभी भी कमांड को सत्यापित करते समय चयन से मेल खाती है।
9

17

इसे करने का एक तरीका:

  • अपने मैक्रो को हमेशा की तरह शुरू करें (जैसे qq... अन्य वर्ण)
  • जब आप cmdline- मोड पर पहुंचते हैं, तो अपने इच्छित सभी वर्ण लिखें
  • आप यहाँ मैक्रो को समाप्त करना चाहते हैं। अपने मैक्रो को समाप्त करने के लिए ESC, cmdline- मोड से बाहर निकलने के लिए मारो q
  • ESCअपने qरजिस्टर (*) से निकालें : आप इसे एक बफर में पेस्ट कर सकते हैं, ^[चरित्र को हटा सकते हैं, पूरे सामान को फिर से चुन सकते हैं (चरित्र-वार) और इसे रजिस्टर करने के लिए वापस कर दें q
  • यह बात है: अपने मैक्रो को चलाएं @q:।

मूल रूप से, आप अपने मैक्रो को "पोस्ट-प्रोसेस" थोड़ा करते हैं, क्योंकि यह एक रजिस्टर में संग्रहीत होता है :)

(*) रजिस्टर में संग्रहीत मैक्रो से अंतिम वर्ण को निकालने का एक त्वरित तरीका qहोगा:

:let @q = @q[:-2]

Haha! यह वास्तव में अब तक मेरा हैक है = डी। क्या ऐसा करने का एक "विहित" तरीका नहीं है? (और भी तेज )
iago-lito

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

@VanLaser: क्या आप :let @q = @q[:-2]कृपया लाइन के बारे में थोड़ा और विवरण दे सकते हैं ? खासकर कैसे [:-2]काम करता है ? :-)
statox

यह "स्लाइसिंग" है और सूचियों, और स्ट्रिंग्स पर काम करता है (जो कि मैं @qऊपर कैसे / सेट करता हूं )। कुछ उदाहरण यहाँ
VanLaser

@VanLaser वे वास्तव में गुप्त दिखते हैं। हालांकि, दोहराने के लिए उपयोगी हैं, परिष्कृत छोटी चीजें जिनकी आपको ज़रूरत है वे बहुत विशिष्ट मामलों में करते हैं .. आप इस तरह की समस्याओं को जानते हैं जो केवल एक बार दिखाई देती हैं और केवल कुछ ही मिनटों तक रहती हैं। मक्खी पर मैक्रोज़ बनाकर और बिना लिखे और डिबग किए एक समर्पित कार्य करने के लिए उनसे निपटने में सक्षम होने के नाते बस इतना अद्भुत है! ^ ^
16:52 बजे इगा-लिटो

3

उपयोग मामले के बारे में आपकी टिप्पणी पढ़ने के बाद, ऐसा लगता है कि आप मैक्रो के बजाय एक कुंजी मैपिंग का उपयोग कर सकते हैं।

मेरे पास यह लाइन मेरे .vimrc (याद नहीं है कि मुझे यह कहां मिली):

nnoremap <Leader>s :%s/\<<C-r><C-w>\>//g<Left><Left>

यह आपके द्वारा वर्णित उपयोग के मामले में एक समान प्रभाव डालता है, आपको कमांड लाइन पर डालता है, इसलिए केवल एक चीज जो आपको करनी है वह है प्रतिस्थापन और प्रेस दर्ज करें, लेकिन इस मामले में, आपके कर्सर के तहत आने वाले शब्द की सभी घटनाओं को प्रतिस्थापित करना। ।

बस वर्तमान ब्लॉक के भीतर बदलने के लिए, मुझे लगता है कि निम्नलिखित की तरह कुछ काम करना चाहिए:

nnoremap <Leader>s m'va{<ESC>``:'<,'>s/\<<C-r><C-w>\>//g<Left><Left>

बेशक, आप जो भी कुंजी चाहते हैं, उसे मैप कर सकते हैं।

ऊपर क्या होता है: अनाम मार्कर का उपयोग करके वर्तमान स्थिति को चिह्नित करें, नेत्रहीन वर्तमान ब्लॉक का चयन करें, दृश्य मोड को छोड़ दें और कर्सर को सहेजे गए स्थान पर लौटें (दृश्य चयन मार्कर अभी भी सेट हैं), कमांड मोड दर्ज करें और स्थानापन्न कमांड टाइप करें , उस शब्द को सम्मिलित करना जो कर्सर के साथ था <C-r><C-w>, और प्रतिस्थापन को टाइप करने के लिए अपने कर्सर की स्थिति।


हाँ, मेरे पास भी यही है। मेरे विशिष्ट उपयोग के मामले में, हालांकि, toBeReplacedपैटर्न "कर्सर के तहत शब्द" के रूप में सरल नहीं है, यही कारण है कि मुझे एक छोटे, विशिष्ट मैक्रो की आवश्यकता है जो मैं चलते समय बना सकता हूं। और फिर फिर: एक नक्शे के लिए बहुत विशिष्ट है: \ वैसे भी धन्यवाद :)
iago-lito

2
शायद, एक रजिस्टर में पैटर्न डालें, फिर उपरोक्त सामग्री को स्वचालित रूप से रजिस्टर सामग्री को toBeReplacedभाग के रूप में प्राप्त करने के लिए अनुकूलित करें (बजाय कर्सर के नीचे मौजूदा शब्द, जो अधिक सीमित है)।
वैनलेसर

1
@VanLaser सही, जो एक सामान्य मानचित्रण के लिए अनुमति देगा, और इसे बहुत सरल भी बना देगा: va{:s/<C-r>0//g<Left><Left>इसके साथ आप हाथ से पहले जो भी पैटर्न की आवश्यकता कर सकते हैं, और फिर उस पैटर्न को वर्तमान में कुछ के साथ बदलने के लिए मैप की गई कुंजी को दबाएं। खंड मैथा।
ढाकीमियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.