किसी मैक्रो में अंतिम क्रिया (।) सहेजें


9

उदाहरण

मैं सामान्य मोड में हूं। मैंने मैक्रो रिकॉर्ड करने के बारे में स्पष्ट रूप से नहीं सोचा है, लेकिन मैं एक एकल कमांड परिवर्तन करता हूं। मैं अब डॉट का उपयोग करके इस कार्रवाई को दोहरा सकता हूं।

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

उत्तरार्द्ध वह है जो मैं करना चाहता हूं, लेकिन सबसे आसान तरीका जिसे मैं करने के बारे में सोच सकता हूं वह आसान नहीं है - मेरे बदलाव को बदलना, मैक्रो रिकॉर्ड करना शुरू करें और आवश्यक बदलाव करने के लिए कमांड को फिर से टाइप करें और मैक्रो रिकॉर्ड करना बंद करें।

मैंने अब तक कितनी कोशिश की है:

मैक्रो में रिकॉर्डिंग डॉट काम नहीं करता है क्योंकि यह डॉट को रिकॉर्ड करता है न कि वह परिवर्तन जो डॉट करता है। (उदाहरण के लिए, मान लें कि डॉट में संग्रहीत कमांड थी, d5wयदि आप एक मैक्रो रिकॉर्ड करना शुरू करते हैं और इसके माध्यम से कार्रवाई करते हैं। यह अपेक्षा करते हुए कि आप मैक्रो को चलाने पर हर बार 5 शब्द हटा देंगे, तब ऐसा नहीं होगा। अगली बार जब आप दौड़ेंगे। मैक्रो यह डॉट करेगा और कमांड नहीं d5w। इसका मतलब है कि अगर आपने मैक्रो रिकॉर्ड करने के बाद कुछ और बदलाव किए हैं - तो कहिए कि 3 शब्दों का उपयोग करके हटाएं d3wऔर यह आपके द्वारा किया गया अंतिम परिवर्तन था, तब जब आप मैक्रो चलाते हैं तो यह 3 हटा देगा शब्द और 5 नहीं, क्योंकि यह अभी चल रहा है .)


मैं दोनों को समझने के लिए संघर्ष कर रहा हूं कि आप क्या करना चाहते हैं, और आप जो कुछ भी नहीं करते हैं वह मैक्रो के साथ है।

1
@DrEval ओपी को एक सामान्य-मोड कमांड का प्रदर्शन करने के बाद पता चलता है कि उन्हें इसे एक मैक्रो में सहेजना चाहिए था, और मैक्रो रिकॉर्ड करते समय इसे फिर से टाइप करना नहीं चाहिए।
रिच

जवाबों:


2

विम आपके सामान्य मोड कमांड का इतिहास नहीं रखता है। यदि आप अपने सामान्य मोड के इतिहास को रखना चाहते हैं, तो आप उस फ़ाइल को सहेजने के लिए निम्न का उपयोग कर सकते हैं: https://vi.stackexchange.com/a/587/13848

सामान्य मोड कमांड आमतौर पर कम होते हैं, इसलिए लोग इसे सामान्य मोड में टाइप करते हैं और मैक्रोज़ बनाने की कोशिश नहीं करते हैं। हालाँकि, यदि आप सामान्य मोड कमांड से मैक्रोज़ बनाना चाहते हैं, तो आप इसे Exमोड कमांड में बदल सकते हैं और फिर @wmmso के रूप में मैक्रो में सेव कर सकते हैं। आप normकमांड का उपयोग करके ऐसा कर सकते हैं । इसलिए यदि आप वर्तमान कर्सर स्थिति में शुरू होने वाले 2 शब्द को हटाना चाहते हैं, और मोड उपयोग में एक सामान्य मोड कमांड का Exउपयोग करते हैं :norm d2w। (संदर्भ: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , रेंज पर सामान्य कमांड निष्पादित करें )

Exमोड कमांड का उपयोग करने के लिए बेहतर है यदि यह एक जटिल कमांड है, क्योंकि यह आपको पूरी कमांड को एक बफर में टाइप करने की अनुमति देता है, सुनिश्चित करें कि यह वास्तव में सही है और कमांड लाइन के इतिहास में भी इसे बचाता है।

अब जब आपके पास पूर्व मोड में आपकी सामान्य मोड कमांड है, तो आप अपने कमांड को इतिहास का उपयोग करके भी ब्राउज़ कर सकते हैं q:, और फिर इसे एक रजिस्टर का उपयोग करके कॉपी कर सकते हैं "ay$, जबकि कमांड लाइन जिसमें आप मैक्रो को सहेजना चाहते हैं। फिर जब आप मैक्रो को चलाना चाहते हैं, तो आप इसका उपयोग करके निष्पादित कर सकते हैं@a


यद्यपि आप कमांड लाइन में एक सामान्य मोड कमांड कैसे लिखेंगे? उदाहरण के लिए d2w?
पीयूष कुशवाहा

उत्तर में कुछ स्पष्टीकरण जोड़े गए .. क्या वह मदद करता है?
अल्फा_989

0

":" रजिस्टर (जो आपने अभी किया है) की सामग्री को दूसरे रजिस्टर में कॉपी करें, उदाहरण के लिए, रजिस्टर करें: a।

:let @a = @:

आप इसे फिर से उपयोग करके निष्पादित कर सकते हैं

@a

यह मेरे लिए काम नहीं करता है vim 7.4। ऐसा लगता है कि रजिस्टर :में :command-name-goes-hereसामान्य मोड कमांड के बजाय अंतिम निष्पादित कमांड होती है जैसेd2w
पीयूष कुशवाहा

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