पिछला पाठ सम्मिलित करें


10

विम में आप .नवीनतम परिवर्तन दोहराने के लिए दबा सकते हैं, जिसमें पाठ सम्मिलित करना शामिल है।

जबकि Emacs में C-x zकेवल अंतिम कमांड दोहराता है। मुझे पता है कि मैक्रोज़ का उपयोग यहां किया जा सकता है, लेकिन अक्सर मुझे एहसास होता है कि मुझे उसी पाठ को फिर से सम्मिलित करने की आवश्यकता है। जब मुझे इसे केवल एक बार फिर से सम्मिलित करने की आवश्यकता होती है , तो मैक्रो को परिभाषित करना तब व्यर्थ है।

प्रश्न: क्या Emacs के अंदर पाठ के सम्मिलन को दोहराने का एक तरीका है?


1
"पाठ" क्या आप दोहराना चाहते हैं? तकनीकी रूप से बोलना, अंतिम सम्मिलन सिर्फ अंतिम चरित्र है, जो संभवतः आपके बाद नहीं है। तो, आप अपने उद्देश्य के लिए "पाठ प्रविष्टि" कैसे परिभाषित करेंगे? इसे स्पष्ट करने से आपको इसे प्राप्त करने के तरीके खोजने में भी मदद मिल सकती है।
टी। वेरॉन

हम्म अच्छा सवाल - कैसे परिभाषित करने के लिए कि पिछले निरंतर बफर संशोधन । शायद दो बिंदु चालों के बीच एक बफर संशोधन जो बफर संशोधन ( C-f, खोज, आदि) का परिणाम नहीं है ? अगर इससे कोई मतलब है तो ...
ooi

एक नुस्खा के साथ आप क्या चाहते हैं स्पष्ट करें। कई प्रकार के "सम्मिलन" (पाठ सम्मिलित करने के तरीके) हैं। क्या आप अंतःक्रियात्मक रूप से सम्मिलित कर रहे हैं? यदि हां, तो कैसे?
ड्रू

सहभागितापूर्ण तरीके से। लेकिन आदर्श रूप से यह कैसे या क्या मायने नहीं रखता। यह ऐसा है जैसे मैं एक मैक्रो को परिभाषित करना शुरू करना भूल गया । किस मामले में समस्या यह है कि कब है। शायद कुछ हुक का इस्तेमाल किया जा सके।
ooi

2
आप Emacs में 'लास्ट इंसर्ट' को कैसे परिभाषित करते हैं? चूंकि vi में कोई एडिट / कमांड मोड स्विच नहीं है, इसलिए हमें इतिहास में कितनी दूर जाना चाहिए? मैं आमतौर पर "अंतिम इंसर्ट" का चयन करता हूं ( C-space, कर्सर को स्थानांतरित करने के लिए, M-wकॉपी करने के लिए) और फिर C-yआवश्यकतानुसार कई बार पेस्ट करें।
Alain

जवाबों:


7

dot-modeटाइपिंग या कमांड्स को दोहराने के लिए एक "मामूली मोड" है, और वह कर सकते हैं जो आपको चाहिए। यह मूल रूप से आपके द्वारा किए गए अंतिम सम्मिलन / विलोपों को दोहराता है। यह .वी (एम) में काफी समान है ।


2
यह क्या करता है?
मालाबार

1
Emacs.SE में आपका स्वागत है। अभी, आप उत्तर दे रहे हैं उत्तर के बजाय टिप्पणी के करीब है। क्या आप यह बताने के लिए कृपया इसे संपादित कर सकते हैं dot-modeकि यह क्या करता है और यह कैसे कार्यक्षमता प्रदान करता है जिसे ओपी प्राप्त करने की कोशिश कर रहा है?
दान

7

यह ऐसा है जैसे मैं एक मैक्रो को परिभाषित करना शुरू करना भूल गया

आप इसके लिए kmacro-edit-lossage( C-x C-k l) का उपयोग कर सकते हैं : यह आपको अपने 300 अंतिम कीस्ट्रोक्स (सरल सम्मिलन सहित) देखने की अनुमति देता है, और उन्हें मैक्रो के रूप में संपादित करता है।

सरल उपयोग के लिए, आप केवल उस प्रविष्टि की शुरुआत का पता लगाएंगे जिसे आप दोहराना चाहते हैं, "मैक्रो:" से सभी पाठ को उस बिंदु पर हटा दें, और दबाएं C-c C-c। अब आपके पास एक मैक्रो है जिसे आप उसी क्रिया को करने के लिए उपयोग कर सकते हैं, जैसे कि आप इसे पहले स्थान पर रिकॉर्ड करना नहीं भूले।

अफसोस की बात है, यह विफल रहता है अगर पिछले 300 कीस्ट्रोक्स में माउस क्लिक शामिल हैं।

संपादित करें: निम्न कोड इसे बदल देता है ताकि अंतिम माउस घटना के बाद केवल कुंजी रखी जाए।

