बफर के अंत तक एक विम मैक्रो फिर से खेलना


85

मैं एक मैक्रो चलाना चाहता हूं जिसे मैं सिर्फ xएक खुले बफर की हर एक लाइन पर रजिस्टर में दर्ज करता हूं, मेरे कर्सर से बफर के अंत तक, विम में। मैं उसको कैसे करू?

मुझे पता है कि मैं स्थूल n समय फिर से कर सकते हैं:

15@x

... या @जब तक मैं अंतिम पंक्ति तक नहीं पहुँच जाता, तब तक रुक जाता हूँ, लेकिन मैं बस कुछ कीस्ट्रोक्स मारना चाहता हूँ और इसके साथ किया जाना चाहिए।

अग्रिम में धन्यवाद।


15 @ x विंडोज gVIM पर काम नहीं कर रहा है
शि

जवाबों:


101

व्यक्तिगत रूप से मैं करूँगा

VG:normal @x

संपादित करें: आपके द्वारा निर्दिष्ट रजिस्टर में बदल गया।


अच्छा है। मुझे पसंद है कि यह समाधान केवल चयनित क्षेत्र पर संचालित होता है।
केविन

मैंने इसे nnoremap के लिए मैप किया <C - @> VG: norm @ q <CR>
PAS

मैंने मैक्रो "1z =] s" के साथ यह कोशिश की, लेकिन यह केवल प्रत्येक पंक्ति के पहले शब्द को ठीक करता है, बाकी को स्किप करता है।
elig

@ शायद आप एक पुनरावर्ती मैक्रो बनाना चाहते हैं जो सभी लाइनों पर लापता शब्द पाएंगे।
रमन

67

आप कर सकते हैं (कमांड मोड में)

:%normal @x

मुझे यह समाधान पसंद है, लेकिन आईएल बफर की हर लाइन पर मैक्रो को निष्पादित करेगा, ओपी ने केवल अपने कर्सर से अंत तक पूछा।
पोरुंगा

24

पुनरावर्ती मैक्रो बनाएं:

qa@aq

उदाहरण के लिए:

qa0gUwj@aq

यह वर्तमान लाइन से एकल @ ए के साथ फ़ाइल के अंत तक पहला शब्द UPCASE करेगा। लेकिन सुनिश्चित करें कि "एक रजिस्टर खाली है:

let @a=""

3
अति उत्कृष्ट। यह दृष्टिकोण दृष्टिकोण की तुलना में अधिक उपयोगी है %:normalक्योंकि यह मैक्रो के भीतर किसी भी लाइन आंदोलनों का सम्मान करता है, इसलिए यह उपयोगी है जहां लाइनें फॉर्म में समान नहीं हैं। मुझे कार्रवाई को परिभाषित करने के लिए मैक्रो 'ए' बनाने में आसान लगता है और फिर मैक्रो 'बी' को पुनरावर्ती बिट, यानी क्यूबी @ ए @ बीक्यू करते हैं।
पॉल रूएन

3
इससे बचें यदि आपके मैक्रो में कोई खोज शामिल है, क्योंकि यह ऊपर से जारी रहेगा। ctrl-cअगर ऐसा होता है तो रोकने के लिए!
इयान बेलार्ड

3
@IainBallard, :set nowrapscanफ़ाइल के अंत तक पहुंचने में विफल और बंद हो जाता है।
एरिकाबिन

1
स्पष्ट करने के लिए रजिस्टर, बस qaqमैक्रो से पहले करते हैं qaqqa0gUwj@aq:। इसके अतिरिक्त, यदि आप @qअंत में रखना भूल जाते हैं, तो आप हमेशा qAरजिस्टर रजिस्टर करना शुरू कर सकते हैं , और फिर कर सकते हैं @q। मैं आमतौर पर किसी कारण के लिए क्यू दर्ज करने के लिए रिकॉर्ड करता हूं क्योंकि यह आसान है (पुनरावर्ती मैक्रोज़ के लिए) और आमतौर पर qqqqqgUiwj@qqदो मैक्रोज़ के बजाय अंत करना । पहले तीन qs स्पष्ट reg q, दूसरा दो qs रिकॉर्डिंग शुरू। Vim.wikia.com/wiki/Record_a_recursive_macro
dylnmc

मुझे लगता है कि aरजिस्टर को साफ करना आसान हो सकता हैqaq
पीटर पेर्ह

11

999999@x, जब तक कि आपके पास बहुत बड़ा बफर न हो ...


6
सिर्फ %:normal @xया क्यों नहीं 1,$:normal @x?
नाथन फ़ेलमैन

3
यह निश्चित रूप से अधिक सुरुचिपूर्ण समाधान है - मुझे लगता 99999@xहै कि जब आप जल्दी में होते हैं तो सिर्फ प्राकृतिक चीज होती है :)
पीटर

2
जब तक आपके पास 999999 लाइनें नहीं होंगी, तब तक 9999999 @ x इसे अंतिम पंक्ति पर कई बार नहीं चलाएगा?
डेविड वनिल

2
बस कोशिश की। सत्र लटका देता है। संभवतः लाइन के अंत में बिना रुके इसे एक लाख बार तक चलाना जारी है।
सीडीआर

1
कम से कम कुछ मामलों में यह अपेक्षा के अनुरूप व्यवहार नहीं करेगा। अगले खोजने के साथ एक मैक्रो होने पर विचार करें / इसमें मौजूद खोजें । इसलिए, एक बार जब मैक्रो रिपीट फ़ाइल के अंत तक पहुँच जाता है, तो यह शुरुआत से जारी रहेगा। विषय पर डॉक्टर । खोज रैपिंग को रोकने के लिए, एक का उपयोग करना चाहते हैं : Nowrapscan सेट कर सकते हैं । यह एक उदाहरण है जिसके साथ मैं आ सकता था, लेकिन इसका मतलब यह नहीं है कि कोई और अधिक नहीं है। :% normal @ x ऊपर दिए गए उत्तर में @ryan_s के रूप में जाने का एक तरीका है।
सर्गेई मार्केलोव

-1

विम विकी से, लघु संस्करण: qqqq को रिकॉर्ड करने के लिए मैक्र @qq को रिकॉर्ड करें


1
कृपया, क्या आप प्रलेखन का संदर्भ जोड़ सकते हैं?
aturegano

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