Evil

De Disposition de clavier bépo

Evil (Extensible VI Layer for emacs) est le dernier-né des émulateurs vim pour emacs, apparamment plus abouti que ses prédecesseurs. Ses principaux développeurs sont Frank Fischer et Vegard Oye, et le projet avance assez vite grâce à une communauté active. Une grande partie des fonctions de vim est émulée à ce jour. À la différence des autres émulateurs, evil part des fonctions emacs existantes pour se rapprocher au plus près du fonctionnement de vim. Evil utilise ainsi l’un des atouts majeurs d’emacs, son caractère modulaire. Le langage elisp offre en effet la possibilité d’ajouter un grand nombre d’extension. Avec Evil, il est ainsi possible de combiner la puissance d’emacs et l’ergonomie de vim…

Evil transforme emacs en éditeur modal, en introduisant des états (l’équivalent des modes de vim, le terme n’étant pas repris pour éviter une confusion avec les modes d’emacs, dont evil est un exemple, comme auctex, mouse-wheel, linum, key-chord etc.). Les principaux états, matérialisés par un symbole sur la barre des tâches sont: normal (N), visuel (V), insersion (I), remplacement (R), operateurs (O), motion (M) et emacs (E) — ce dernier correspondant à la desactivation de vim (evil est activé ou desactivé en tapant Ctr-z).

Pour être activé, evil doit être installé et chargé dans le .emacs.

Il est possible de modifier la forme et la couleur du curseur en fonction des modes. Voici ce que cela donne chez moi:

;fait varier la couleur du curseur en fonction du mode
 (setq evil-normal-state-cursor '("red" box)
       evil-visual-state-cursor '("light salmon" box)
       evil-insert-state-cursor '("blue" box)
       evil-replace-state-cursor '("sienna" hbar)
       evil-emacs-state-cursor '("black" box))

Adaptation au bépo:

Voici ce qu’il faut inscrire dans son .emacs pour adapter evil au bépo. Compte tenu des variantes vim-bépo, je me contente des lignes permettant d’intervertir H,J,K,L et C,T,S,R:

  (require 'evil)
  (evil-mode 1)

    ;adaptation des touches à mon bépo

;première étape: avant de réaffecter c,t,s,r en h,j,k,l, il faut retirer ces touches de l’agencement de clavier normal-state
(define-key evil-normal-state-map "c" nil)
(define-key evil-normal-state-map "C" nil)
(define-key evil-normal-state-map "s" nil)
(define-key evil-normal-state-map "S" nil)
(define-key evil-normal-state-map "r" nil)
(define-key evil-normal-state-map "R" nil)
(define-key evil-normal-state-map "j" nil)
(define-key evil-normal-state-map "J" nil)
;je redéfinis certaines fonctions pour l’état normal
(define-key evil-normal-state-map "h" 'evil-change)
(define-key evil-normal-state-map "H" 'evil-change-line)
(define-key evil-normal-state-map "T" 'evil-join)
(define-key evil-normal-state-map "l" 'evil-replace)
(define-key evil-normal-state-map "L" 'evil-replace-state)
(define-key evil-normal-state-map "k" 'evil-substitute)
(define-key evil-normal-state-map "K" 'evil-change-whole-line)
;même chose mais cette fois pour l’état motion
(define-key evil-motion-state-map "c" 'evil-backward-char)
(define-key evil-motion-state-map "C" 'evil-window-top)
(define-key evil-motion-state-map "t" 'evil-next-line)
(define-key evil-motion-state-map "s" 'evil-previous-line)
(define-key evil-motion-state-map "r" 'evil-forward-char)
(define-key evil-motion-state-map "R" 'evil-window-bottom)
(define-key evil-motion-state-map "j" 'evil-find-char-to)
(define-key evil-motion-state-map "J" 'evil-find-char-to-backward)

Pour en savoir plus:

| Emacs wiki

Le site du projet sur gitorious