(defadvice recent-keys (after tv/recent-keys-no-mouse first ())
  "Return only the keys since the last mouse event"
  (let* ((vec ad-return-value)
         (lst (append vec nil))
         (nmax (length vec))
         (i (- nmax 1)))
    (while
        (and
         (>= i 0)
         (not
          (let ((mod (event-modifiers (elt vec i))))
            (or (memq 'click mod)
                (memq 'double mod)
                (memq 'triple mod)
                (memq 'drag mod)
                (memq 'down mod)))))
      (setq i (- i 1)))
    (setq ad-return-value (vconcat (nthcdr (+ i 1) lst) nil))))

(defun tv/kmacro-edit-lossage-no-mouse ()
  "Same as `kmacro-edit-lossage', but fallback if the keys contain mouse events.

Source: http://emacs.stackexchange.com/a/4071/184"
  (interactive)
  (ad-activate-regexp "tv/recent-keys-no-mouse")
  (call-interactively #'kmacro-edit-lossage)
  (ad-deactivate-regexp "tv/recent-keys-no-mouse"))

;; If you want this function to replace the default one, uncomment this line:
; (global-set-key (kbd "C-x C-k l") 'tv/kmacro-edit-lossage-no-mouse)

मैं अक्सर माउस का उपयोग करके स्क्रॉल करता हूं, यह देखने के लिए शांत होगा कि मैक्रो से उन लोगों को कैसे हटाया जाए।
ooi

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

@nanny मैंने एक त्रुटि संदेश के साथ असफल होने की तुलना में (imo) बेहतर कमबैक को सक्षम करने के लिए कुछ संभावित जोड़ा: इस फ़ंक्शन के साथ, केवल अंतिम माउस इवेंट के बाद कुंजी रखी जाएगी। माउस घटनाओं को पूरी तरह से समाप्त करना भी संभव होना चाहिए, लेकिन मैक्रो का परिणाम कुछ अप्रत्याशित होगा।
टी। वेरॉन

@ooi कोई विचार नहीं है यदि आप पिछली टिप्पणी से स्वचालित रूप से पिंग हो गए हैं, तो यहां आपका पिंग भी है।
टी। वेरॉन

धन्यवाद, मैं उसी चीज पर काम कर रहा था। मुझे लगता है कि यह आर्गन को फ़िल्टर करना संभव हो सकता है edmacro-fix-menu-commands। यह एक वैकल्पिक तर्क लेता है जो माउस घटनाओं को अनदेखा कर सकता है। लेकिन मुझे सलाह नहीं है कि यह काम करने के लिए सलाह प्रणाली के बारे में पर्याप्त हो।
नानी

4

मुझे लगता है कि dabbrev-expandफंक्शन ट्रिक कर सकता है। मान लीजिए कि आपने पहले से ही कुछ शब्द टाइप किए हैं: emacs, emotion, emoji, ... अगली बार जब आप एक शब्द 'em' से शुरू करेंगे, तो आप हिट कर सकते हैं M-/और emacs आपको पहले से डाले गए शब्दों में से एक सम्मिलित करने का प्रस्ताव देगा 'उन्हें' द्वारा भीख माँगना। मारते रहिए M-/और भावनाएं आपको 'इमोजी' दिखाएंगी, फिर 'भावनाएं', फिर ...

आपके पास रिपीट-कॉम्प्लेक्स-कमांड के लिए एक नज़र भी हो सकती है । लोकप्रिय उदाहरण: आप query-replaceकई अलग-अलग बफ़र्स में हमेशा एक ही तर्कों का उपयोग करते हुए कमांड को दोहराना चाहते हैं , "पिट" को "पेटेंट" से बदल दें।

आप इसे एक बार चलाते हैं, एक अलग विंडो पर जाते हैं, और C-x ESC ESCइसे फिर से चलाने के लिए टाइप करते हैं।

और खत्म करने के लिए, क्या मैं दोहराने-डालने का सुझाव दे सकता हूं ? यह एल फ़ाइल आपको किसी प्रकार के तर्क का उपयोग करके प्रविष्टि करने में मदद करेगी। यह अधिक पसंद है, "अंतिम सम्मिलन को फिर से भरना, लेकिन प्रत्येक पुनरावृत्ति के लिए, तर्क बदल जाएंगे।

यह उदाहरण एल फ़ाइल में पाया जा सकता है :

;; You can also iterate over lists:
;;   My desk is cluttered
;;   My desk is a real mess
;;   My desk is very hard to see
;;   My desk is buried
;;
;; from m-x insert-patterned
;;    ";;   My desk is %s"
;;    (cluttered "a real mess" "very hard to see" buried)

मुझे उम्मीद है कि इससे मदद मिलेगी।


1
शायद आप थोड़ा विस्तार कर सकते हैं ...
टी। वेरॉन

@ टी। वेरोन डोन :)
नस्कामी _

1
रिपीट-कॉम्प्लेक्स-कमांड की तरह है repeat(जो ओपी का उल्लेख करता है), पाठ सम्मिलन के लिए वास्तव में उपयोगी नहीं है। Repeat-insertमैक्रो की तरह, टेक्स्ट डालने से पहले सोचा जाना चाहिए। लेकिन dabbrev-expandएक अच्छा विचार है!
टी। वेरॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.