Vim
Vim est un éditeur de texte ergonomique, libre et muliplate-formes. Cette page regroupe les informations relatives à son utilisation avec la disposition fr-dvorak-bépo.
Ergonomie
Pourquoi Vim ?
Vim a été optimisé pour la prévention des TMS :
- il n'utilise que très peu d'« accords » en Ctrl+{} : plutôt que de recourir à des touches modificatrices comme Ctrl, Alt ou Meta, il utilise plusieurs modes de fonctionnement (normal, insertion, visualisation, commande), ce qui permet d'utiliser toutes les commandes en position « dactylo », c'est-à-dire avec les doigts proches de la position de repos, comme si on tapait du texte ;
- les déplacements du curseur peuvent (doivent) se faire sans les flèches : [HJKL] déplacent le curseur case à case, [WEB] déplacent le curseur mot à mot (équivalent de Ctrl+flèche) ; les mains restent ainsi en position dactylo pour toutes les manipulations de texte.
L'utilisation des différents modes de Vim permet de se passer complètement de la souris et d'éliminer la plupart des « accords » contraignants, tout en diminuant les mouvements de main et le nombre de frappes effectuées dans la journée.
Le prix à payer est un temps d'apprentissage assez long — plus long que sur n'importe quel autre éditeur de texte. Quand on maîtrise les bases de Vim, le gain en confort et en productivité est tel qu'on n'utilise plus aucun autre éditeur — et on finit même par souhaiter « Vimifier » les applications bureautiques courantes pour profiter de cette ergonomie sur l'ensemble du poste de travail.
Là où le bât blesse, c'est que Vim est conçu pour un clavier Qwerty :
- le fait que les touches [HJKL] correspondent à {CTRS} complique singulièrement l'utilisation de Vim aux Bépoïstes, même pour les Vimistes convaincus ;
- Vim n'est pas utilisable en l'état avec le Bépo, contrairement à l'Azerty ou même le Dvorak-US, essentiellement parce que les touches {J} et {K} ne sont pas côte-à-côte.
Il convient donc de reconfigurer Vim pour l'utiliser en Bépo ; c'est l'objectif de cette page.
Tutoriels et ressources Vim
- http://www.docmirror.net/fr/linux/howto/programming/Vim-HOWTO
- http://www.commentcamarche.net/faq/sujet-7961-petit-tuto-sur-vi-vim Un tutoriel pas à pas en français
- http://202.60.162.120:81/hasp/index.php une double page remplie de rappels.
- http://nemolivier.free.fr/vimqrc-fr-bepo.html version de vimqrc adaptée au raccourcis bépo.
- la page qui fait peur
- (en) Vim Wiki Tips
- http://pages-perso.esil.univmed.fr/~lafirme/website/article.php3?id_article=70 Des astuces très pratiques, dont celle qui ouvre Firefox sur Google, Wikipédia ou autre avec comme recherche le mot sur lequel on se trouve.
Reconfiguration partielle des touches
On ne cherche ici qu'à implémenter le déplacement en [HJKL] avec le moins d'impact possible sur le reste des commandes Vim.
Principe
- {ctsr} remplace [hjkl] pour les touches de direction
- réciproquement :
- {H} remplace [R] (remplacer)
- {J} remplace [T] (jusqu'à)
- {K} remplace [S] (supprime et insère)
- {L} remplace [C] (modification de texte), juste à coté de {D} (couper)
- {É} remplace [W] (mot suivant), le {W} étant beaucoup trop loin en Bépo
C'est la solution la plus simple pour utiliser Vim confortablement en Bépo. :-/
~/.vimrc
Créer un fichier ~/.vimrc.bepo
avec le contenu suivant :
" {W} -> [É] " —————————— " On remappe W sur É : noremap é w noremap É W " Corollaire, pour effacer/remplacer un mot quand on n’est pas au début : noremap aé aw noremap aÉ aW " Pour faciliter les manipulations de fenêtres, on utilise {W} comme un Ctrl+W : noremap w <C-w> noremap W <C-w><C-w> " [HJKL] -> {CTSR} " ———————————————— " {cr} = « gauche / droite » noremap c h noremap r l " {ts} = « haut / bas » noremap t j noremap s k " {CR} = « haut / bas de l'écran » noremap C H noremap R L " {TS} = « joindre / aide » noremap T J noremap S K " {HJKL} <- [CTSR] " ———————————————— " {J} = « Jusqu'à » (j = suivant, J = précédant) noremap j t noremap J T " {L} = « Change » (h = bloc, H = jusqu'à la fin de ligne) noremap l c noremap L C " {H} = « Remplace » (l = caractère, L = texte) noremap h r noremap H R " {K} = « Supprime et insère » (k = caractère, K = ligne) noremap k s noremap K S " pour la correction orthographique noremap ]k ]s noremap [k [s " Désambiguation de {g} " ————————————————————— " ligne précédante / suivante (à l'intérieur d'une phrase) noremap gs gk noremap gt gj " onglet précédant / suivant noremap gb gT noremap gé gt " premier / dernier onglet noremap gB :exe "silent! tabfirst"<CR> noremap gÉ :exe "silent! tablast"<CR> " repli suivant / précédent noremap zs zj noremap zt zk " <> en direct " ———————————— noremap « < noremap » >
Remplacer la section « <> en direct » par les lignes suivantes pour avoir les chiffres en accès direct en mode normal :
" Chiffres en accès direct " ———————————————————————— noremap " 1 noremap 1 " noremap « 2 noremap 2 < noremap » 3 noremap 3 > noremap ( 4 noremap 4 ( noremap ) 5 noremap 5 ) noremap @ 6 noremap 6 @ noremap + 7 noremap 7 + noremap - 8 noremap 8 - noremap / 9 noremap 9 / noremap * 0 noremap 0 * " Optionnel : {g"} plutôt que {g0} pour aller au début de la ligne écran noremap g" g0
Puis, inclure ce fichier dans la configuration de Vim en ajoutant la ligne suivante dans le fichier ~/.vimrc
:
source ~/.vimrc.bepo
Nota : les utilisateurs de Vimperator peuvent ajouter la même ligne dans le fichier ~/.vimperatorrc
.
~/.vim/after/ftplugin/netrw.vim
Ex est le plugin d'exploration de fichiers de Vim. On le lance avec « :Ex », « :Sex », « :Vex », « :Tex », ou même « :e . ».
Malheureusement, {t} et {s} ne fonctionnent pas comme « bas / haut » avec cet explorateur, car les mappings d'Ex ne sont pas définis dans ~/.vimrc
. Deux solutions :
- utiliser les flèches plutôt que {CTSR} avec Ex — voire au pire, utiliser la souris
- redéfinir les commandes d'Ex dans le fichier
~/.vim/after/ftplugin/netrw.vim
comme suit :
nunmap <buffer> t nunmap <buffer> s nunmap <buffer> k nnoremap <buffer> t j nnoremap <buffer> s k nnoremap <buffer> k s
Avec ce fichier, {t}{s} fonctionnent désormais comme bas/haut et {k} permet de changer le type de tri (par nom, par date, etc.). Attention, l'aide affichée par Ex ne correspond plus à la réalité.
Remarques
Les touches {Ê}{È}{À}{Ç} sont inutilisées par Vim, et peuvent donc être affectées librement.
Par exemple, on peut faire de {È} une touche « début de ligne » :
noremap è ^ noremap È 0
Le guillemet-apostrophe (rsqm) en direct ne peut pas être réaffecté en une apostrophe droite (probablement parce que le rqsm n'est pas disponible en Latin-1) ; par contre, ils peuvent utiliser la touche {ç} à cet effet :
noremap ç ' noremap Ç `
Par ailleurs, on pourrait échanger {s} et {g} de façon à avoir {g} sous la main gauche et pour une meilleure cohérence des raccourcis de Vim : les commandes correspondant à « s » et « r », respectivement {g} et {h}, se trouveraient alors sous les touches {S} et {R}.
Reconfiguration totale des touches
Une option radicale consisterait à reconfigurer toutes les touches en mode normal, afin qu'elles correspondent aux labels du clavier Azerty. On pourrait même générer un tel fichier automatiquement avec les outils du projet Bépo si suffisamment d'utilisateurs étaient intéressés…
Bépo/Qwerty
C'est à priori la meilleure solution du point de vue de l'ergonomie. On peut reprendre les cheat sheets classiques en l'état.
À faire.
Bépo/Azerty
Cette variante permettrait de se référer aux labels des touches du clavier Azerty pour les commandes Vim.
À faire.
Autres options utiles
À ajouter dans le fichier ~/.vimrc
.
Appliquer automatiquement les modifications de ~/.vimrc
La première chose à faire pour jouer avec ~/.vimrc
!
if has("autocmd") autocmd! bufwritepost .vimrc source ~/.vimrc endif
Voir les espaces insécables
Bien entendu, on peut changer la couleur.
" colore les nbsp highlight NbSp ctermbg=lightgrey guibg=lightred match NbSp /\%xa0/
[Esc] plus accessible
Vim fait un grand usage de la touche Escape qui se trouve loin. On peut modifier le comportement de Tab pour qu’il serves de touche [Esc]. On garde un Tab en Maj+Tab. Attention, à ne pas utiliser dans Vimperator, on y a besoin du Tab…
" Tab fait un Esc, Maj+Tab fait un Tab inoremap <Tab> <Esc> inoremap <S-Tab> <Tab> " Même chose, mais en mode visuel vnoremap <Tab> <Esc> vnoremap <S-Tab> <Tab>
[PgUp] / [PgDn] plus accessibles
Vim utilise par défaut Ctrl+[B] et Ctrl+[F] pour aller à la page précédente / suivante. Ce n'est déjà pas la panacée en Qwerty mais en Bépo c'est l'horreur, ces deux touches étant à l'exact opposé l'une de l'autre. Pour y remédier, on peut utiliser les touches [BackSpace] et [Espace], c'est bien plus confortable :
noremap <BS> <PageUp> noremap <Space> <PageDown>
Alternativement, si on préfère défiler des demi-pages, on peut utiliser les mappings suivants :
noremap <BS> <C-U> noremap <Space> <C-D>
Tant qu'on y est, on peut aussi utiliser [Entrée] pour centrer la page sur le curseur (ne fonctionne pas avec Vimperator) :
noremap <Return> zz
Fixer l’encodage des fichiers en utf-8
set encoding=utf-8 set fileencoding=utf-8
Plus de détails ici.
Hors sujet, mais vraiment belle astuce.
" « v,d » lance firefox et une recherche dans le tlfi la définition du mot courant vmap ,d :<C-U>!firefox "http://www.cnrtl.fr/lexicographie/<cword>" >& /dev/null<CR><CR> " « v,s » lance firefox et une recherche dans le tlfi les synonymes du mot courant vmap ,s :<C-U>!firefox "http://www.cnrtl.fr/synonymie/<cword>" >& /dev/null<CR><CR> " « v,g » comme ci-dessus mais pour google vmap ,g :<C-U>!firefox "http://www.google.fr/search?hl=fr&q=<cword>&btnG=Recherche+Google&meta=" >& /dev/null<CR><CR> " « v,c » comme ci-dessus mais pour le conjugueur vmap ,c :<C-U>!firefox "http://www.leconjugueur.com/php5/index.php?v=<cword>" >& /dev/null<CR><CR> " « v,w » comme ci-dessus mais pour wikipedia vmap ,w :<C-U>!firefox "http://fr.wikipedia.org/wiki<cword>" >& /dev/null<CR><CR> " ouvre l’url sur laquelle on se trouve, dans firefox vmap ,o :<C-U>!firefox "<cfile>" >& /dev/null<CR><CR>
Il faut que Firefox soit dans le $PATH, sinon, indiquer le chemin complet de l’exécutable. Les raccourcis proposés sont tous en « ,x » pour qu’il n’y ait pas d’interaction malencontreuse avec d’autres commandes, mais on peut changer cette partie.
Variante qui tue, en utilisant un navigateur texte à l'intérieur de Vim :
- enregistrer browser.vim dans le dossier
~/.vim/plugin/
- facultatif : remplacer « lynx » par « w3m » partout dans le fichier
browser.vim
(w3m supporte l'utf-8, contrairement à lynx) - ajouter les lignes suivantes dans le fichier
~/.vimrc
:
" « v,d » cherche la définition du mot courant dans le TLFI vmap ,d :call OpenWebBrowser("http://www.cnrtl.fr/lexicographie/<C-R><C-W>")<CR> " « v,s » cherche les synonymes du mot courant dans le TLFI vmap ,s :call OpenWebBrowser("http://www.cnrtl.fr/synonymie/<C-R><C-W>")<CR> " « v,g » cherche le mot courant dans Google vmap ,g :call OpenWebBrowser("http://www.google.fr/search?hl=fr&q=<C-R><C-W>&btnG=Recherche+Google&meta=")<CR> " « v,c » cherche le mot courant dans le conjugueur vmap ,c :call OpenWebBrowser("http://www.leconjugueur.com/php5/index.php?v=<C-R><C-W>")<CR> " « v,w » cherche le mot courant Wikipedia vmap ,w :call OpenWebBrowser("http://fr.wikipedia.org/wiki/<C-R><C-W>")<CR> " ouvre l’URL sur laquelle on se trouve vmap ,o :call OpenWebBrowser("<C-R><C-A>")<CR>
Les URLs proposées ici correspondent à un usage de Vim en traitement de texte ; les développeurs auront tôt fait de remplacer ces URLs par des documentations d'API en ligne.
Exemples de ~/.vimrc
- celui de Kazé est ici
- celui de NémOlivier est là
« Bépo-Vimification » du poste de travail
Bon nombre d'applications courantes utilisent les touches de déplacement de Vim, sans toutefois utiliser le fichier ~/.vimrc pour la configuration de ces touches. Moyennant un effort de configuration, on peut donc disposer d'un mode Vim, avec les touches de déplacement en {CTSR}, sur l'ensemble de son poste de travail.
Firefox
Vimperator est une extension Firefox permettant de piloter confortablement Firefox au clavier, et même d'utiliser Vim comme éditeur pour les champs texte. Elle peut partager une partie de son fichier de configuration avec Vim (v. plus haut), il suffit d'ajouter cette ligne au fichier ~/.vimperatorrc
:
source ~/.vimrc.bepo
À noter : Vimperator est conçu pour fonctionner avec les chiffres en accès direct, ce qui est gênant (mais pas insurmontable) pour sélectionner des liens via le mécanismes de quick hints (clavier bépof et clavier bépoF). Le mapping proposé pour avoir les chiffres en accès direct dans Vim ne fonctionne pas avec Vimperator.
Voir le wiki de Vimperator pour plus d'informations sur la configuration.
Voir également GViMail pour utiliser Vimperator avec Gmail.
Thunderbird
Muttator est l'équivalent de Vimperator pour Thunderbird. Le projet est encore en début de développement, mais serait d'ores et déjà utilisable (non testé).
À compléter.
IDEs
Vim n'est qu'un éditeur texte, pas un IDE. Cependant, la plupart des IDEs disposent d'un mode Vi, nativement ou non.
- Emacs
Emacs dispose nativement d'un mode Vi qui le rend utilisable permet de déplacer le curseur sans bouger les mains (pas testé ;-)).
À compléter par un utilisateur Emacs. (Gaëtan ?)
- Komodo
Komodo et OpenKomodo disposent nativement d'un mode Vi.
À compléter par un utilisateur Komodo.
- Eclipse
il y a un plugin Vim pour Eclipse ; il y a aussi le projet Eclim, qui permet d'utiliser Vim comme éditeur de texte dans Eclipse.
À compléter par un utilisateur Eclipse. (Crako ?)
- Visual Studio™
ViEmu propose un plugin Vim (non-libre) pour Visual Studio, ainsi que pour Word™ et Outlook™.
À compléter par un utilisateur Windows™.
Outils du shell
De nombreux outils courants du shell utilisent nativement les raccourcis Vim :
- less : le pager le plus courant de nos jours, qui succède avantageusement à more ; c'est lui qui met en forme les pages man, notamment. Il est configurable via lesskey.
- aptitude : le gestionnaire de paquets Debian est configurable lui aussi.
- w3m : navigateur web, moins connu que Lynx, mais qui a néanmoins l'avantage d'être compatible utf-8, entre autres. On peut redéfinir les raccourcis clavier dans le fichier
~/.w3m/config
. - mutt : client mail. On peut utiliser ses propres mappings (exemple).
- muttng : fork de mutt, qui inclut un certain nombre de patches et qui serait plus configurable (exemple).
Les plus gravement atteints peuvent utiliser des raccourcis Vi dans le terminal :
- en modifiant le fichier ~/.inputrc
- en utilisant zsh, qui possède un mode vi ; il suffit d'ajouter les lignes suivantes au fichier
~/.zshrc
:
# Mode vim bindkey -v # On remappe pour le bépo bindkey -a c vi-backward-char bindkey -a r vi-forward-char bindkey -a t vi-down-line-or-history bindkey -a s vi-up-line-or-history bindkey -a $ vi-end-of-line bindkey -a 0 vi-digit-or-beginning-of-line bindkey -a h vi-change bindkey -a H vi-change-eol bindkey -a dd vi-change-whole-line bindkey -a l vi-replace-chars bindkey -a L vi-replace bindkey -a k vi-substitute
D'autres applications utilisent les raccourcis Vi mais ne sont pas remappables. Vous pouvez toujours contacter leurs auteurs pour leur demander d'inclure un mécanisme de mapping, ou recompiler ces outils avec des mappings bépo.
- vifm : très bon explorateur de fichiers, en pleine phase de développement.
- cmus : lecteur audio. Le site officiel précise qu'il supporte des dynamic keybindings, reste à savoir comment ça se configure.
Gestionnaires de fenêtres en mosaïque
Ces gestionnaires de fenêtres sont des alternatives intéressantes pour ceux qui veulent se passer complètement de la souris. Pas de décorations de fenêtre, ils sont conçus exclusivement pour la productivité.
On peut citer Ion (le plus connu), Ratpoison et StumpWM (le second est une ré-écriture en CommonLisp du premier, par le même auteur), mais ces gestionnaires de fenêtres sont un peu hors-sujet dans la mesure où ils utilisent une logique de raccourcis clavier de type Emacs.
À l'inverse, d'autres gestionnaires de fenêtres utilisent nativement des raccourcis Vim type [HJKL] pour les manipulations de fenêtres : sélection, déplacement, redimensionnement… tout se fait sur la rangée de base.
wmii est le plus facile à prendre en main, dans la mesure où c'est le seul de ces gestionnaires de fenêtres en mosaïque à conserver des décorations de fenêtres (très minimalistes, sans icone), ce qui permet de déplacer et redimensionner les fenêtres uniquement à la souris. Il est aisément configurable via le fichier wmiirc
; pour utiliser les raccourcis en {CTSR}, il suffit de remplacer les premières lignes par :
UP=s DOWN=t LEFT=c RIGHT=r
dwm est le petit frère de wmii (développé par le même auteur), et est encore plus minimaliste : aucune décoration de fenêtre, code encore plus compact. Il partage certains outils avec wmii, dont l'excellent lanceur d'applications dmenu.
La particularité de dwm est qu'il doit être recompilé pour toute modification de configuration : son code est limité à 2 000 lignes afin d'être facilement bricolable par tout un chacun. Ses utilisateurs n'ont donc vraisemblablement pas besoin d'aide pour reconfigurer les raccourcis en {CTSR} !
Awesome est un fork de dwm. Il est entièrement configurable via le fichier ~/.awesomerc
; on trouve une documentation très complète sur le wiki francophone d'Awesome.
Malheureusement, Awesome est prévu pour fonctionner avec des dispositions de clavier ayant les chiffres en accès direct (sélection / changement de « bureau »). Il est peut-être possible de contourner ce problème en bricolant le fichier à vérifier
~/.awesomerc
.
Activement développé (comprendre : pas encore tout-à-fait stable), Xmodad est écrit et configurable en Haskell. Il est très modulaire, dispose déjà de nombreuses extensions, et permet notamment de libérer une partie de l'écran pour inclure un panel Gnome ou Xfce4.
Voir cet extrait de la configuration de Gaëtan (à peaufiner).