Definindo sequências de teclas no Emacs no modo Maligno

3

Não encontrei instruções sobre a definição de sequências de teclas no documento do Evil.

O exemplo dado pelos desenvolvedores abrange apenas uma única chave.

(define-key evil-normal-state "w" 'foo)

O que eu preciso fazer, se eu quiser definir "gv" no modo normal ou "; RET" no modo de inserção?

No Vim, por exemplo, apenas faço:

imap ;<cr> <end>;<cr>
map gv :tabprev<cr>
    
por Mark T. 12.08.2012 / 04:35

1 resposta

1

A Página do mal na wiki sugere o uso de elscreen.el para emular as abas do Vim:

(load "elscreen" "ElScreen" t)

(define-key evil-normal-state-map (kbd "C-w t") 'elscreen-create) ;creat tab
(define-key evil-normal-state-map (kbd "C-w x") 'elscreen-kill) ;kill tab

(define-key evil-normal-state-map "gv" 'elscreen-previous) ;previous tab
(define-key evil-normal-state-map "gt" 'elscreen-next) ;next tab

Da mesma forma, você pode definir:

(define-key evil-insert-state-map (kbd "; <return>") 'move-end-of-line)

Isso emula imap ;<cr> <end>;<cr> . Se você pressionar ; seguido de Retornar , o cursor pulará para o final da linha e inserirá um ponto-e-vírgula. Eu teria gostado de torná-lo um pouco mais genérico, mas estou perdendo uma função-chave.

(define-key evil-insert-state-map (kbd ";") 'insert-or-append)

(defun insert-or-append ()
  "If the user enters <return>, then jump to end of line and append a semicolon,
   otherwise insert user input at the position of the cursor"
  (interactive)
  (let ((char-read (read-char-exclusive))
        (trigger ";"))
    (if (eql ?\r char-read)
        (progn
          (end-of-line)
          (insert trigger))
      (insert (this-command-keys)))))
    
por 13.08.2012 / 22:32