दोहराने के लिए एक साथ बंडलिंग कमांड अनुक्रम (।)


10

विचार करें:

apple
pear

अपना कर्सर पहली पंक्ति में रखें और Ypनिर्माण करें:

apple
apple
pear

अपने कर्सर को pearलाइन पर रखें और .अंतिम कमांड को दोहराने के लिए टाइप करें। यह केवल p(संयोजन के बजाय Yp) दोहराता है , उत्पादन:

apple
apple
pear
apple

मैं .अंतिम N कमांड्स को दोहराने का तरीका बताना चाहूंगा । कुछ का उत्पादन करने के लिए 2.संयोजन Ypको दोहराने के लिए:

apple
apple
pear
pear

Ofc जो काम नहीं करेगा - वह pदो बार दोहराता है । लेकिन यह विचार " अंतिम 2 कमांड के अनुक्रम को दोहराएगा "।

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

क्या मैं जो चाहता हूं उसे हासिल करने का कोई तरीका है?

सांत्वना पुरस्कार: यदि उपरोक्त संभव नहीं है, तो क्या अंतिम मैक्रो प्लेबैक को दोहराने का एक तरीका है? उदाहरण के लिए, यदि मैंने @@अपना अंतिम मैक्रो प्लेबैक करने के लिए टाइप किया है , तो मैं चाहूंगा कि बाद में फिर .से टाइप करने के बराबर हो @@- जो कि यह नहीं है (उदाहरण के लिए, यदि @@आप जिस लाइन पर हैं उस पर निर्भर करता है)


मुझे आपके मुद्दे के पहले भाग के लिए एक समाधान नहीं पता है, लेकिन दूसरे भाग के लिए, आप इस मैपिंग को आज़मा सकते हैं: nno <silent> @@ @@:sil! call repeat#set('@@', v:count1)<CR>लेकिन इसके लिए काम करने के लिए, आपको इस प्लगइन को स्थापित करने की आवश्यकता है: github.com/tpope/vim-repeat
user9433424

जवाबों:


4

विम केवल अंतिम निष्पादित कमांड को संग्रहीत करता है , और केवल उसी द्वारा दोहराया जाता है .; मेरी राय में, कुछ और संभालना मुश्किल होगा।

यदि आप Ypकॉम्बो को एकल इकाई के रूप में दोहराने की आवश्यकता महसूस करते हैं , तो आपको इसे एक एकल कमांड बनाना होगा। टिम पोप के दोहराने.विम प्लगइन कस्टम मैपिंग के लिए आसानी से करने की अनुमति देता है। बेशक, यदि आप मानचित्रण के लिए एक छोटी कुंजी [अनुक्रम] चुनते हैं, तो आप बस जल्दी से उस (इसके बजाय .) को फिर से टाइप कर सकते हैं , और यहां तक ​​कि दोहराने से भी बचा सकते हैं। एकीकरण।

BTW, मेरा LineJuggler प्लगइन]d वर्तमान लाइन को डुप्लिकेट करने के लिए एक मैपिंग प्रदान करता है , और यह rep.vim के माध्यम से दोहराने का समर्थन करता है।


2

में Yp, दोहराने के लिए एकमात्र "परिवर्तन" है p.सामान्य मोड में व्यवहार को बदलने का एकमात्र तरीका मुझे विकल्प में जोड़ना yहै cpoptions:

set cpoptions+=y

जो आपको अंतिम परिवर्तन के साथ-साथ अंतिम यान को दोहराने की सुविधा देता है।

लेकिन यह आपकी समस्या के लिए कुछ भी नहीं बदलता है क्योंकि Ypअभी भी दो आदेश हैं: एक यांक इसके बाद एक बदलाव।

मुझे नहीं लगता कि आप कुछ गैर-तुच्छ स्क्रिप्टिंग के बिना आप जो चाहें प्राप्त कर सकते हैं। क्या आपने vim.org की स्क्रिप्ट अनुभाग पर एक नज़र डाली ?


1

मैं अक्सर mapइस प्रभाव को प्राप्त करने के लिए उपयोग करता हूं । उदाहरण के लिए:

map <F12> Yp

फिर F12बार-बार दबाने पर अमल होगा YpYpYpआदि। यदि आप हर पेस्ट के बाद अगली पंक्ति में जाना चाहते हैं, तो Yp+इसके बजाय एक कुंजी दबाएं ।


1

उल्लेखनीय गर्भनिरोधक जो कि रिप्लास्ट प्लगइन (हमारे अपने @joeytwiddle द्वारा ) सिर्फ एक मैक्रो के रूप में सब कुछ रिकॉर्ड करने की अपवित्र विधि के माध्यम से यह कार्यक्षमता प्रदान करता है ।

यह कई नए मैपिंग प्रदान करता है, लेकिन, अगर मैं प्रलेखन को सही ढंग से पढ़ रहा हूं, तो आपके द्वारा वर्णित संपादन करने के लिए आप कमांड के अनुक्रम का उपयोग कर सकते हैं (यह मानते हुए कि आप डिफ़ॉल्ट <leader>का उपयोग कर रहे हैं \):

  • YpYank और लाइन डाल / पेस्ट करें apple,
  • jएक लाइन नीचे ले जाएँ ताकि कर्सर अब pearलाइन पर है,
  • \Djआज्ञा भूल जाओ ,
  • 2\.दो आदेशों को दोहराएँ Yऔरp

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