मैं अपनी रिकॉर्डिंग (यानी रिकॉर्ड किए गए मैक्रो) को कैसे देख और संपादित कर सकता हूं?


38

मैं अपने कार्यों के रिकॉर्ड करने के लिए जटिल दोहराता उपयोग कर रहा हूँ ( qqरिकॉर्ड, करने के लिए कुछ कार्यों , qबंद करने के लिए) और मैं एक गलती की थी।

यह देखने के लिए संभव है कि मैंने क्या गलती की है और इसे फिर से करने के बजाय गलती को सुधारना है?

रिकॉर्ड किए गए वर्णों को @qकार्य द्वारा आमंत्रित करना , लेकिन मैं इसे अपने मैपिंग ( :map q- No mapping found) में नहीं देख सकता ।

और टाइप करके मदद में बहुत अधिक जानकारी नहीं है :help recording:।

जवाबों:


41

नोट: मैं मान रहा हूं कि आप aइस उत्तर की संपूर्णता के लिए रजिस्टर का उपयोग कर रहे हैं , लेकिन आप किसी भी रजिस्टर का उपयोग कर सकते हैं

नोट 2: <1b>है Esc; आप इसके साथ सम्मिलित कर सकते हैं Ctrl+vऔर फिर Esc। यह ^[( displayसेटिंग के आधार पर ) के रूप में भी दिखाई दे सकता है ।


यह मानचित्रण नहीं है; तो यह समझ में आता है कि :mapकाम नहीं करता है। यह एक रजिस्टर में दर्ज है, और आप इसे किसी भी रजिस्टर की तरह देख और संपादित कर सकते हैं।

वह सब qकरता है "इस रजिस्टर को साफ़ करें, और इसे किसी भी कीस्ट्रोक को जोड़ें" , और यह सब "आदेशों के अनुसार एक रजिस्टर का मूल्यांकन"@ करता है ।

मैक्रो के बारे में "अलग" कुछ भी नहीं है, आप किसी भी रजिस्टर को मैक्रो के रूप में आमंत्रित कर सकते हैं।


करने के लिए देखने सिर्फ उपयोग करें:

:echo @a

बिल्कुल किसी रजिस्टर की तरह।

आप :registersसभी रजिस्टरों को देखने के लिए भी उपयोग कर सकते हैं ।


संपादित करने के लिए आप कई काम कर सकते हैं:

सबसे आसान तरीका है कि आप इसे केवल असाइन करें @a, जैसे:

:let @a='iasd<1b>'

यह इन्सर्ट मोड ( i), इंसर्ट asdऔर एस्केप टू नॉर्मल मोड से शुरू होगा।

व्यापक संपादन के लिए यह बहुत उपयोगी नहीं है; आप फ़ंक्शंस का उपयोग कर सकते हैं (यानी। substitute()), या शायद कुछ ( :let @a=@a . 'more') को जोड़ सकते हैं , लेकिन बीच में कुछ बदलना इतना आसान नहीं है।

मैंने पाया है कि इसके लिए सबसे अच्छा तरीका है, एक नया बफर शुरू करना :splitया उसके साथ :tabnewरजिस्टर को एडिट करना, उसे एडिट करना और फिर उसे कॉपी करना।

आप उपयोग कर सकते हैं "apजो बफर में पाठ को सम्मिलित करेगा (जहां aआपका रजिस्टर है):

iThis is A<1b>

अब मैं सिर्फ लाइन को शायद बदल सकता हूं:

iThis is an edited macro<1b>

फिर मैं रजिस्टर में ^v$"ayइस लाइन को कॉपी (कॉपी) करता हूं a:

  • ^ लाइन की शुरुआत के लिए
  • v दृश्य विधा के लिए
  • $ लाइन के अंत के लिए
  • "ay पंजीकरण करने के लिए चयन रद्द करें a

यदि आप चाहें, तो आप दृश्य मोड का उपयोग किए बिना ऐसा कर सकते हैं ^"ay$

अब आप उपयोग कर सकते हैं @a, जैसे कि यह वही है जो आपने मूल रूप से रिकॉर्ड किया था।

तुम भी बस का उपयोग कर सकते हैं yy, और फिर @", जो थोड़ा तेज है। यह भी अनुगामी newline की नकल करेगा, हालांकि, और दुष्प्रभाव हो सकता है ... इस तेजी से बनाने के लिए एक और तरीका एक मैक्रो का उपयोग करने के लिए है :-)


2
मैं यह नोट करूंगा कि आपके रजिस्टर में एक लाइनवाइज़ मोशन में आने से एक न्यूलाइन वर्ण शामिल करने का साइड इफेक्ट होगा, जैसे कि आपने Enterअपनी रिकॉर्डिंग के अंत में दबाया था । कई मामलों में यह सौम्य हो सकता है, लेकिन उन परिदृश्यों में जहां आपने रिकॉर्डिंग के अंत में ध्यान से कर्सर की स्थिति तैयार की है, यह दोहराव को प्रभावित कर सकता है।
तोमकाडो

@tommcdo अधिकार; आप vपूरी लाइन (न्यूलाइन के बिना) का उपयोग और चयन कर सकते हैं ।
मार्टिन टूरनोइज

@Carpetsmoker " रजिस्टर v^$"ayकरने के लिए इस लाइन कोa yank (कॉपी) करें ।" क्या ^इससे पहले नहीं आना चाहिए v, और $क्या आप अभी भी न्यूलाइन की नकल नहीं कर रहे हैं? मुझे लगता है कि यह होना चाहिए: 0v$h"ay(हाँ दर्दनाक रूप से लंबे समय तक!)
joeytwiddle

2
@joeytwiddle नहीं, लाइन के अंत में $ले जाता है , लेकिन इसमें नई रेखा शामिल नहीं है। यह बीच का अंतर है 0y$और yy। रखने के hबाद का $मतलब सिर्फ इतना होगा कि आप अंतिम चरित्र को याद करेंगे।
evilsoup

एक चीज जिसे आप संपादन करने के लिए कर सकते हैं: let @ a = type कमांड को अधिक आसानी से संपादन योग्य टाइप करने के लिए है: <Ctrl-f>, संबंधित पंक्ति (अंतिम पंक्ति, जिसे वह डिफ़ॉल्ट करता है, का चयन करें और संपादित करें, यदि आप संपादन कर रहे हैं अंतिम पंक्ति जो आपने दर्ज की है) हमेशा की तरह विम का उपयोग करते हुए। जब आप लाइन को निष्पादित करने के लिए किए जाते हैं, तो बाहर निकलें या <Ctrl-c> से बाहर निकलें।

9

कुछ के साथ काम करने के लिए ...

qajjjq

aरजिस्टर में एक मैक्रो रिकॉर्ड शुरू कर देंगे ।

आप :regकमांड के साथ अपने कई वर्तमान रजिस्टर (मैक्रोज़, यैंकिंग, डिलीट करने के लिए उपयोग किए गए) देख सकते हैं, या आप अपना नाम प्रदान करके प्रदर्शित करने के लिए एक रजिस्टर निर्दिष्ट कर सकते हैं। उदाहरण के लिए, रजिस्टर दिखाने के लिए a:

:reg a

पैदावार

--- Registers ---
"a   jjj

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

qAkkkq
:reg a

पैदावार

--- Registers ---
"a   jjjkkk

यदि आप किसी मौजूदा मैक्रो को संपादित करने के लिए सिंटैक्स का उपयोग करना चाहते हैं, तो आप कर सकते हैं:

let @a='<C-r>a'

जिसका विस्तार होगा

let @a='jjjkkk'

और फिर आप अलग-अलग कीस्ट्रोक्स बदल सकते हैं।

ध्यान दें कि आप <C-r>किसी भी रजिस्टर से कमांड-लाइन मोड में पेस्ट करने के लिए (अर्थात, कंट्रोल + आर) का उपयोग कर सकते हैं (या उस मामले के लिए इन्सर्ट मोड में)।

इसके अलावा, जब आप कमांड-लाइन मोड में होते हैं, यदि आप टाइप करते हैं तो <C-f>यह कमांड-लाइन विंडो को पॉप अप करेगा, जिसमें आप पिछले आदेशों को देख / संपादित कर सकते हैं, और कॉल करने से पहले अपने वर्तमान कमांड को संपादित कर सकते हैं। उस कमांड पर एंटर दबाएं जिसे आप सबमिट करना चाहते हैं।

इसका लाभ यह है कि आप अपने मैक्रो को संपादित करने के लिए इस बफर के अंदर अपने सामान्य आंदोलन / प्रतिस्थापन आदेशों का उपयोग कर सकते हैं। उदाहरण के लिए:

let @a='<C-r>a'<C-f>

लाएगा:

:118 reg
:119 reg a
:120 let @a='jjjkkk'

यदि आप कमांड 120 पर हैं, तो आप कर सकते हैं:

s/kkk/}
<return>
:reg a

पैदावार

--- Registers ---
"a   jjj}

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

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