मैं एक विशिष्ट ईविल राज्य में मोड के लिए कुंजी बाइंडिंग कैसे सेट कर सकता हूं?


9

मेरे पास कुंजी बाइंडिंग का एक सेट है जो मैं दोनों के लिए web-modeऔर php-modeसम्मिलित रूप से (ईविल के) में उपयोग करता हूं । इसलिए मैं उपयोग set-local-mapया कुछ नहीं कर सकता । क्योंकि सामान्य मोड में, एक ही कुंजी फिर अन्य कमांड को कॉल करेगी। इसलिए बाइंडिंग को evil-insert-state-mapकेवल सक्रिय करने की आवश्यकता है ।

मेरे पास निम्नलिखित हैं:

(eval-after-load 'php-mode
  '(progn
     (define-key evil-insert-state-map
       (kbd "C-<next>") (lambda () (interactive) (insert " = ")))
     (define-key evil-insert-state-map
       (kbd "C-<prior>") (lambda () (interactive) (insert "->")))))

(eval-after-load 'web-mode
  '(progn
     (define-key evil-insert-state-map
       (kbd "C-<next>") 'zencoding-expand-yas) 
     (define-key evil-insert-state-map
       (kbd "C-<prior>") 'zencoding-expand-line)))

तो हर बार web-modeया php-modeलोड हो रहा है, इन कुंजी बाइंडिंग को सक्रिय किया जाएगा।

समस्या यह है: मान लीजिए कि मेरे पास दो खुले बफ़र्स हैं, एक में php-modeऔर दूसरे में web-mode। जब web-modeबफ़र चालू बफ़र है और मैं किसी अन्य बफ़र पर स्विच करता हूँ php-mode, जिसमें , web-modeबाइंडिंग अभी भी php-modeबफ़र के अंदर सक्रिय है ।

मैंने इस समस्या को हल करने (add-hook 'web-mode-hook [...])और (add-hook 'php-mode-hook [...])इसके बजाय बाइंडिंग स्थापित करने का प्रयास किया eval-after-load। लेकिन वह समाधान इस स्थिति में काम नहीं करता है।

कोई सुझाव? मुझे वास्तव में इसकी प्रशंसा करनी होगी।

जवाबों:


12

ईविल evil-define-keyमें एक विशिष्ट कीमैप में कुछ राज्यों के लिए कमांड को परिभाषित करने के लिए मैक्रो है:

(evil-define-key 'insert emacs-lisp-mode-map (kbd "C-c C-c") 'butterfly
                                             (kbd "<pause>") 'zone)

यह बंधन के निष्पादन में देरी करने में सक्षम है ( eval-after-loadस्वयं का उपयोग करके ) और एक से अधिक कुंजी-कमांड जोड़ी भी ले सकता है जो कि एक सुंदर निफ्टी जोड़ है।


आपका समाधान काम करता है, मैं इसके लिए आभारी हूं। कभी नहीं पता था कि बुराई-परिभाषित कुंजी जैसी कोई चीज है। और वास्तव में बहुत निफ्टी है कि आप अधिक keycommand जोड़े बांध सकते हैं evil-define-key
रेनेफ्रॉगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.