किसी भी लंबी अवधि के लिए, मैं seh द्वारा दिखाए गए दृष्टिकोण की अनुशंसा करता हूं, क्योंकि यह ज्यादातर स्थितियों में स्वाभाविक रूप से अधिक मजबूत होगा। इसके लिए थोड़ा और काम की आवश्यकता है, लेकिन यह सब कुछ सार्थक है :)
एंगस 'दृष्टिकोण कुंजीपटल मैक्रोज़ सुविधा का एक कट-डाउन संस्करण जैसा है जो Emacs को अपना नाम देता है (और उपयोग करने में थोड़ा आसान प्रश्न में उदाहरण के लिए मैक्रोज़ से)। आपको निश्चित रूप से मैक्रोज़ के बारे में पता होना चाहिए, हालांकि - वे अत्यधिक उपयोगी हो सकते हैं, और कुछ और जटिल होने के लिए यह सभी व्यक्तिगत कुंजी मैन्युअल रूप से लिखने की तुलना में गतिशील रूप से रिकॉर्ड करना कहीं अधिक आसान हो जाता है।
यहाँ सारांश मैं अपने आप को सबसे महत्वपूर्ण बिट के बारे में लिखा है:
;;;; * Keyboard macros
;; C-x ( or F3 Begin recording.
;; F3 Insert counter (if recording has already commenced).
;; C-u <n> C-x ( or F3 Begin recording with an initial counter value <n>.
;; C-x) or F4 End recording.
;; C-u <n> C-x) or F4 End recording, then execute the macro <n>-1 times.
;; C-x e or F4 Execute the last recorded keyboard macro.
;; e or F4 Additional e or F4 presses repeat the macro.
;; C-u <n> C-x e or F4 Execute the last recorded keyboard macro <n> times.
;; C-x C-k r Apply the last macro to each line of the region.
;; C-x C-k e Edit a keyboard macro (RET for most recent).
;; C-x C-k b Set a key-binding.
;;
;; If you find yourself using lots of macros, you can even name them
;; for later use, and save them to your init file.
;; M-x name-last-kbd-macro RET (name) RET
;; M-x insert-kbd-macro RET (name) RET
;;
;; For more documentation:
;; C-h k C-x (
;; M-: (info "(emacs) Keyboard Macros") RET
अगर हम सवाल से उदाहरण के साथ खेलते हैं, आप कैसे इन बातों में से कुछ एक साथ टाई देखेंगे ...
के साथ शुरू करने के लिए, आप F3 साथ मैक्रो परिभाषित कर सकते हैंCuCx}F4
फिर आप यह अस्थायी रूप से एफ 1 करने के लिए बाध्य कर सकता है साथ Cxसीकेबीएफ 1 (वास्तव में यह सच नहीं है कि F1 वर्तमान में मौजूदा कीमैप के लिए एक उपसर्ग कुंजी है, क्योंकि इसे इंटरैक्टिव टाइप करने के लिए बस बाकी के लिए संकेत मिलेगा। आप (global-set-key (kbd "<f1>") ...)
के साथ कोड में इसे बाधित कर सकते हैं, लेकिन मैं reserved bindings पर चिपकने का सुझाव दूंगा)।
आप तो का उपयोग करते हैं describe-key
(सी एचकश्मीर) की जांच के लिए क्या है कि कुंजी के लिए बाध्य है, Emacs आप एक (lambda)
अभिव्यक्ति जो आप अपने init फाइल करने के लिए नकल कर सकता है यदि आप ऐसा चाहते दिखाएगा।
वैकल्पिक रूप से, आप मैक्रो नाम और वर्तमान बफर में कोड डालना Emacs पूछ सकते:
एमएक्सname-last-kbd-macro
आरईटी (नाम) आरईटी
एमएक्सinsert-kbd-macro
आरईटीआरईटी
यह कोड describe-key
द्वारा दिखाए गए लैम्ब्डा अभिव्यक्ति से अलग दिखाई देगा, लेकिन यदि आप सम्मिलित मैक्रो का मूल्यांकन करते हैं, तो आप समकक्ष देखेंगे। आप भी इसी प्रकार दिखा सकते हैं कि (kbd "...")
अभिव्यक्ति भी उसी मान का मूल्यांकन करती है, और इसलिए ये वही काम करने के सभी वैकल्पिक तरीके हैं।
(आप सम्मिलित करने के लिए अभिव्यक्ति के अंत के बाद बिंदु से आगे बढ़, और या तो टाइपिंग CxCe minibuffer में मूल्य, या दिखाने के लिए मुख्य न्यायाधीश द्वारा कोड का मूल्यांकन करने के * खरोंच * बफर उपयोग कर सकते हैं बफर में मूल्य)।
ध्यान दें कि 'डाला गया' कोड प्रतीक के लिए मैक्रो असाइन करने के लिए fset
का उपयोग करता है। आप (fset)
निष्पादित करके या फिर उस प्रतीक को (global-set-key)
के साथ एक कुंजी पर असाइन करके, या आप (fset)
को अनदेखा कर सकते हैं और केवल मैक्रो मान को सीधे असाइन कर सकते हैं। यह, ज़ाहिर है, सीधे एंगस के जवाब के बराबर है।
संपादित करें: मैं सिर्फ देखा है कि वहाँ एक kmacro-name-last-macro
समारोह Cx करने के लिए बाध्यसी.के.n जो name-last-kbd-macro
के रूप में लगभग समान है, लेकिन जो लैम्ब्डा अभिव्यक्ति प्रपत्र देखा kmacro-bind-to-key
(Cx का उपयोग करते समय उत्पन्न करता हैसीकेबी) और describe-key
।
बहुत धन्यवाद! मुझे इस तरह की चीज करने का सामान्य तरीका दिखाने के लिए +1। – katrielalex