2016-05-15 201 views
1

我是Emacs的新手,並且一直使用邪惡模式。我一直在重新映射一些vim中的映射。在vim中,使用map函數很容易重新映射密鑰。我想重新映射cwciwdwdiw。但我對elisp沒有太多的瞭解。那麼有沒有任何插件或功能可以輕鬆映射。 謝謝。邪惡模式Emacs中的鍵映射

回答

1

首先是壞消息:開箱即用,目前不能在不影響其他運營商的情況下實現。原因是c是一個操作符,因此只要鍵入c,Emacs就會執行evil-change。然後Evil進入操作員等待狀態,並且讀取以下w(或iw)以找出正確的動作。

問題是運營商只有一個運營商狀態全部,即只有一個共享鍵盤映射。因此,將w更改爲iw將改變全部運營商的行爲,不僅cd

第一個好消息:如果這是您可以接受,那麼你可以簡單地做

(define-key evil-operator-state-map "w" "iw") 

現在更好的消息。如果你知道上面的東西,那麼使用一點點Emacs Lisp魔法來解決問題是相對容易的。傳遞給操作員的範圍由功能evil-operator-range確定。如果當前運營商是evil-changeevil-delete,則該想法是建議此功能並暫時更改鍵盤綁定。有幾個候選鍵盤映射可以放置新綁定,但evil-operator-state-local-map是合理的選擇。

(defun my/evil-motion-range (orig-fun &rest args) 
    (if (not (memq this-command '(evil-delete evil-change))) 
     (apply orig-fun args) 
    (let* ((orig-keymap evil-operator-state-local-map) 
      (evil-operator-state-local-map (copy-keymap orig-keymap))) 
     (define-key evil-operator-state-local-map "w" "iw") 
     (apply orig-fun args)))) 

(advice-add 'evil-operator-range :around #'my/evil-motion-range) 

實際上,這種技術將允許以通用的方式實現特定於操作符的綁定。