लिस्प फ़ंक्शन के रूप में कीबोर्ड मैक्रो को कैसे बचाया जाए?


41

बहुत बार मुझे कई प्रमुख स्ट्रोक की आवश्यकता वाले चरणों के सेट को करने की आवश्यकता होगी। उसी सत्र के लिए उन चरणों को एक कीबोर्ड मैक्रो में रिकॉर्ड किया जा सकता है।

एक उदाहरण एक कीबोर्ड मैक्रो के रूप में अक्सर निष्पादित खोज / प्रतिस्थापन कार्य को सहेज रहा है। लेकिन जब मैं emacs छोड़ता हूं तो वह मैक्रो खो जाता है।

मैं अपने अक्सर उपयोग किए जाने वाले कीबोर्ड मैक्रो को एक लिस्प फ़ंक्शन के रूप में कैसे सहेज सकता हूं?

सादगी की खातिर, मैं एक समारोह के रूप में "डीई" के साथ "एबीसी" को बदलने की कार्रवाई को सहेजना चाहता हूं ताकि मैं इसे एमएसीएस सत्रों में पुन: उपयोग कर सकूं।

जवाबों:


48

यहां वे चरण दिए गए हैं जिनका आप अनुसरण कर सकते हैं:

  • उस क्षेत्र का चयन करें जिसे आप खोज-प्रतिस्थापित करना चाहते हैं।
  • मैक्रो रिकॉर्ड करना प्रारंभ करें।

    M-x start-kbd-macro

  • आवश्यक करें M-x query-replace-regexp("एबीसी" को "डीईएफ़" !से बदलें ) और पूरे क्षेत्र में खोज-प्रतिस्थापन को मजबूर करने के लिए उपयोग करें।
  • रिकॉर्डिंग मैक्रो बंद करो।

    M-x kmacro-end-or-call-macro

  • करो M-x kmacro-name-last-macroऔर मैक्रो को एक वर्णनात्मक नाम दें replace-abc-with-def। फिर आप उस मैक्रो को फिर से कॉल कर पाएंगे M-x replace-abc-with-def
  • अब इस मैक्रो को एक फंक्शन के रूप में एक फाइल में सेव करें, जिसे आप अपने ईमैक्स इनिशियलाइज़ेशन के दौरान लोड करते हैं; उदाहरण के लिए, init.el
    • M-x insert-kbd-macro
    • वहां डाले जाने वाले अपने नामित मैक्रो का चयन करें।

स्वतः-निर्मित replace-abc-with-defफ़ंक्शन परिभाषा इस तरह दिखाई देती है:

(fset 'replace-abc-with-def
   (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([59 39 return 97 98 99 return 100 101 102 return 33] 0 "%d")) arg)))

अब आप M-x replace-abc-with-defअपने सभी emacs सत्रों में कर सकते हैं ।


1
के लिए +1 insert-kbd-macro। यह सवाल का जवाब है (और इस जवाब के बाकी अतिरिक्त मदद प्रदान करता है)।
ड्रू

6
ध्यान दें कि Emacs कीबोर्ड मैक्रोज़ के लिए दो अलग-अलग प्रारूप उत्पन्न कर सकते हैं। आपको जो मिलता है, insert-kbd-macroउस पर निर्भर करता है कि आपने इसका उपयोग किया है kmacro-name-last-macro(जैसा कि उपरोक्त उत्तर में है) या name-last-kbd-macro
फिल्स

1
ध्यान दें कि यदि आप name-last-kbd-macroप्रारूप का उपयोग करते हैं (जैसा कि ऊपर @phils द्वारा उल्लेख किया गया है) तो आप एक स्ट्रिंग के साथ समाप्त होते हैं, फ़ंक्शन नहीं। fsetटिंग कि एक प्रतीक के लिए आप एमएक्स का उपयोग करते हुए मैक्रो को निष्पादित कर सकते हैं, लेकिन इसे लिस्प ( -> , -> ) से कॉल करें । अजीब बात है, यहां तक ​​कि इसके माध्यम से कॉल करना भी काम नहीं करता है (हालांकि आप इसे चलाने के लिए उपयोग कर सकते हैं )। commandptfunctionpnilcall-interactivelyexecute-kbd-macro
1

24

एल्मैक्रो पहले ही @lunaryorn द्वारा उल्लेख किया गया था, लेकिन इस पैकेज के लेखक के रूप में मुझे लगा कि एक उदाहरण प्रदान करना अच्छा होगा।

यदि आप इस तरह एक मैक्रो रिकॉर्ड करते हैं:

F3 C-e M-b M-u C-a C-n F4

फिर M-x elmacro-show-last-macro upcase-last-wordएक बफर का निर्माण करता है:

(defun upcase-last-word ()
  "Change me!"
  (interactive)
  (move-end-of-line 1)
  (backward-word 1)
  (upcase-word 1)
  (move-beginning-of-line 1)
  (next-line 1 1))

17

Elmacro पैकेज आप के साथ उचित Emacs लिस्प के रूप में रिकॉर्ड किया अंतिम मैक्रो देखने की सुविधा देता M-x elmacro-show-last-macro


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