« Vim » : différence entre les versions
m (Le mauvais apostrophe était utilisée, donc le mapping n’était pas bon) |
|||
(117 versions intermédiaires par 33 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[ | [http://fr.wikipedia.org/wiki/Vim Vim] est un éditeur de texte ergonomique, libre et disponible sous de nombreux systèmes d'exploitation. Cette page tente de regrouper le maximum d'informations relatives à son utilisation avec la disposition bépo. | ||
== Ergonomie == | == Ergonomie == | ||
[[Image:Vim-bepo-066.png|thumb|450px|right|Aide-mémoire Vim/bépo — [http://download.tuxfamily.org/dvorak/images/vim-0.6.6.pdf version PDF]]] | |||
=== Pourquoi utiliser Vim ? === | |||
D'un point de vue [[ergonomie|ergonomique]], Vim a été optimisé pour la prévention des [[TMS|troubles musculosquelettiques]] : | |||
* il n'utilise que très peu de raccourcis : plutôt que de recourir à des [[Modificateur|touches modificatrices]] ([[Ctrl]], [[Alt]] ou la touche [[Meta]]), il utilise plusieurs « modes » de fonctionnement (quatre modes : ''normal'', ''insertion'', ''visualisation'' et ''commande''), ce qui permet d'utiliser toutes les commandes en position « dactylo », c'est-à-dire avec les doigts proches de la position de repos, prêt à taper du texte à tout instant ; | |||
* les déplacements du curseur peuvent (devraient, à terme) se faire sans utiliser les flèches du clavier ou la souris : {{ta|H}} {{ta|J}} {{ta|K}} {{ta|L}} déplacent le curseur case par case, {{ta|W}} {{ta|E}} {{ta|B}} déplacent le curseur mot à mot (équivalent à {{tt|Ctrl|flèche}}). Les mains restent ainsi en position dactylo pour toutes les manipulations de texte, ''y compris les déplacements''. | |||
L'utilisation des différents modes de Vim permet de se passer complètement de la souris et d'éliminer la plupart des raccourcis contraignants qui brisent la frappe, tout en diminuant les mouvements de main et la quantité de touches pressé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. Toutefois, lorsqu'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 [[#.C2.AB_B.C3.A9po-Vimification_.C2.BB_du_poste_de_travail|« Vimifier » les applications bureautiques courantes]] pour profiter de cette ergonomie sur l'ensemble du poste de travail. Or, les bases de Vim ne sont pas difficiles à apprendre, notamment parce qu'il existe de bons tutoriels « par l'exemple »… et que vous utilisez la disposition bépo ! | |||
Là où le bât blesse, c'est que Vim a été conçu pour un clavier Qwerty (contexte américain) : | |||
* le fait que les touches {{ta|H}} {{ta|J}} {{ta|K}} {{ta|L}} correspondent à {{t|C}} {{t|T}} {{t|R}} {{t|S}} complique singulièrement la vie des [[bépoïstes]], même pour les « Vimistes » convaincus ; | |||
* Vim n'est pas parfaitement utilisable en l'état avec le Bépo, contrairement à l'Azerty ou même le Dvorak-US, essentiellement parce que les touches {{t|J}} et {{t|K}} ne sont pas côte-à-côte. | |||
Il convient donc de configurer Vim pour l'utiliser en Bépo – c'est l'objectif de cette page. | |||
=== Tutoriels et ressources Vim === | |||
L'installation de Vim donne accès à un tutoriel spécialement étudié pour les débutants (mais qui fait une très bonne doc de rappel pour les ''moins'' débutants). Il est accessible en français par la commande | |||
<source lang="bash"> | |||
vimtutor fr | |||
* http:// | </source> | ||
* http://nemolivier.free.fr/vimqrc-fr-bepo.html version | Le principe est le suivant : un fichier texte est ouvert dans Vim et présente les bases de Vim. Vous êtes invité à modifier sur place ce fichier, c'est-à-dire à tester les commandes et les exemples décrits dans le fichier. Comme le fichier modifié est en réalité une copie du tutorial, vous pouvez à tout moment relancer {{c|vimtutor}} pour repartir sur une version propre, si vous en arrivez à faire n'importe quoi ou à bloquer dans un mode ! | ||
* [http:// | |||
* | * Les essentiels : | ||
* http:// | ** [http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html Une antisèche Vim en anglais (les commandes essentielles)] | ||
** [http://nemolivier.free.fr/vimqrc-fr-bepo.html Une antisèche Vim, ''version bépo''] | |||
** [https://vim.swaroopch.com/ Un tutoriel assez didactique] | |||
* En plus : | |||
** [http://www.faqs.org/docs/Linux-HOWTO/Vim-HOWTO.html Le (gros) tutoriel officiel de Vim] | |||
** [http://learnvimscriptthehardway.stevelosh.com/ Personaliser Vim à l'aide du langage vimscript] | |||
** [http://vim.wikia.com/wiki/Main_Page ''Vim Wiki Tips'', une des ressource les plus complète] | |||
** [http://www.blog-nouvelles-technologies.net/vim-35-ressources-pour-apprendre-a-lutiliser/ De nombreux liens vers des tutoriels] | |||
** [http://www.rayninfo.co.uk/vimtips.html La page qui fait peur…] | |||
== Reconfiguration partielle des touches == | == Reconfiguration partielle des touches == | ||
On ne cherche ici qu'à implémenter le déplacement en | On ne cherche ici qu'à implémenter le déplacement en {{ta|H}} {{ta|J}} {{ta|K}} {{ta|L}} avec le moins d'impact possible sur le reste des commandes Vim. | ||
[[Image:Vim-bepo-066.png|thumb|800px|center|Aide-mémoire Vim / | [[Image:Vim-bepo-066.png|thumb|800px|center|Aide-mémoire Vim/bépo — [http://download.tuxfamily.org/dvorak/images/vim-0.6.6.pdf version PDF]]] | ||
=== Principe === | |||
* {{t|C}} {{t|T}} {{t|S}} {{t|R}} remplacent {{ta|H}} {{ta|J}} {{ta|K}} {{ta|L}} pour les touches de direction ; | |||
* réciproquement : | * réciproquement : | ||
** {H} remplace | ** {{t|H}} remplace {{ta|R}} (''remplacer'') | ||
** {J} remplace | ** {{t|J}} remplace {{ta|T}} (''jusqu'à'') | ||
** {K} remplace | ** {{t|K}} remplace {{ta|S}} (''substitue'') | ||
** {L} remplace | ** {{t|L}} remplace {{ta|C}} (''modification de texte''), juste à coté de {{t|D}} (''couper'') | ||
* {{t|É}} remplace {{ta|W}} (''mot suivant''), le {{t|W}} étant beaucoup trop loin en bépo ; | |||
* {{t|W}} est utilisé comme {{tt|Ctrl|W}} pour faciliter les manipulations de fenêtre. | |||
C'est la solution la plus simple pour utiliser Vim confortablement en bépo. | |||
C'est la solution la plus simple pour utiliser Vim confortablement en | |||
=== ~/.vimrc === | === ~/.vimrc === | ||
Créer un fichier {{C|~/.vimrc.bepo}} avec le contenu suivant : | Créer un fichier {{C|~/.vimrc.bepo}} avec le contenu suivant : | ||
< | <source lang="vim"> | ||
" {W} -> [É] | " {W} -> [É] | ||
" —————————— | " —————————— | ||
Ligne 55 : | Ligne 61 : | ||
noremap é w | noremap é w | ||
noremap É W | noremap É W | ||
" Corollaire, pour effacer/remplacer un mot quand on n’est pas au début (daé / laé). | " Corollaire: on remplace les text objects aw, aW, iw et iW | ||
" pour effacer/remplacer un mot quand on n’est pas au début (daé / laé). | |||
onoremap aé aw | |||
onoremap aÉ aW | |||
onoremap ié iw | |||
onoremap iÉ iW | |||
" Pour faciliter les manipulations de fenêtres, on utilise {W} comme un Ctrl+W : | " Pour faciliter les manipulations de fenêtres, on utilise {W} comme un Ctrl+W : | ||
noremap w <C-w> | noremap w <C-w> | ||
Ligne 86 : | Ligne 94 : | ||
noremap j t | noremap j t | ||
noremap J T | noremap J T | ||
" {L} = « Change » ( | " {L} = « Change » (l = attend un mvt, L = jusqu'à la fin de ligne) | ||
noremap l c | noremap l c | ||
noremap L C | noremap L C | ||
" {H} = « Remplace » ( | " {H} = « Remplace » (h = un caractère slt, H = reste en « Remplace ») | ||
noremap h r | noremap h r | ||
noremap H R | noremap H R | ||
Ligne 104 : | Ligne 112 : | ||
noremap gs gk | noremap gs gk | ||
noremap gt gj | noremap gt gj | ||
" onglet | " onglet précédent / suivant | ||
noremap gb gT | noremap gb gT | ||
noremap gé gt | noremap gé gt | ||
Ligne 117 : | Ligne 125 : | ||
noremap « < | noremap « < | ||
noremap » > | noremap » > | ||
" Remaper la gestion des fenêtres | |||
" ——————————————————————————————— | |||
noremap wt <C-w>j | |||
noremap ws <C-w>k | |||
noremap wc <C-w>h | |||
noremap wr <C-w>l | |||
noremap wd <C-w>c | |||
noremap wo <C-w>s | |||
noremap wp <C-w>o | |||
noremap w<SPACE> :split<CR> | |||
noremap w<CR> :vsplit<CR> | |||
</source> | |||
Si vous souhaitez avoir les chiffres en accès direct en mode normal, remplacez la section « <> en direct » par les lignes suivantes : | |||
< | <source lang="vim"> | ||
" Chiffres en accès direct | " Chiffres en accès direct | ||
" ———————————————————————— | " ———————————————————————— | ||
Ligne 144 : | Ligne 164 : | ||
noremap * 0 | noremap * 0 | ||
noremap 0 * | noremap 0 * | ||
</ | </source> | ||
Puis | Puis ajoutez la ligne suivante dans le fichier {{C|~/.vimrc}} : | ||
<source lang="vim"> | |||
source ~/.vimrc.bepo | |||
</source> | |||
''Nota'' : les utilisateurs de [[Vimperator]] peuvent ajouter la même ligne dans le fichier {{C|~/.vimperatorrc}}. | |||
=== ~/.vim/after/ftplugin/netrw.vim (problèmes avec la commande :Ex)=== | |||
Ex est le ''plugin'' d'exploration de fichiers de Vim. On le lance avec « :Ex », « :Sex », « :Vex », « :Tex », ou même « :e . » (qui se résume en « :e. » pour les fainéants). | |||
Ex | Malheureusement, {{t|t}} et {{t|s}} ne fonctionnent pas comme « bas/haut » avec cet explorateur, car les ''mappings'' d'Ex ne sont pas définis dans {{C|~/.vimrc}}. Trois solutions : | ||
* utiliser les flèches plutôt que {{t|C}} {{t|T}} {{t|S}} {{t|R}} avec Ex — voire, au pire, utiliser la souris (sacrilège !) | |||
* utiliser les combinaisons {{tt|Ctrl|N}} (next) pour bas et {{tt|Ctrl|P}} (previous) pour haut | |||
* redéfinir les commandes d'Ex dans le fichier {{C|~/.vim/after/ftplugin/netrw.vim}} comme suit : | |||
<source lang="vim"> | |||
nunmap <buffer> t | |||
nunmap <buffer> s | |||
nunmap <buffer> k | |||
nnoremap <buffer> t j | |||
nnoremap <buffer> s k | |||
nnoremap <buffer> k s | |||
</source> | |||
Avec ce fichier, {{t|T}} et {{t|S}} fonctionnent désormais comme bas/haut et {{t|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é ! (Remarque: si cette méthode ne fonctionne pas, il suffit d'installer le plugin [https://github.com/tpope/vim-pathogen pathogen].) | |||
Solution alternative, trouvée [http://unix.stackexchange.com/questions/31575/remapping-keys-in-vims-directory-view ici]: ajouter le code suivant au <code>.vimrc</code> (ou au <code>.vimrc.bepo</code>) | |||
<source>if has("autocmd") | |||
augroup netrw_dvorak_fix | |||
autocmd! | |||
autocmd filetype netrw call Fix_netrw_maps_for_dvorak() | |||
augroup END | |||
function! Fix_netrw_maps_for_dvorak() | |||
noremap <buffer> t j | |||
noremap <buffer> s k | |||
noremap <buffer> k s | |||
endfunction | |||
endif</source> | |||
* Avantage de cette méthode: le remappage se trouve dans le <code>.vimrc</code> et est plus facilement transportable sur une autre machine | |||
* Inconvénient: nécessite que vim soit compilé avec l'option autocmd, ce qui n'est pas toujours le cas… | |||
=== Remarques === | === Remarques === | ||
Vimtutor ne tient pas compte du remappage des touches. Pour pouvoir suivre le tutoriel avec les nouvelles touches, il suffit de copier le fichier du tutoriel (son emplacement est indiqué sur la ligne inférieure lors de l'ouverture) dans un autre répertoire (par exemple avec {{c|cp /tmp/tutordtBQfU ~/vimtutor}}) puis d'ouvrir la copie avec vim: {{c|vim vimtutor}}. Vous pouvez également vous entraîner sur [https://gist.githubusercontent.com/Einenlum/6d8e3e44985b08362f47/raw/2da498768d3a8cf017faf64755817aa0c0d232d1/vimtutor-bepo-1-7 cette version de vimtutor] adaptée à la reconfiguration partielle des touches en BÉPO. | |||
Les touches {Ê}{È}{À}{Ç} sont inutilisées par Vim | Les touches {{t|Ê}} {{t|È}} {{t|À}} {{t|Ç}} sont inutilisées par Vim et peuvent donc être affectées librement. Par exemple, on peut faire de {{t|È}} une touche « début de ligne » : | ||
<source lang="vim"> | |||
noremap è ^ | |||
noremap È 0 | |||
</source> | |||
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) | 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, les adeptes du guillemet-apostrophe en [[accès direct]] peuvent utiliser la touche {{t|ç}} à cet effet : | ||
<source lang="vim"> | |||
noremap ç ' | |||
noremap Ç ` | |||
</source> | |||
À faire pour la prochaine version (0.6.7) : | À faire pour la prochaine version (0.6.7) : | ||
* inverser {j} et {h} pour regrouper les fonctions de recherche de caractères sur une même ligne | * inverser {{t|j}} et {{t|h}} pour regrouper les fonctions de recherche de caractères sur une même ligne ; | ||
* penser à mettre à jour le label de {;/:} | * penser à mettre à jour le label de {;/:} ; | ||
* remplacer <> par «» sur les touches {2}{3} ? | * remplacer <> par «» sur les touches {{t|2}} {{t|3}} ? | ||
<del>Par ailleurs, on pourrait échanger {{t|s}} et {{t|g}} de façon à avoir {{t|g}} sous la main gauche et pour une meilleure cohérence des raccourcis de Vim : les commandes correspondant à « s » et « r », respectivement {{t|g}} et {{t|h}}, se trouveraient alors sous les touches {{t|S}} et {{t|R}}.</del> ''problématique pour les raccourcis en {{t|g}}, nécessite une série de remappages supplémentaires, et conflit avec l'inversion {{t|j}}/{{t|h}}. | |||
==Problèmes connus== | |||
===Avec le greffon « Automatic LaTeX Plugin » (ATP)=== | |||
En installant le plugin [http://atp-vim.sourceforge.net/ '''ATP'''] pour LaTeX, le mapping de la touche {{t|r}} revient à son réglage normal et il est impossible de forcer son utilisation au mouvement vers la gauche par les configurations ci-dessus. | |||
Pour y remédier, il faut ajouter au fichier {{C|.vim/after/ftplugin/tex.vim}}, la ligne "noremap <buffer> r l". | |||
== Reconfiguration à la demande == | == Reconfiguration à la demande == | ||
Mettre le script suivant dans | |||
Avec un minimum d'adaptation, il est possible gérer n'importe quelle disposition. | Mettre le script suivant dans {{c|~/.vim/plugin/dvorak-toggle}}. Avec un minimum d'adaptation, il est possible gérer n'importe quelle disposition. | ||
< | |||
<source lang="vim"> | |||
" Quick Dvorak-layout toggle. | " Quick Dvorak-layout toggle. | ||
" when toggled, you can use ctsr to move | " when toggled, you can use ctsr to move | ||
Ligne 194 : | Ligne 244 : | ||
" | " | ||
" This code is under BSD licence, and the author doesn't even bother tell his identity. | " This code is under BSD licence, and the author doesn't even bother tell his identity. | ||
let s:DvorakToggleState = 0 | let s:DvorakToggleState = 0 | ||
let s:DvorakToggleOldMap = 0 | let s:DvorakToggleOldMap = 0 | ||
function! g:DvorakToggle () | function! g:DvorakToggle () | ||
if s:DvorakToggleState | if s:DvorakToggleState | ||
Ligne 212 : | Ligne 261 : | ||
" use à or whatever you want. Make it easy to access though. | " use à or whatever you want. Make it easy to access though. | ||
nmap à :call g:DvorakToggle()<CR> | nmap à :call g:DvorakToggle()<CR> | ||
</source> | |||
== Reconfiguration conditionnelle == | |||
Il est parfois possible détecter depuis Vim si votre disposition préférée est en place (pour ceux qui ne peuvent ou ne veulent s’en servir systématiquement). | |||
=== Sous X === | |||
<source lang="vim"> | |||
if !empty(system("setxkbmap -print|grep bepo")) | |||
source ~/.vimrc.bepo | |||
endif | |||
</source> | |||
== Reconfiguration totale des touches == | == Reconfiguration totale des touches == | ||
Une option radicale consisterait à reconfigurer toutes les touches en mode normal | Une option ''radicale'' consisterait à reconfigurer toutes les touches en mode normal afin qu'elles correspondent aux labels du clavier [[Azerty]]. On pourrait même envisager de générer automatiquement un tel fichier avec les outils du projet bépo, si suffisamment d'utilisateurs étaient intéressés… | ||
=== Bépo/Qwerty === | === Bépo/Qwerty === | ||
[[Image:Vim bépo.png|thumb|450px|right|Aide-mémoire Vim/bépo avec mapping du clavier bépo -> qwerty en mode normal]] | |||
C’est à priori la meilleure solution du point de vue de l'ergonomie. On peut reprendre les ''cheat sheets'' (anti-sèches) classiques en l'état ! | |||
De plus, comme pour les autres reconfigurations présentées dans cette page, les nombreux caractères supplémentaires accessibles via la combinaison <AltGr> permettent de disposer d’une réserve importante pour mapper des macros personnalisées : æ, ù, €, … | |||
Le plus simple est d’utiliser la fonction langmap, qui permet d’utiliser une disposition de clavier pour la saisie de texte (modes insertion et remplacement), et une autre pour les autres modes (normal, visuel…). Pour plus de détail : <source lang="vim>:h langmap</source> | |||
L’exemple suivant contient 2 exceptions à une stricte correspondance Bépo/Qwerty : | |||
• le {{t|y}} n’est pas mappé sur le {{t|^}} mais sur le {{t|ç}}, pour éviter de l’associer à une touche morte nécessitant de répéter deux fois la touche. | |||
• La barre verticale | et la barre oblique inversée \ ne sont pas remappées et restent donc accessibles tels qu’en Bépo, c’est la conséquence du choix précédent. | |||
<source lang="vim"> | |||
set langmap=$`,\\"1,«2,»3,(4,)5,@6,+7,-8,/9,*0,=-,%=,bq,éw,pe,or,èt,çy,vu,di,lo,jp,z[,w],aa,us,id,ef,\\,g,ch,tj,sk,rl,n\\;,m',ê<,àz,yx,xc,.v,kb,’n,qm,g\\,,h.,f/,#~,1!,2@,3#,4$,5%,6^,7&,8*,9(,0),°_,`+,BQ,ÉW,PE,OR,ÈT,ÇY,VU,DI,LO,JP,Z{,W},AA,US,ID,EF,\\;G,CH,TJ,SK,RL,N:,M\\",Ê>,ÀZ,YX,XC,:V,KB,?N,QM,G<,H>,F? | |||
</source>Pour les cas où langmap n’est pas supporté, voici un équivalent avec noremap uniquement :<syntaxhighlight lang="vim"> | |||
noremap $ ` | |||
noremap \" 1 | |||
noremap « 2 | |||
noremap » 3 | |||
noremap ( 4 | |||
noremap ) 5 | |||
noremap @ 6 | |||
noremap + 7 | |||
noremap - 8 | |||
noremap / 9 | |||
noremap * 0 | |||
noremap = - | |||
noremap % = | |||
noremap b q | |||
noremap é w | |||
noremap p e | |||
noremap o r | |||
noremap è t | |||
noremap ç y | |||
noremap v u | |||
noremap d i | |||
noremap l o | |||
noremap j p | |||
noremap z [ | |||
noremap w ] | |||
noremap a a | |||
noremap u s | |||
noremap i d | |||
noremap e f | |||
noremap , g | |||
noremap c h | |||
noremap t j | |||
noremap s k | |||
noremap r l | |||
noremap n ; | |||
noremap m ' | |||
noremap ê < | |||
noremap à z | |||
noremap y x | |||
noremap x c | |||
noremap . v | |||
noremap k b | |||
noremap ’ n | |||
noremap q m | |||
noremap g , | |||
noremap h . | |||
noremap f / | |||
noremap # ~ | |||
noremap 1 ! | |||
noremap 2 @ | |||
noremap 3 # | |||
noremap 4 $ | |||
noremap 5 % | |||
noremap 6 ^ | |||
noremap 7 & | |||
noremap 8 * | |||
noremap 9 ( | |||
noremap 0 ) | |||
noremap ° _ | |||
noremap ` + | |||
noremap B Q | |||
noremap É W | |||
noremap P E | |||
noremap O R | |||
noremap È T | |||
noremap Ç Y | |||
noremap V U | |||
noremap D I | |||
noremap L O | |||
noremap J P | |||
noremap Z { | |||
noremap W } | |||
noremap A A | |||
noremap U S | |||
noremap I D | |||
noremap E F | |||
noremap ; G | |||
noremap C H | |||
noremap T J | |||
noremap S K | |||
noremap R L | |||
noremap N : | |||
noremap M " | |||
noremap Ê > | |||
noremap À Z | |||
noremap Y X | |||
noremap X C | |||
noremap : V | |||
noremap K B | |||
noremap ? N | |||
noremap Q M | |||
noremap G < | |||
noremap H > | |||
noremap F ? | |||
</syntaxhighlight> | |||
=== Bépo/Azerty === | === Bépo/Azerty === | ||
Cette variante permet de se référer aux labels des touches du clavier [[Azerty]] pour les commandes Vim. | |||
<source lang="vim"> | |||
set langmap=ba,éz,pe,or,èt,çy,vu,di,lo,fp,j^,z$,aq,us,id,ef,\\,g,ch,tj,sk,rl,nm,mù,^*,ê<,àw,yx,xc,.v,kb,’n,q\\,,g\\;,h:,f!,BA,ÉZ,PE,OR,ÈT,ÇY,VU,DI,LO,FP,J¨,Z£,AQ,US,ID,EF,?G,CH,TJ,SK,RL,NM,M%,!*,Ê>,ÀW,YX,XC,:V,KB,\\;N,QG,G.,H/,F§,@œ,_&,"é,«",»',((,)-,+è,-_,*ç,/à,=),%=,$Œ,^°,µ+,#“,{´,}~,<#,>{,[[,]|,±`,¬\,×^,÷@,¯],%} | |||
</source> | |||
== Autres options utiles == | == Autres options utiles == | ||
À ajouter dans le fichier {{C|~/.vimrc}}. | |||
Quelques petites astuces. À ajouter dans le fichier {{C|~/.vimrc}}. | |||
=== Appliquer automatiquement les modifications de ~/.vimrc === | === Appliquer automatiquement les modifications de ~/.vimrc === | ||
La première chose à faire pour jouer avec {{C|~/.vimrc}} ! | La première chose à faire pour jouer avec {{C|~/.vimrc}} ! | ||
<source lang="vim"> | |||
if has("autocmd") | |||
autocmd! bufwritepost .vimrc source ~/.vimrc | |||
endif | |||
</source> | |||
''Note'' : cette astuce semble ne pas fonctionner pour certains. Si vous constatez des problèmes, passez-vous en et relancez Vim après chaque modification de {{c|~/.vimrc}} que vous voulez tester… | |||
=== Espaces insécables === | === Espaces insécables === | ||
; | Les espaces insécables du Bépo peuvent poser problème, notamment dans des fichiers de code brut ([[ASCII]]) où ils génèrent des erreurs. On a deux façons simples de s’en prémunir : | ||
; Colorier les espaces insécables pour mieux les repérer : | |||
Ajouter les lignes suivantes ''après la ligne « syntax on »'' le cas échéant. Bien entendu, on peut changer la couleur. | Ajouter les lignes suivantes ''après la ligne « syntax on »'' le cas échéant. Bien entendu, on peut changer la couleur. | ||
<source lang="vim"> | |||
" colorise les nbsp | |||
highlight NbSp ctermbg=lightgray guibg=lightred | |||
match NbSp /\%xa0/ | |||
</source> | |||
; Faire apparaître les insécable avec un autre caractère | ; Faire apparaître les insécable avec un autre caractère | ||
Ils apparaitront avec le caractère choisi au bout de la première ligne. Ici le « · » | Ils apparaitront avec le caractère choisi au bout de la première ligne. Ici le « · » | ||
<source lang="vim"> | |||
set listchars=nbsp:· | |||
set list | |||
</source> | |||
Autre exemple trouvé sur [http://blog.gnusquad.org/2009/07/24/afficher-les-caracteres-speciaux-dans-vim/ Gnusquad] avec plus de caractères « invisibles » affichés : | Autre exemple trouvé sur [http://blog.gnusquad.org/2009/07/24/afficher-les-caracteres-speciaux-dans-vim/ Gnusquad] avec plus de caractères « invisibles » affichés : | ||
<source lang="vim"> | |||
set listchars=nbsp:¤,tab:>-,trail:¤,extends:>,precedes:< | |||
set list | |||
</source> | |||
; Mapper l’espace insécable en « Escape » : | ; Mapper l’espace insécable en « Escape » : | ||
à éviter pour rédiger du texte mais très pratique pour taper du code | à éviter pour rédiger du texte mais très pratique pour taper du code ! | ||
< | <source lang="vim"> | ||
" interdit les nbsp en mode insertion | " interdit les nbsp en mode insertion (il y a une espace insécable) | ||
inoremap | inoremap <Esc> | ||
</ | </source> | ||
=== [Esc] plus accessible === | === [Esc] plus accessible === | ||
==== [Esc] sur Tab ==== | |||
Vim fait un grand usage de la touche {{ta|Escape}} qui se trouve loin (''a priori'' en haut à gauche). On peut modifier le comportement de {{t|Tab}} pour qu’il serve de touche {{t|Esc}}. On garde un {{t|Tab}} en {{tt|Maj|Tab}}. Attention, ''à ne pas utiliser dans Vimperator'', on y a besoin du Tab direct… | |||
''Note'' : {{tt|Ctrl|C}} est un alias standard de {{t|Esc}}, plus central, mais c'est un raccourci à deux touches. À vous de voir si cette combinaison est agréable ou pas sur votre clavier physique. | |||
<source lang="vim"> | |||
" 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> | |||
</source> | |||
==== Typematrix ==== | |||
Les possesseurs de clavier TypeMatrix peuvent aussi remapper la touche « desktop » en Esc en suivant les explications présentées sur [[TypeMatrix#Trucs_et_astuces|la page dédiée au TypeMatrix]]. | |||
==== xcape ==== | |||
Une alternative, pour les utilisateurs de linux: le programme [https://github.com/alols/xcape xcape]. Il permet de donner une valeur aux touches modificatrices lorsqu’elles sont tapées seules. Par défaut, la touche {{t|Shitf Left}} seule renvoie ainsi {{t|Esc}}. Pour les utilisateurs de TypeMatrix, donner à {{t|Alt}} la valeur {{t|Esc}} lorsqu’elle est tapée seule permet d’avoir Escape sous le pouce. | |||
=== [PgUp] / [PgDn] plus accessibles === | === [PgUp] / [PgDn] plus accessibles === | ||
Vim utilise par défaut Ctrl | |||
Vim utilise par défaut {{tta|Ctrl|B}} et {{tta|Ctrl|F}} pour aller à la page précédente ou suivante. Ce n'est déjà pas la panacée en Qwerty, mais en Bépo, c'est l'horreur, car ces deux touches sont à l'exact opposé l'une de l'autre ! Pour y remédier, on peut par exemple utiliser les touches {{t|BackSpace}} et {{t|Espace}}, c'est bien plus confortable : | |||
<source lang="vim"> | |||
noremap <BS> <PageUp> | |||
noremap <Space> <PageDown> | |||
</source> | |||
Alternativement, si on préfère défiler des demi-pages, on peut utiliser les ''mappings'' suivants : | Alternativement, si on préfère défiler des demi-pages, on peut utiliser les ''mappings'' suivants : | ||
<source lang="vim"> | |||
noremap <BS> <C-U> | |||
Tant qu'on y est, on peut aussi utiliser | noremap <Space> <C-D> | ||
</source> | |||
Tant qu'on y est, on peut aussi utiliser {{t|Entrée}} pour centrer la page sur le curseur (ne fonctionne pas avec [[Vimperator]]) : | |||
<source lang="vim"> | |||
noremap <Return> zz | noremap <Return> zz | ||
</source> | |||
=== Fixer l’encodage des fichiers en utf-8 === | === Fixer l’encodage des fichiers en utf-8 === | ||
<source lang="vim"> | |||
set encoding=utf-8 | set encoding=utf-8 | ||
set fileencoding=utf-8 | set fileencoding=utf-8 | ||
Plus de détails [http://ubunteros.tuxfamily.org/spip.php?article182 ici]. | </source> | ||
Plus de détails [http://ubunteros.tuxfamily.org/spip.php?article182 ici](Lien mort). | |||
=== Lancer un navigateur web depuis Vim === | === Lancer un navigateur web depuis Vim === | ||
Hors sujet, mais vraiment belle astuce. | Hors sujet, mais vraiment belle astuce. | ||
< | <source lang="vim"> | ||
" « v,d » et « v,s » lancent firefox et une recherche (définition ou synonyme) dans le tlfi sur le mot courant | " « v,d » et « v,s » lancent firefox et une recherche (définition ou synonyme) dans le tlfi sur le mot courant | ||
vmap ,d :<C-U>!firefox "http://www.cnrtl.fr/lexicographie/<cword>" >& /dev/null<CR><CR> | vmap ,d :<C-U>!firefox "http://www.cnrtl.fr/lexicographie/<cword>" >& /dev/null<CR><CR> | ||
Ligne 413 : | Ligne 518 : | ||
" « v,o » ouvre l’url sur laquelle on se trouve dans firefox | " « v,o » ouvre l’url sur laquelle on se trouve dans firefox | ||
vmap ,o :<C-U>!firefox "<cfile>" >& /dev/null<CR><CR> | vmap ,o :<C-U>!firefox "<cfile>" >& /dev/null<CR><CR> | ||
</ | </source> | ||
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. | Il faut que Firefox soit dans le {{c|$PATH}}, sinon, il faut 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 : | Variante qui tue, en utilisant un navigateur texte à l'intérieur de Vim : | ||
Ligne 421 : | Ligne 526 : | ||
* facultatif : remplacer « lynx » par « w3m » partout dans le fichier {{C|browser.vim}} (w3m supporte l'utf-8, contrairement à lynx) | * facultatif : remplacer « lynx » par « w3m » partout dans le fichier {{C|browser.vim}} (w3m supporte l'utf-8, contrairement à lynx) | ||
* ajouter les lignes suivantes dans le fichier {{C|~/.vimrc}} : | * ajouter les lignes suivantes dans le fichier {{C|~/.vimrc}} : | ||
< | <source lang="vim"> | ||
" « v,d » cherche la définition du mot courant dans le TLFI | " « 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> | vmap ,d :call OpenWebBrowser("http://www.cnrtl.fr/lexicographie/<C-R><C-W>")<CR> | ||
Ligne 434 : | Ligne 539 : | ||
" ouvre l’URL sur laquelle on se trouve | " ouvre l’URL sur laquelle on se trouve | ||
vmap ,o :call OpenWebBrowser("<C-R><C-A>")<CR> | vmap ,o :call OpenWebBrowser("<C-R><C-A>")<CR> | ||
</ | </source> | ||
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. | 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 === | === Exemples de ~/.vimrc === | ||
*celui de [[Utilisateur:Kaze|Kazé]] est [[Utilisateur:Kaze/vimrc|ici]] | |||
*celui de [[Utilisateur:Nemolivier|NémOlivier]] est [[Utilisateur:Nemolivier/vimrc|là]] | * celui de [[Utilisateur:Kaze|Kazé]] est [[Utilisateur:Kaze/vimrc|ici]] | ||
* celui de [[Utilisateur:Nemolivier|NémOlivier]] est [[Utilisateur:Nemolivier/vimrc|là]] | |||
* celui de [[Utilisateur:Jd|jd]] est [[Utilisateur:Jd/vimrc|là]] | |||
* celui de [[Utilisateur:Carnifex|Carnifex]] est [[Utilisateur:Carnifex/.vimrc|ici]], et le .vimrc.bepo [[Utilisateur:Carnifex/.vimrc.bepo|là]] | |||
* celui de [[Utilisateur:Damien_thiriet|Damien Thiriet]] est [[Utilisateur:Damien_thiriet#mon_.vimrc|là]], avec des fichiers annexes d’abbréviations | |||
* celui de [[Utilisateur:Denis_S|Denis S]] est en partie [[Utilisateur:Denis_S#Vim_en_bépo|là]] | |||
=== Plugins bépo pour Vim === | |||
Le moyen le plus simple de redéfinir les touches dans Vim est d’utiliser un plugin. | |||
* Le plugin de [[Utilisateur:Clemaitre58|Clemaitre58]] permet de passer rapidement d'une configuration BÉPO à une autre configuration et activant ou non le plugin : [https://github.com/clemaitre58/dvorak-bepo Voir le dépot github]. | |||
* Le plugin [https://github.com/michamos/vim-bepo vim-bepo] est une variante de la reconfiguration partielle. Toutes les touches sont documentées dans l’aide intégrée de Vim ; il prend en charge automatiquement ou explique comment configurer quelques plugins tiers. | |||
== « Bépo-Vimification » du poste de travail == | == « Bépo-Vimification » du poste de travail == | ||
Ligne 445 : | Ligne 562 : | ||
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. | 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. | ||
=== | === Navigateurs web === | ||
;Uzbl | |||
[http://www.uzbl.org/ Uzbl] (prononcez "usable") est un navigateur web qui se pilote entièrement au clavier avec les raccourcis clavier de vim. Fondé sur webkit, uzbl est beaucoup plus léger que vimperator. | |||
;Dwb | |||
[http://portix.bitbucket.org/dwb/ dwb] est un autre navigateur web supportant des raccourcis vim. Intuitif d'utilisation, la commande Sk (Settings/Keybindings) affiche la liste des actions et leurs raccourcis associés. Les raccourcis peuvent être réattribués à partir de cette page. Malheureusement, [https://bitbucket.org/portix/dwb/pull-request/22/several-cleanups-to-increase-portability/diff#comment-3217936 le projet n'est plus supporté depuis le 25 octobre 2014]. [https://github.com/The-Compiler/qutebrowser Qutebrowser] pourrait arriver comme son successeur. | |||
;Firefox | |||
[http://vimperator.mozdev.org/ 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 {{C|~/.vimperatorrc}} : | [http://vimperator.mozdev.org/ 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 {{C|~/.vimperatorrc}} : | ||
source ~/.vimrc.bepo | source ~/.vimrc.bepo | ||
Une aide sur l'utilisation bépo de vimperator est | Une aide sur l'utilisation bépo de vimperator est disponible [[vimperator|sur cette page]]. | ||
À 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'' ({{t|f}} et {{t|F}}). Le mapping proposé pour avoir les chiffres en accès direct dans Vim ne fonctionne pas avec Vimperator. | À 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'' ({{t|f}} et {{t|F}}). Le mapping proposé pour avoir les chiffres en accès direct dans Vim ne fonctionne pas avec Vimperator. | ||
Voir [http://vimperator.cutup.org/index.php?title=Configuration le wiki de Vimperator] pour plus d'informations sur la configuration. | Voir [http://vimperator.cutup.org/index.php?title=Configuration le wiki de Vimperator] ou la <code>:help</code> pour plus d'informations sur la configuration. | ||
Voir également [http://code.google.com/p/gvimail/ GViMail] pour utiliser Vimperator avec Gmail. | Voir également [http://code.google.com/p/gvimail/ GViMail] pour utiliser Vimperator avec Gmail. | ||
[http://5digits.org/pentadactyl/ pentadactyl] est une autre extension firefox très similaire à Vimperator. Avantage notable de pentadactyl sur vimperator: la possibilité de [http://superuser.com/questions/691763/how-do-i-remap-keys-in-caret-mode-and-textarea-mode-in-vimperator/691764#691764 remapper les touches du mode caret]. D'après [http://5digits.org/pentadactyl/faq#faq-differences la faq] de pentadactyl, <i>The main difference is that Vimperator's most active developers have moved on to Pentadactyl. More qualitative changes may be found in the change log, but essentially add up to what we consider more active and thoughtful development.</i> | |||
;Vimprobable | |||
[http://sourceforge.net/apps/trac/vimprobable/ Vimprobable] est un navigateur à part entière qui ressemble fort à Vimperator. | |||
;Chrome / Chromium | |||
Il existe plusieurs extensions visant à émuler les commandes Vim sous Chrome. On peut citer [https://chrome.google.com/extensions/detail/cdkefpgghindmmclchkbcdgikbpnbiaj YakShave], [https://chrome.google.com/extensions/detail/godjoomfiimiddapohpmfklhgmbfffjj Vrome] et [https://chrome.google.com/extensions/detail/dbepggeogbaibhgnhhndojpepiihcmeb Vimium]. Les deux premières sont assez complexes mais extensivement configurables via un serveur à lancer en tâche de fond — indépendamment de Chrome. La dernière a le mérite de rester simple et de remplir assez bien son office. Voici de quoi lui apprendre à se comporter un peu mieux en bépo (lignes à copier dans la section « Adanced options >> Key mappings » des réglages de l’extension): | |||
<source lang="vim"> | |||
map t scrollDown | |||
map s scrollUp | |||
map c scrollLeft | |||
map r scrollRight | |||
map j createTab | |||
map gé nextTab | |||
map gb previousTab | |||
map h reload | |||
</source> | |||
À noter : une extension apparue plus récemment, [https://chrome.google.com/webstore/detail/gghkfhpblkcmlkmpcpgaajbbiikbhpdi Vichrome], mérite le détour. Elle paraît mieux finie que les précédentes. Si vous souhaitez l’utiliser en bépo, ces lignes sont un bon point de départ (ajoutez-les à la section « Key Mapping » des options de l’extension) : | |||
<source lang="vim"> | |||
# bépo | |||
nmap t ScrollDown | |||
nmap s ScrollUp | |||
nmap c ScrollLeft | |||
nmap r ScrollRight | |||
nmap j TabOpenNew | |||
nmap gé TabFocusNext | |||
nmap gb TabFocusPrev | |||
nmap h TabReload | |||
</source> | |||
=== Thunderbird === | === Thunderbird === | ||
Ligne 468 : | Ligne 623 : | ||
;Emacs | ;Emacs | ||
Emacs dispose nativement d'un mode Vi qui <del>le rend utilisable</del> permet de déplacer le curseur sans bouger les mains (pas testé ;-)). | [[Emacs]] dispose nativement d'un mode Vi qui <del>le rend utilisable</del> permet de déplacer le curseur sans bouger les mains (pas testé ;-)). | ||
Il dispose aussi d'une très bon mode majeur simulant Vim, [[Evil]] | |||
;Komodo | ;Komodo | ||
Ligne 479 : | Ligne 635 : | ||
[http://www.viemu.com/ ViEmu] propose un plugin Vim (non-libre) pour Visual Studio, ainsi que pour Word™ et Outlook™. | [http://www.viemu.com/ ViEmu] propose un plugin Vim (non-libre) pour Visual Studio, ainsi que pour Word™ et Outlook™. | ||
;Pida | |||
[http://pida.co.uk/ Pida] utilise nativement vim ou bien Emacs. | |||
=== Lecteur multimédia === | |||
* [[Mpv]]. | |||
=== Outils du shell === | === Outils du shell === | ||
De nombreux outils courants du shell utilisent nativement les raccourcis Vim : | De nombreux outils courants du shell utilisent nativement les raccourcis Vim : | ||
* [[wp:Less|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 [http://unixhelp.ed.ac.uk/CGI/man-cgi?lesskey lesskey]. | * [[wp:Less|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 [http://unixhelp.ed.ac.uk/CGI/man-cgi?lesskey lesskey]. | ||
* [[ | * [[most]] : un ''pager'' plus puissant encore qui peut être utilisé à la place de less pour les pages de man. | ||
* [ | * [http://fr.wikipedia.org/wiki/Aptitude_(logiciel) aptitude] : le gestionnaire de paquets Debian est [http://algebraicthunk.net/~dburrows/projects/aptitude/doc/en/ch02s04s02.html configurable] lui aussi. | ||
* [ | * [http://fr.wikipedia.org/wiki/W3m w3m] : navigateur web, moins connu que Lynx, mais qui a néanmoins l'avantage d'être compatible utf-8, entre autres. On peut [http://w3m.sourceforge.net/MANUAL#Key:custom redéfinir les raccourcis clavier] dans le fichier {{C|~/.w3m/config}}. | ||
* [ | * [http://fr.wikipedia.org/wiki/Mutt mutt] : client mail. On peut utiliser ses propres mappings ([http://www103.pair.com/parv/comp/unix/cf/mail/mutt-keys-hooks.cf exemple]). | ||
* [http://fr.wikipedia.org/wiki/Muttng muttng] : fork de mutt, qui inclut un certain nombre de patches et qui serait plus [http://mutt-ng.berlios.de/manual/manual.html#id2525213 configurable] ([http://lists.berlios.de/pipermail/mutt-ng-users/2006-May/000196.html exemple]). | |||
* [[wp:Newsbeuter|Newsbeuter]] : [[wp:Agrégateur|Agrégateur de flux de syndication]] en console fonctionnant comme mutt. Il est possible de redéfinir les binding pour les [[Newsbeuter|adapter à bépo]]. | |||
* [[ranger]] : un explorateur de fichier avec interface légère utilisable au clavier. La configuration des raccourcis se fait dans le fichier ~/.config/ranger/rc.conf . Pour créer ce fichier et les autres fichiers de conf utiliser la commande : ranger --copy-config=all | |||
Les plus gravement atteints | Les plus gravement atteints peuvent utiliser des raccourcis Vi dans le terminal : | ||
* en | * en adaptant au bépo le fichier [[inputrc|~/.inputrc]] | ||
* en utilisant [ | * en utilisant [http://fr.wikipedia.org/wiki/Zsh zsh], qui possède un mode vi ; il suffit d'ajouter les lignes suivantes au fichier {{C|~/.zshrc}} : | ||
<source lang="bash"> | |||
# Mode vim | # Mode vim | ||
bindkey -v | bindkey -v | ||
Ligne 506 : | Ligne 671 : | ||
bindkey -a L vi-replace | bindkey -a L vi-replace | ||
bindkey -a k vi-substitute | bindkey -a k vi-substitute | ||
</source> | |||
* en utilisant [https://fishshell.com/ fish], qui possède un mode vi ; on peut modifier ce mode pour l’adapter au bépo en créant le fichier {{C|~/.config/fish/functions/fish_vi_bepo_key_bindings.fish}} : | |||
<source> | |||
function fish_vi_bepo_key_bindings --description 'bepo vi-like key bindings for fish' | |||
if contains -- -h $argv | |||
or contains -- --help $argv | |||
echo "Sorry but this function doesn't support -h or --help" | |||
return 1 | |||
end | |||
# Erase all bindings if not explicitly requested otherwise to | |||
# allow for hybrid bindings. | |||
# This needs to be checked here because if we are called again | |||
# via the variable handler the argument will be gone. | |||
set -l rebind true | |||
if test "$argv[1]" = --no-erase | |||
set rebind false | |||
set -e argv[1] | |||
else | |||
bind --erase --all --preset # clear earlier bindings, if any | |||
end | |||
# Allow just calling this function to correctly set the bindings. | |||
# Because it's a rather discoverable name, users will execute it | |||
# and without this would then have subtly broken bindings. | |||
if test "$fish_key_bindings" != fish_vi_key_bindings | |||
and test "$rebind" = true | |||
# Allow the user to set the variable universally. | |||
set -q fish_key_bindings | |||
or set -g fish_key_bindings | |||
# This triggers the handler, which calls us again and ensures the user_key_bindings | |||
# are executed. | |||
set fish_key_bindings fish_vi_key_bindings | |||
return | |||
end | |||
set -l init_mode insert | |||
# These are only the special vi-style keys | |||
# not end/home, we share those. | |||
set -l eol_keys \$ g\$ \u00E7 # $ g$ ç | |||
set -l bol_keys \^ 0 g\^ \u00E8 # ^ 0 g^ è | |||
if contains -- $argv[1] insert default visual | |||
set init_mode $argv[1] | |||
else if set -q argv[1] | |||
# We should still go on so the bindings still get set. | |||
echo "Unknown argument $argv" >&2 | |||
end | |||
# Inherit shared key bindings. | |||
# Do this first so vi-bindings win over default. | |||
for mode in insert default visual | |||
__fish_shared_key_bindings -s -M $mode | |||
end | |||
bind -s --preset -M insert \r execute | |||
bind -s --preset -M insert \n execute | |||
bind -s --preset -M insert "" self-insert | |||
# Space and other command terminators expand abbrs _and_ inserts itself. | |||
bind -s --preset -M insert " " self-insert expand-abbr | |||
bind -s --preset -M insert ";" self-insert expand-abbr | |||
bind -s --preset -M insert "|" self-insert expand-abbr | |||
bind -s --preset -M insert "&" self-insert expand-abbr | |||
bind -s --preset -M insert "^" self-insert expand-abbr | |||
bind -s --preset -M insert ">" self-insert expand-abbr | |||
bind -s --preset -M insert "<" self-insert expand-abbr | |||
# Closing a command substitution expands abbreviations | |||
bind -s --preset -M insert ")" self-insert expand-abbr | |||
# Ctrl-space inserts space without expanding abbrs | |||
bind -s --preset -M insert -k nul 'commandline -i " "' | |||
# Add a way to switch from insert to normal (command) mode. | |||
# Note if we are paging, we want to stay in insert mode | |||
# See #2871 | |||
bind -s --preset -M insert \e "if commandline -P; commandline -f cancel; else; set fish_bind_mode default; commandline -f backward-char repaint-mode; end" | |||
# Default (command) mode | |||
bind -s --preset :q exit | |||
bind -s --preset -m insert \cc cancel-commandline repaint-mode | |||
bind -s --preset -M default c backward-char | |||
bind -s --preset -M default r forward-char | |||
bind -s --preset -m insert \n execute | |||
bind -s --preset -m insert \r execute | |||
bind -s --preset -m insert o insert-line-under repaint-mode | |||
bind -s --preset -m insert O insert-line-over repaint-mode | |||
bind -s --preset -m insert i repaint-mode | |||
bind -s --preset -m insert I beginning-of-line repaint-mode | |||
bind -s --preset -m insert a forward-single-char repaint-mode | |||
bind -s --preset -m insert A end-of-line repaint-mode | |||
bind -s --preset -m visual v begin-selection repaint-mode | |||
#bind -s --preset -m insert o "commandline -a \n" down-line repaint-mode | |||
#bind -s --preset -m insert O beginning-of-line "commandline -i \n" up-line repaint-mode # doesn't work | |||
bind -s --preset gg beginning-of-buffer | |||
bind -s --preset G end-of-buffer | |||
for key in $eol_keys | |||
bind -s --preset $key end-of-line | |||
end | |||
for key in $bol_keys | |||
bind -s --preset $key beginning-of-line | |||
end | |||
bind -s --preset u undo | |||
bind -s --preset \cr redo | |||
bind -s --preset [ history-token-search-backward | |||
bind -s --preset ] history-token-search-forward | |||
bind -s --preset s up-or-search | |||
bind -s --preset t down-or-search | |||
bind -s --preset b backward-word | |||
bind -s --preset B backward-bigword | |||
bind -s --preset ge backward-word | |||
bind -s --preset gE backward-bigword | |||
bind -s --preset \u00E9 forward-word forward-single-char | |||
bind -s --preset \u00C9 forward-bigword forward-single-char | |||
bind -s --preset e forward-single-char forward-word backward-char | |||
bind -s --preset E forward-bigword backward-char | |||
# OS X SnowLeopard doesn't have these keys. Don't show an annoying error message. | |||
# Vi/Vim doesn't support these keys in insert mode but that seems silly so we do so anyway. | |||
bind -s --preset -M insert -k home beginning-of-line 2>/dev/null | |||
bind -s --preset -M default -k home beginning-of-line 2>/dev/null | |||
bind -s --preset -M insert -k end end-of-line 2>/dev/null | |||
bind -s --preset -M default -k end end-of-line 2>/dev/null | |||
# Vi moves the cursor back if, after deleting, it is at EOL. | |||
# To emulate that, move forward, then backward, which will be a NOP | |||
# if there is something to move forward to. | |||
bind -s --preset -M default x delete-char forward-single-char backward-char | |||
bind -s --preset -M default X backward-delete-char | |||
bind -s --preset -M insert -k dc delete-char forward-single-char backward-char | |||
bind -s --preset -M default -k dc delete-char forward-single-char backward-char | |||
# Backspace deletes a char in insert mode, but not in normal/default mode. | |||
bind -s --preset -M insert -k backspace backward-delete-char | |||
bind -s --preset -M default -k backspace backward-char | |||
bind -s --preset -M insert \ch backward-delete-char | |||
bind -s --preset -M default \ch backward-char | |||
bind -s --preset -M insert \x7f backward-delete-char | |||
bind -s --preset -M default \x7f backward-char | |||
bind -s --preset -M insert \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete | |||
bind -s --preset -M default \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete | |||
bind -s --preset dd kill-whole-line | |||
bind -s --preset D kill-line | |||
bind -s --preset d\$ kill-line | |||
bind -s --preset d\^ backward-kill-line | |||
bind -s --preset d0 backward-kill-line | |||
bind -s --preset d\u00E9 kill-word | |||
bind -s --preset d\u00C9 kill-bigword | |||
bind -s --preset di\u00E9 forward-single-char forward-single-char backward-word kill-word | |||
bind -s --preset di\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword | |||
bind -s --preset da\u00E9 forward-single-char forward-single-char backward-word kill-word | |||
bind -s --preset da\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword | |||
bind -s --preset de kill-word | |||
bind -s --preset dE kill-bigword | |||
bind -s --preset db backward-kill-word | |||
bind -s --preset dB backward-kill-bigword | |||
bind -s --preset dge backward-kill-word | |||
bind -s --preset dgE backward-kill-bigword | |||
bind -s --preset df begin-selection forward-jump kill-selection end-selection | |||
bind -s --preset dj begin-selection forward-jump backward-char kill-selection end-selection | |||
bind -s --preset dF begin-selection backward-jump kill-selection end-selection | |||
bind -s --preset dJ begin-selection backward-jump forward-single-char kill-selection end-selection | |||
bind -s --preset dc backward-char delete-char | |||
bind -s --preset dr delete-char | |||
bind -s --preset di backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection | |||
bind -s --preset da backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection | |||
bind -s --preset 'd;' begin-selection repeat-jump kill-selection end-selection | |||
bind -s --preset 'd,' begin-selection repeat-jump-reverse kill-selection end-selection | |||
bind -s --preset -m insert k delete-char repaint-mode | |||
bind -s --preset -m insert K kill-whole-line repaint-mode | |||
bind -s --preset -m insert ll kill-whole-line repaint-mode | |||
bind -s --preset -m insert L kill-line repaint-mode | |||
bind -s --preset -m insert l\$ kill-line repaint-mode | |||
bind -s --preset -m insert l\u00E7 kill-line repaint-mode | |||
bind -s --preset -m insert l\^ backward-kill-line repaint-mode | |||
bind -s --preset -m insert l0 backward-kill-line repaint-mode | |||
bind -s --preset -m insert l\u00E8 backward-kill-line repaint-mode | |||
bind -s --preset -m insert l\u00E9 kill-word repaint-mode | |||
bind -s --preset -m insert l\u00C9 kill-bigword repaint-mode | |||
bind -s --preset -m insert li\u00E9 forward-single-char forward-single-char backward-word kill-word repaint-mode | |||
bind -s --preset -m insert li\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword repaint-mode | |||
bind -s --preset -m insert la\u00E9 forward-single-char forward-single-char backward-word kill-word repaint-mode | |||
bind -s --preset -m insert la\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword repaint-mode | |||
bind -s --preset -m insert le kill-word repaint-mode | |||
bind -s --preset -m insert lE kill-bigword repaint-mode | |||
bind -s --preset -m insert lb backward-kill-word repaint-mode | |||
bind -s --preset -m insert lB backward-kill-bigword repaint-mode | |||
bind -s --preset -m insert lge backward-kill-word repaint-mode | |||
bind -s --preset -m insert lgE backward-kill-bigword repaint-mode | |||
bind -s --preset -m insert lf begin-selection forward-jump kill-selection end-selection repaint-mode | |||
bind -s --preset -m insert lj begin-selection forward-jump backward-char kill-selection end-selection repaint-mode | |||
bind -s --preset -m insert lF begin-selection backward-jump kill-selection end-selection repaint-mode | |||
bind -s --preset -m insert lJ begin-selection backward-jump forward-single-char kill-selection end-selection repaint-mode | |||
bind -s --preset -m insert lc backward-char begin-selection kill-selection end-selection repaint-mode | |||
bind -s --preset -m insert lr begin-selection kill-selection end-selection repaint-mode | |||
bind -s --preset -m insert li backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection repaint-mode | |||
bind -s --preset -m insert la backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection repaint-mode | |||
bind -s --preset '~' togglecase-char forward-single-char | |||
bind -s --preset gu downcase-word | |||
bind -s --preset gU upcase-word | |||
bind -s --preset T end-of-line delete-char | |||
bind -s --preset S 'man (commandline -t) 2>/dev/null; or echo -n \a' | |||
bind -s --preset yy kill-whole-line yank | |||
bind -s --preset Y kill-whole-line yank | |||
bind -s --preset y\$ kill-line yank | |||
bind -s --preset y\u00E7 kill-line yank | |||
bind -s --preset y\^ backward-kill-line yank | |||
bind -s --preset y0 backward-kill-line yank | |||
bind -s --preset y\u00E8 backward-kill-line yank | |||
bind -s --preset y\u00E9 kill-word yank | |||
bind -s --preset y\u00C9 kill-bigword yank | |||
bind -s --preset yi\u00E9 forward-single-char forward-single-char backward-word kill-word yank | |||
bind -s --preset yi\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword yank | |||
bind -s --preset ya\u00E9 forward-single-char forward-single-char backward-word kill-word yank | |||
bind -s --preset ya\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword yank | |||
bind -s --preset ye kill-word yank | |||
bind -s --preset yE kill-bigword yank | |||
bind -s --preset yb backward-kill-word yank | |||
bind -s --preset yB backward-kill-bigword yank | |||
bind -s --preset yge backward-kill-word yank | |||
bind -s --preset ygE backward-kill-bigword yank | |||
bind -s --preset yf begin-selection forward-jump kill-selection yank end-selection | |||
bind -s --preset yj begin-selection forward-jump-till kill-selection yank end-selection | |||
bind -s --preset yF begin-selection backward-jump kill-selection yank end-selection | |||
bind -s --preset yJ begin-selection backward-jump-till kill-selection yank end-selection | |||
bind -s --preset yc backward-char begin-selection kill-selection yank end-selection | |||
bind -s --preset yr begin-selection kill-selection yank end-selection | |||
bind -s --preset yi backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection yank end-selection | |||
bind -s --preset ya backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection yank end-selection | |||
bind -s --preset f forward-jump | |||
bind -s --preset F backward-jump | |||
bind -s --preset j forward-jump-till | |||
bind -s --preset J backward-jump-till | |||
bind -s --preset ';' repeat-jump | |||
bind -s --preset , repeat-jump-reverse | |||
# in emacs yank means paste | |||
# in vim p means paste *after* current character, so go forward a char before pasting | |||
# also in vim, P means paste *at* current position (like at '|' with cursor = line), | |||
# \ so there's no need to go back a char, just paste it without moving | |||
bind -s --preset p forward-char yank | |||
bind -s --preset P yank | |||
bind -s --preset gp yank-pop | |||
# same vim 'pasting' note as upper | |||
bind -s --preset '"*p' forward-char "commandline -i ( xsel -p; echo )[1]" | |||
bind -s --preset '"*P' "commandline -i ( xsel -p; echo )[1]" | |||
# | |||
# Lowercase r, enters replace_one mode | |||
# | |||
bind -s --preset -m replace_one h repaint-mode | |||
bind -s --preset -M replace_one -m default '' delete-char self-insert backward-char repaint-mode | |||
bind -s --preset -M replace_one -m default \r 'commandline -f delete-char; commandline -i \n; commandline -f backward-char; commandline -f repaint-mode' | |||
bind -s --preset -M replace_one -m default \e cancel repaint-mode | |||
# | |||
# Uppercase R, enters replace mode | |||
# | |||
bind -s --preset -m replace H repaint-mode | |||
bind -s --preset -M replace '' delete-char self-insert | |||
bind -s --preset -M replace -m insert \r execute repaint-mode | |||
bind -s --preset -M replace -m default \e cancel repaint-mode | |||
# in vim (and maybe in vi), <BS> deletes the changes | |||
# but this binding just move cursor backward, not delete the changes | |||
bind -s --preset -M replace -k backspace backward-char | |||
# | |||
# visual mode | |||
# | |||
bind -s --preset -M visual c backward-char | |||
bind -s --preset -M visual r forward-char | |||
bind -s --preset -M visual s up-line | |||
bind -s --preset -M visual t down-line | |||
bind -s --preset -M visual b backward-word | |||
bind -s --preset -M visual B backward-bigword | |||
bind -s --preset -M visual ge backward-word | |||
bind -s --preset -M visual gE backward-bigword | |||
bind -s --preset -M visual \u00E9 forward-word | |||
bind -s --preset -M visual \u00C9 forward-bigword | |||
bind -s --preset -M visual e forward-word | |||
bind -s --preset -M visual E forward-bigword | |||
bind -s --preset -M visual o swap-selection-start-stop repaint-mode | |||
bind -s --preset -M visual f forward-jump | |||
bind -s --preset -M visual j forward-jump-till | |||
bind -s --preset -M visual F backward-jump | |||
bind -s --preset -M visual J backward-jump-till | |||
for key in $eol_keys | |||
bind -s --preset -M visual $key end-of-line | |||
end | |||
for key in $bol_keys | |||
bind -s --preset -M visual $key beginning-of-line | |||
end | |||
bind -s --preset -M visual -m insert l kill-selection end-selection repaint-mode | |||
bind -s --preset -M visual -m insert k kill-selection end-selection repaint-mode | |||
bind -s --preset -M visual -m default d kill-selection end-selection repaint-mode | |||
bind -s --preset -M visual -m default x kill-selection end-selection repaint-mode | |||
bind -s --preset -M visual -m default X kill-whole-line end-selection repaint-mode | |||
bind -s --preset -M visual -m default y kill-selection yank end-selection repaint-mode | |||
bind -s --preset -M visual -m default '"*y' "fish_clipboard_copy; commandline -f end-selection repaint-mode" | |||
bind -s --preset -M visual -m default '~' togglecase-selection end-selection repaint-mode | |||
bind -s --preset -M visual -m default \cc end-selection repaint-mode | |||
bind -s --preset -M visual -m default \e end-selection repaint-mode | |||
# Make it easy to turn an unexecuted command into a comment in the shell history. Also, remove | |||
# the commenting chars so the command can be further edited then executed. | |||
bind -s --preset -M default \# __fish_toggle_comment_commandline | |||
bind -s --preset -M visual \# __fish_toggle_comment_commandline | |||
bind -s --preset -M replace \# __fish_toggle_comment_commandline | |||
# Set the cursor shape | |||
# After executing once, this will have defined functions listening for the variable. | |||
# Therefore it needs to be before setting fish_bind_mode. | |||
fish_vi_cursor | |||
set fish_bind_mode $init_mode | |||
end | |||
</source> | |||
Il suffit ensuite d’utiliser cette fonction pour définir les raccourcis claviers : {{C|set -U fish_key_bindings fish_vi_bepo_key_bindings}}. | |||
Sous X, il est parfois possible détecter si votre disposition préférée est en place (pour ceux qui ne peuvent ou ne veulent s’en servir systématiquement). Il suffit d’enfermer les {{C|bindkey}} dans un bloc {{C|if}} : | |||
<source lang="bash"> | |||
if [[ $DISPLAY != '' && `setxkbmap -print|grep bepo` != '' ]]; then | |||
... | |||
fi | |||
</source> | |||
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. | 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. | ||
* [http://vifm.sourceforge.net/ vifm] : très bon explorateur de fichiers, en pleine phase de développement. | * [http://vifm.sourceforge.net/ vifm] : très bon explorateur de fichiers, en pleine phase de développement. | ||
* [http://cmus.sourceforge.net/ cmus] : lecteur audio. Le site officiel précise qu'il supporte des ''dynamic keybindings'', | * [http://cmus.sourceforge.net/ cmus] : lecteur audio. Le site officiel précise qu'il supporte des ''dynamic keybindings'', ([[cmus|adaptation à bépo]]). | ||
* [http://www.brain-dump.org/projects/dvtm/ dvtm] : permet de scinder n’importe quel émulateur de terminal à la manière d’un gestionnaire de fenêtres en mosaïque. | * [http://www.brain-dump.org/projects/dvtm/ dvtm] : permet de scinder n’importe quel émulateur de terminal à la manière d’un gestionnaire de fenêtres en mosaïque. Il est particulièrement utile en conjonction avec Vim, mais il faut le recompiler pour changer les raccourcis clavier. | ||
=== Lecteurs PDF === | |||
Certains lecteurs PDF s’utilisent avec des raccourcis « vim-like » : | |||
* [http://pwmt.org/projects/zathura/ Zathura] est un lecteur PDF en apparence léger mais utilisant des bibliothèques lourdes en réalité ce qui n’ôte rien à ses qualités. Pour l’utiliser avec BÉPO il nécessite [[zathura|quelques configurations]]. | |||
* [[wp:evince|Evince]] est le lecteur PDF du projet GNOME, il dispose de quelques fonctionnalités vim-like, reste à savoir comment le « bépoïfier ». | |||
=== Visionneuse d'image Sxiv=== | |||
[https://github.com/muennich/sxiv Sxiv] est une visionneuse d'image très légère écrite en C pour Linux. Il devrait pouvoir être porté sous Windows grâce à Cigwin. | |||
Pour remaper le comportement des touches pour le standard bépo, j'ai effectué les modifications situées [https://github.com/juanes852/sxiv/commit/1c215fc2fc9c3fad53b96090bc5b51d9471ec2ad#diff-8e8a980a4e65c27ae04be23634db05fb à ce lien]. J'ai remapé les touches h j k l --> c t s r et r --> k et s --> h. La page générale du fork se situe à [https://github.com/juanes10/sxiv ce lien]. | |||
Sxiv est présente dans le dépot Community d'Archilnux, et semble également disponible pour Ubuntu. | |||
Voir aussi [https://wiki.archlinux.org/index.php/Sxiv la page d'aide d'Archlinux], taper « man sxiv » dans le terminal pour plus de détails. | |||
Pour installer cette version remappée pour bépo de Sxiv : | |||
* git clone https://github.com/juanes10/sxiv && cd sxiv | |||
* make | |||
* sudo make install | |||
=== Gestionnaires de fenêtres en mosaïque === | === Gestionnaires de fenêtres en mosaïque === | ||
Ligne 516 : | Ligne 1 048 : | ||
Ces gestionnaires de fenêtres sont des alternatives intéressantes pour ceux qui cherchent à se passer complètement de la souris. Ils sont conçus exclusivement pour la productivité : pas de décorations de fenêtre, les fenêtres sont placées automatiquement par le gestionnaire pour occuper tout l'espace disponible : typiquement, une fenêtre « maître » qui occupe une large colonne de l'écran, et toutes les autres fenêtres « auxiliaires » qui se partagent l'espace restant. Le lancement des applications et les manipulations de fenêtres (sélection, déplacement, passage d'une fenêtre auxiliaire en maître) se font entièrement au clavier. | Ces gestionnaires de fenêtres sont des alternatives intéressantes pour ceux qui cherchent à se passer complètement de la souris. Ils sont conçus exclusivement pour la productivité : pas de décorations de fenêtre, les fenêtres sont placées automatiquement par le gestionnaire pour occuper tout l'espace disponible : typiquement, une fenêtre « maître » qui occupe une large colonne de l'écran, et toutes les autres fenêtres « auxiliaires » qui se partagent l'espace restant. Le lancement des applications et les manipulations de fenêtres (sélection, déplacement, passage d'une fenêtre auxiliaire en maître) se font entièrement au clavier. | ||
On peut citer [ | On peut citer [http://fr.wikipedia.org/wiki/Ion_(logiciel) Ion] (le plus connu) et [http://fr.wikipedia.org/wiki/Ratpoison Ratpoison]/[http://www.nongnu.org/stumpwm/ 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 de type [Mod]+[HJKL] pour les manipulations de fenêtres, et s'intègrent très bien dans un environnement « vimiste ». | ||
; [ | ; [http://fr.wikipedia.org/wiki/Wmii wmii] | ||
wmii est le plus facile à prendre en main. 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, et, plus prosaïquement, de repérer très facilement la fenêtre active. C'est aussi le seul à ne pas utiliser le concept de zones maître/auxiliaire : il est possible de créer autant de colonnes que souhaité, par contre leur redimensionnement requiert la souris. Ainsi, l'utilisation de logiciels comportant de nombreuses fenêtres (ex : GIMP) ne pose aucun problème, même en mode mosaïque. Il intègre un excellent lanceur d'applications, [http://en.wikipedia.org/wiki/Dmenu dmenu] (activé avec Alt+P). | wmii est le plus facile à prendre en main. 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, et, plus prosaïquement, de repérer très facilement la fenêtre active. C'est aussi le seul à ne pas utiliser le concept de zones maître/auxiliaire : il est possible de créer autant de colonnes que souhaité, par contre leur redimensionnement requiert la souris. Ainsi, l'utilisation de logiciels comportant de nombreuses fenêtres (ex : GIMP) ne pose aucun problème, même en mode mosaïque. Il intègre un excellent lanceur d'applications, [http://en.wikipedia.org/wiki/Dmenu dmenu] (activé avec Alt+P). | ||
Ligne 526 : | Ligne 1 058 : | ||
dwm est le petit frère de wmii : les deux projets sont développés en parallèle par le même auteur. dwm partage certains outils avec wmii, dont dmenu. Toutefois, les deux projets sont assez différents, dwm étant encore plus minimaliste : aucune décoration de fenêtre, la mise en page est limitée à deux colonnes (une zone « maître » et une zone auxiliaire), aucun langage de script, aucun fichier de configuration. Le code source est ainsi encore plus robuste et compact (limité à 2 000 lignes, contre 10 000 pour wmii). | dwm est le petit frère de wmii : les deux projets sont développés en parallèle par le même auteur. dwm partage certains outils avec wmii, dont dmenu. Toutefois, les deux projets sont assez différents, dwm étant encore plus minimaliste : aucune décoration de fenêtre, la mise en page est limitée à deux colonnes (une zone « maître » et une zone auxiliaire), aucun langage de script, aucun fichier de configuration. Le code source est ainsi encore plus robuste et compact (limité à 2 000 lignes, contre 10 000 pour wmii). | ||
dwm doit être recompilé pour toute modification de configuration, tous les paramètres étant dans le fichier {{C|config.h}} — voir [http://www.xsnake.net/howto/dwm/dwm-eng.php ce tutoriel]. | dwm doit être recompilé pour toute modification de configuration, tous les paramètres étant dans le fichier {{C|config.h}} — voir [http://www.xsnake.net/howto/dwm/dwm-eng.php ce tutoriel]. Plus d'informations sur la page [[dwm|dwm]] du wiki pour faciliter son usage avec la disposition BÉPO. | ||
; [ | ; [http://fr.wikipedia.org/wiki/Awesome_(logiciel) Awesome] | ||
Awesome est un fork de dwm, et lui reste très proche dans l'esprit : même système de vues, même mise en page sur deux colonnes maître / auxiliaire. Il est plus complet que dwm, scriptable en Lua et configurable via un fichier externe. Il ne dispose pas encore d'un équivalent de dmenu (c'est prévu pour la version 3) : pour l'instant (version 2.3.1), il faut se [http://awesome.naquadah.org/wiki/Awesome-menu_2.x/fr créer un menu d'applications] soi-même, et lancer les autres applications depuis un terminal. | Awesome est un fork de dwm, et lui reste très proche dans l'esprit : même système de vues, même mise en page sur deux colonnes maître / auxiliaire. Il est plus complet que dwm, scriptable en Lua et configurable via un fichier externe. Il ne dispose pas encore d'un équivalent de dmenu (c'est prévu pour la version 3) : pour l'instant (version 2.3.1), il faut se [http://awesome.naquadah.org/wiki/Awesome-menu_2.x/fr créer un menu d'applications] soi-même, et lancer les autres applications depuis un terminal. | ||
Awesome est [http://awesome.naquadah.org/wiki/Awesomerc_2.x/fr configurable] via le fichier {{C|~/.awesomerc}}. Contrairement à wmii et dwm, Awesome est prévu pour fonctionner avec des dispositions de clavier ayant les chiffres en accès direct (sélection / changement de vue), il reconfigurer les touches [1234567890] pour le bépo. | Awesome est [http://awesome.naquadah.org/wiki/Awesomerc_2.x/fr configurable] via le fichier {{C|~/.awesomerc}}. Contrairement à wmii et dwm, Awesome est prévu pour fonctionner avec des dispositions de clavier ayant les chiffres en accès direct (sélection / changement de vue), il faut donc reconfigurer les touches [1234567890] pour le bépo. | ||
[[Awesome|Plus de détails pour la version 3.x]] | [[Awesome|Plus de détails pour la version 3.x]] | ||
; [http://xmonad.org/ Xmonad] | ; [http://xmonad.org/ Xmonad] | ||
Xmonad utilise dmenu et reprend le principe des deux zones maître / auxiliaire de dwm, mais il est beaucoup plus complet : les manipulations de fenêtres ne sont pas limitées à un système de colonnes, et on peut même libérer une partie de l'écran pour inclure un ''panel'' type KDE, Gnome ou Xfce4. De plus, Xmonad est très modulaire et dispose déjà de nombreuses extensions. C'est un projet | Xmonad utilise dmenu et reprend le principe des deux zones maître / auxiliaire de dwm, mais il est beaucoup plus complet : les manipulations de fenêtres ne sont pas limitées à un système de colonnes, et on peut même libérer une partie de l'écran pour inclure un ''panel'' type KDE, Gnome ou Xfce4. De plus, Xmonad est très modulaire et dispose déjà de nombreuses extensions. C'est un projet relativement récent (première ''release'' en avril 2007), écrit dans le langage fonctionnel Haskell. Voir [http://bepo.pastebin.com/m4e84f50e cet extrait] de la configuration de Gaëtan ''(à peaufiner)''. | ||
[[Catégorie:Logiciels]] | |||
[[Catégorie: |
Dernière version du 8 juin 2024 à 17:46
Vim est un éditeur de texte ergonomique, libre et disponible sous de nombreux systèmes d'exploitation. Cette page tente de regrouper le maximum d'informations relatives à son utilisation avec la disposition bépo.
Ergonomie
Pourquoi utiliser Vim ?
D'un point de vue ergonomique, Vim a été optimisé pour la prévention des troubles musculosquelettiques :
- il n'utilise que très peu de raccourcis : plutôt que de recourir à des touches modificatrices (Ctrl, Alt ou la touche Meta), il utilise plusieurs « modes » de fonctionnement (quatre modes : normal, insertion, visualisation et commande), ce qui permet d'utiliser toutes les commandes en position « dactylo », c'est-à-dire avec les doigts proches de la position de repos, prêt à taper du texte à tout instant ;
- les déplacements du curseur peuvent (devraient, à terme) se faire sans utiliser les flèches du clavier ou la souris : clavier azertyH clavier azertyJ clavier azertyK clavier azertyL déplacent le curseur case par case, clavier azertyW clavier azertyE clavier azertyB déplacent le curseur mot à mot (équivalent à clavier bépoCtrl+clavier bépoflèche). Les mains restent ainsi en position dactylo pour toutes les manipulations de texte, y compris les déplacements.
L'utilisation des différents modes de Vim permet de se passer complètement de la souris et d'éliminer la plupart des raccourcis contraignants qui brisent la frappe, tout en diminuant les mouvements de main et la quantité de touches pressé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. Toutefois, lorsqu'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. Or, les bases de Vim ne sont pas difficiles à apprendre, notamment parce qu'il existe de bons tutoriels « par l'exemple »… et que vous utilisez la disposition bépo !
Là où le bât blesse, c'est que Vim a été conçu pour un clavier Qwerty (contexte américain) :
- le fait que les touches clavier azertyH clavier azertyJ clavier azertyK clavier azertyL correspondent à clavier bépoC clavier bépoT clavier bépoR clavier bépoS complique singulièrement la vie des bépoïstes, même pour les « Vimistes » convaincus ;
- Vim n'est pas parfaitement utilisable en l'état avec le Bépo, contrairement à l'Azerty ou même le Dvorak-US, essentiellement parce que les touches clavier bépoJ et clavier bépoK ne sont pas côte-à-côte.
Il convient donc de configurer Vim pour l'utiliser en Bépo – c'est l'objectif de cette page.
Tutoriels et ressources Vim
L'installation de Vim donne accès à un tutoriel spécialement étudié pour les débutants (mais qui fait une très bonne doc de rappel pour les moins débutants). Il est accessible en français par la commande
vimtutor fr
Le principe est le suivant : un fichier texte est ouvert dans Vim et présente les bases de Vim. Vous êtes invité à modifier sur place ce fichier, c'est-à-dire à tester les commandes et les exemples décrits dans le fichier. Comme le fichier modifié est en réalité une copie du tutorial, vous pouvez à tout moment relancer vimtutor
pour repartir sur une version propre, si vous en arrivez à faire n'importe quoi ou à bloquer dans un mode !
- Les essentiels :
- En plus :
Reconfiguration partielle des touches
On ne cherche ici qu'à implémenter le déplacement en clavier azertyH clavier azertyJ clavier azertyK clavier azertyL avec le moins d'impact possible sur le reste des commandes Vim.
Principe
- clavier bépoC clavier bépoT clavier bépoS clavier bépoR remplacent clavier azertyH clavier azertyJ clavier azertyK clavier azertyL pour les touches de direction ;
- réciproquement :
- clavier bépoH remplace clavier azertyR (remplacer)
- clavier bépoJ remplace clavier azertyT (jusqu'à)
- clavier bépoK remplace clavier azertyS (substitue)
- clavier bépoL remplace clavier azertyC (modification de texte), juste à coté de clavier bépoD (couper)
- clavier bépoÉ remplace clavier azertyW (mot suivant), le clavier bépoW étant beaucoup trop loin en bépo ;
- clavier bépoW est utilisé comme clavier bépoCtrl+clavier bépoW pour faciliter les manipulations de fenêtre.
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: on remplace les text objects aw, aW, iw et iW
" pour effacer/remplacer un mot quand on n’est pas au début (daé / laé).
onoremap aé aw
onoremap aÉ aW
onoremap ié iw
onoremap iÉ iW
" 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
" Corollaire : repli suivant / précédent
noremap zs zj
noremap zt zk
" {HJKL} <- [CTSR]
" ————————————————
" {J} = « Jusqu'à » (j = suivant, J = précédant)
noremap j t
noremap J T
" {L} = « Change » (l = attend un mvt, L = jusqu'à la fin de ligne)
noremap l c
noremap L C
" {H} = « Remplace » (h = un caractère slt, H = reste en « Remplace »)
noremap h r
noremap H R
" {K} = « Substitue » (k = caractère, K = ligne)
noremap k s
noremap K S
" Corollaire : correction orthographique
noremap ]k ]s
noremap [k [s
" Désambiguation de {g}
" —————————————————————
" ligne écran précédente / suivante (à l'intérieur d'une phrase)
noremap gs gk
noremap gt gj
" onglet précédent / suivant
noremap gb gT
noremap gé gt
" optionnel : {gB} / {gÉ} pour aller au premier / dernier onglet
noremap gB :exe "silent! tabfirst"<CR>
noremap gÉ :exe "silent! tablast"<CR>
" optionnel : {g"} pour aller au début de la ligne écran
noremap g" g0
" <> en direct
" ————————————
noremap « <
noremap » >
" Remaper la gestion des fenêtres
" ———————————————————————————————
noremap wt <C-w>j
noremap ws <C-w>k
noremap wc <C-w>h
noremap wr <C-w>l
noremap wd <C-w>c
noremap wo <C-w>s
noremap wp <C-w>o
noremap w<SPACE> :split<CR>
noremap w<CR> :vsplit<CR>
Si vous souhaitez avoir les chiffres en accès direct en mode normal, remplacez la section « <> en direct » par les lignes suivantes :
" 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 *
Puis ajoutez 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 (problèmes avec la commande :Ex)
Ex est le plugin d'exploration de fichiers de Vim. On le lance avec « :Ex », « :Sex », « :Vex », « :Tex », ou même « :e . » (qui se résume en « :e. » pour les fainéants).
Malheureusement, clavier bépot et clavier bépos ne fonctionnent pas comme « bas/haut » avec cet explorateur, car les mappings d'Ex ne sont pas définis dans ~/.vimrc
. Trois solutions :
- utiliser les flèches plutôt que clavier bépoC clavier bépoT clavier bépoS clavier bépoR avec Ex — voire, au pire, utiliser la souris (sacrilège !)
- utiliser les combinaisons clavier bépoCtrl+clavier bépoN (next) pour bas et clavier bépoCtrl+clavier bépoP (previous) pour haut
- 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, clavier bépoT et clavier bépoS fonctionnent désormais comme bas/haut et clavier bépoK 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é ! (Remarque: si cette méthode ne fonctionne pas, il suffit d'installer le plugin pathogen.)
Solution alternative, trouvée ici: ajouter le code suivant au .vimrc
(ou au .vimrc.bepo
)
if has("autocmd")
augroup netrw_dvorak_fix
autocmd!
autocmd filetype netrw call Fix_netrw_maps_for_dvorak()
augroup END
function! Fix_netrw_maps_for_dvorak()
noremap <buffer> t j
noremap <buffer> s k
noremap <buffer> k s
endfunction
endif
- Avantage de cette méthode: le remappage se trouve dans le
.vimrc
et est plus facilement transportable sur une autre machine - Inconvénient: nécessite que vim soit compilé avec l'option autocmd, ce qui n'est pas toujours le cas…
Remarques
Vimtutor ne tient pas compte du remappage des touches. Pour pouvoir suivre le tutoriel avec les nouvelles touches, il suffit de copier le fichier du tutoriel (son emplacement est indiqué sur la ligne inférieure lors de l'ouverture) dans un autre répertoire (par exemple avec cp /tmp/tutordtBQfU ~/vimtutor
) puis d'ouvrir la copie avec vim: vim vimtutor
. Vous pouvez également vous entraîner sur cette version de vimtutor adaptée à la reconfiguration partielle des touches en BÉPO.
Les touches clavier bépoÊ clavier bépoÈ clavier bépoÀ clavier bépoÇ sont inutilisées par Vim et peuvent donc être affectées librement. Par exemple, on peut faire de clavier bépoÈ 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, les adeptes du guillemet-apostrophe en accès direct peuvent utiliser la touche clavier bépoç à cet effet :
noremap ç '
noremap Ç `
À faire pour la prochaine version (0.6.7) :
- inverser clavier bépoj et clavier bépoh pour regrouper les fonctions de recherche de caractères sur une même ligne ;
- penser à mettre à jour le label de {;/:} ;
- remplacer <> par «» sur les touches clavier bépo2 clavier bépo3 ?
Par ailleurs, on pourrait échanger clavier bépos et clavier bépog de façon à avoir clavier bépog sous la main gauche et pour une meilleure cohérence des raccourcis de Vim : les commandes correspondant à « s » et « r », respectivement clavier bépog et clavier bépoh, se trouveraient alors sous les touches clavier bépoS et clavier bépoR. problématique pour les raccourcis en clavier bépog, nécessite une série de remappages supplémentaires, et conflit avec l'inversion clavier bépoj/clavier bépoh.
Problèmes connus
Avec le greffon « Automatic LaTeX Plugin » (ATP)
En installant le plugin ATP pour LaTeX, le mapping de la touche clavier bépor revient à son réglage normal et il est impossible de forcer son utilisation au mouvement vers la gauche par les configurations ci-dessus.
Pour y remédier, il faut ajouter au fichier .vim/after/ftplugin/tex.vim
, la ligne "noremap <buffer> r l".
Reconfiguration à la demande
Mettre le script suivant dans ~/.vim/plugin/dvorak-toggle
. Avec un minimum d'adaptation, il est possible gérer n'importe quelle disposition.
" Quick Dvorak-layout toggle.
" when toggled, you can use ctsr to move
" when untoggled, ctsr will behave as expected by vim
"
" This code is under BSD licence, and the author doesn't even bother tell his identity.
let s:DvorakToggleState = 0
let s:DvorakToggleOldMap = 0
function! g:DvorakToggle ()
if s:DvorakToggleState
:set langmap=s:DvorakToggleOldMap
let s:DvorakToggleState = 0
else
let g:DvorakToggleOldMap = &langmap
:set langmap=ctsrCTSRhjklHJKL;hjklHJKLctsrCTSR
let s:DvorakToggleState = 1
endif
endfunction
" use à or whatever you want. Make it easy to access though.
nmap à :call g:DvorakToggle()<CR>
Reconfiguration conditionnelle
Il est parfois possible détecter depuis Vim si votre disposition préférée est en place (pour ceux qui ne peuvent ou ne veulent s’en servir systématiquement).
Sous X
if !empty(system("setxkbmap -print|grep bepo"))
source ~/.vimrc.bepo
endif
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 envisager de générer automatiquement un tel fichier 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 (anti-sèches) classiques en l'état !
De plus, comme pour les autres reconfigurations présentées dans cette page, les nombreux caractères supplémentaires accessibles via la combinaison <AltGr> permettent de disposer d’une réserve importante pour mapper des macros personnalisées : æ, ù, €, …
Le plus simple est d’utiliser la fonction langmap, qui permet d’utiliser une disposition de clavier pour la saisie de texte (modes insertion et remplacement), et une autre pour les autres modes (normal, visuel…). Pour plus de détail :
:h langmap
L’exemple suivant contient 2 exceptions à une stricte correspondance Bépo/Qwerty :
• le clavier bépoy n’est pas mappé sur le clavier bépo^ mais sur le clavier bépoç, pour éviter de l’associer à une touche morte nécessitant de répéter deux fois la touche.
• La barre verticale | et la barre oblique inversée \ ne sont pas remappées et restent donc accessibles tels qu’en Bépo, c’est la conséquence du choix précédent.
set langmap=$`,\\"1,«2,»3,(4,)5,@6,+7,-8,/9,*0,=-,%=,bq,éw,pe,or,èt,çy,vu,di,lo,jp,z[,w],aa,us,id,ef,\\,g,ch,tj,sk,rl,n\\;,m',ê<,àz,yx,xc,.v,kb,’n,qm,g\\,,h.,f/,#~,1!,2@,3#,4$,5%,6^,7&,8*,9(,0),°_,`+,BQ,ÉW,PE,OR,ÈT,ÇY,VU,DI,LO,JP,Z{,W},AA,US,ID,EF,\\;G,CH,TJ,SK,RL,N:,M\\",Ê>,ÀZ,YX,XC,:V,KB,?N,QM,G<,H>,F?
Pour les cas où langmap n’est pas supporté, voici un équivalent avec noremap uniquement :
noremap $ `
noremap \" 1
noremap « 2
noremap » 3
noremap ( 4
noremap ) 5
noremap @ 6
noremap + 7
noremap - 8
noremap / 9
noremap * 0
noremap = -
noremap % =
noremap b q
noremap é w
noremap p e
noremap o r
noremap è t
noremap ç y
noremap v u
noremap d i
noremap l o
noremap j p
noremap z [
noremap w ]
noremap a a
noremap u s
noremap i d
noremap e f
noremap , g
noremap c h
noremap t j
noremap s k
noremap r l
noremap n ;
noremap m '
noremap ê <
noremap à z
noremap y x
noremap x c
noremap . v
noremap k b
noremap ’ n
noremap q m
noremap g ,
noremap h .
noremap f /
noremap # ~
noremap 1 !
noremap 2 @
noremap 3 #
noremap 4 $
noremap 5 %
noremap 6 ^
noremap 7 &
noremap 8 *
noremap 9 (
noremap 0 )
noremap ° _
noremap ` +
noremap B Q
noremap É W
noremap P E
noremap O R
noremap È T
noremap Ç Y
noremap V U
noremap D I
noremap L O
noremap J P
noremap Z {
noremap W }
noremap A A
noremap U S
noremap I D
noremap E F
noremap ; G
noremap C H
noremap T J
noremap S K
noremap R L
noremap N :
noremap M "
noremap Ê >
noremap À Z
noremap Y X
noremap X C
noremap : V
noremap K B
noremap ? N
noremap Q M
noremap G <
noremap H >
noremap F ?
Bépo/Azerty
Cette variante permet de se référer aux labels des touches du clavier Azerty pour les commandes Vim.
set langmap=ba,éz,pe,or,èt,çy,vu,di,lo,fp,j^,z$,aq,us,id,ef,\\,g,ch,tj,sk,rl,nm,mù,^*,ê<,àw,yx,xc,.v,kb,’n,q\\,,g\\;,h:,f!,BA,ÉZ,PE,OR,ÈT,ÇY,VU,DI,LO,FP,J¨,Z£,AQ,US,ID,EF,?G,CH,TJ,SK,RL,NM,M%,!*,Ê>,ÀW,YX,XC,:V,KB,\\;N,QG,G.,H/,F§,@œ,_&,"é,«",»',((,)-,+è,-_,*ç,/à,=),%=,$Œ,^°,µ+,#“,{´,}~,<#,>{,[[,]|,±`,¬\,×^,÷@,¯],%}
Autres options utiles
Quelques petites astuces. À 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
Note : cette astuce semble ne pas fonctionner pour certains. Si vous constatez des problèmes, passez-vous en et relancez Vim après chaque modification de ~/.vimrc
que vous voulez tester…
Espaces insécables
Les espaces insécables du Bépo peuvent poser problème, notamment dans des fichiers de code brut (ASCII) où ils génèrent des erreurs. On a deux façons simples de s’en prémunir :
- Colorier les espaces insécables pour mieux les repérer
Ajouter les lignes suivantes après la ligne « syntax on » le cas échéant. Bien entendu, on peut changer la couleur.
" colorise les nbsp
highlight NbSp ctermbg=lightgray guibg=lightred
match NbSp /\%xa0/
- Faire apparaître les insécable avec un autre caractère
Ils apparaitront avec le caractère choisi au bout de la première ligne. Ici le « · »
set listchars=nbsp:·
set list
Autre exemple trouvé sur Gnusquad avec plus de caractères « invisibles » affichés :
set listchars=nbsp:¤,tab:>-,trail:¤,extends:>,precedes:<
set list
- Mapper l’espace insécable en « Escape »
à éviter pour rédiger du texte mais très pratique pour taper du code !
" interdit les nbsp en mode insertion (il y a une espace insécable)
inoremap <Esc>
[Esc] plus accessible
[Esc] sur Tab
Vim fait un grand usage de la touche clavier azertyEscape qui se trouve loin (a priori en haut à gauche). On peut modifier le comportement de clavier bépoTab pour qu’il serve de touche clavier bépoÉchap. On garde un clavier bépoTab en clavier bépoMaj+clavier bépoTab. Attention, à ne pas utiliser dans Vimperator, on y a besoin du Tab direct…
Note : clavier bépoCtrl+clavier bépoC est un alias standard de clavier bépoÉchap, plus central, mais c'est un raccourci à deux touches. À vous de voir si cette combinaison est agréable ou pas sur votre clavier physique.
" 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>
Typematrix
Les possesseurs de clavier TypeMatrix peuvent aussi remapper la touche « desktop » en Esc en suivant les explications présentées sur la page dédiée au TypeMatrix.
xcape
Une alternative, pour les utilisateurs de linux: le programme xcape. Il permet de donner une valeur aux touches modificatrices lorsqu’elles sont tapées seules. Par défaut, la touche clavier bépoShitf Left seule renvoie ainsi clavier bépoÉchap. Pour les utilisateurs de TypeMatrix, donner à clavier bépoAlt la valeur clavier bépoÉchap lorsqu’elle est tapée seule permet d’avoir Escape sous le pouce.
[PgUp] / [PgDn] plus accessibles
Vim utilise par défaut clavier azertyCtrl+clavier azertyB et clavier azertyCtrl+clavier azertyF pour aller à la page précédente ou suivante. Ce n'est déjà pas la panacée en Qwerty, mais en Bépo, c'est l'horreur, car ces deux touches sont à l'exact opposé l'une de l'autre ! Pour y remédier, on peut par exemple utiliser les touches clavier bépoBackSpace et clavier bépoEspace, 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 clavier bépoEntré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(Lien mort).
Hors sujet, mais vraiment belle astuce.
" « v,d » et « v,s » lancent firefox et une recherche (définition ou synonyme) dans le tlfi sur le mot courant
vmap ,d :<C-U>!firefox "http://www.cnrtl.fr/lexicographie/<cword>" >& /dev/null<CR><CR>
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,w » comme ci-dessus mais pour wikipedia
vmap ,w :<C-U>!firefox "http://fr.wikipedia.org/wiki/<cword>" >& /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,o » 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, il faut 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à
- celui de jd est là
- celui de Carnifex est ici, et le .vimrc.bepo là
- celui de Damien Thiriet est là, avec des fichiers annexes d’abbréviations
- celui de Denis S est en partie là
Plugins bépo pour Vim
Le moyen le plus simple de redéfinir les touches dans Vim est d’utiliser un plugin.
- Le plugin de Clemaitre58 permet de passer rapidement d'une configuration BÉPO à une autre configuration et activant ou non le plugin : Voir le dépot github.
- Le plugin vim-bepo est une variante de la reconfiguration partielle. Toutes les touches sont documentées dans l’aide intégrée de Vim ; il prend en charge automatiquement ou explique comment configurer quelques plugins tiers.
« 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.
- Uzbl
Uzbl (prononcez "usable") est un navigateur web qui se pilote entièrement au clavier avec les raccourcis clavier de vim. Fondé sur webkit, uzbl est beaucoup plus léger que vimperator.
- Dwb
dwb est un autre navigateur web supportant des raccourcis vim. Intuitif d'utilisation, la commande Sk (Settings/Keybindings) affiche la liste des actions et leurs raccourcis associés. Les raccourcis peuvent être réattribués à partir de cette page. Malheureusement, le projet n'est plus supporté depuis le 25 octobre 2014. Qutebrowser pourrait arriver comme son successeur.
- 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
Une aide sur l'utilisation bépo de vimperator est disponible sur cette page.
À 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 ou la :help
pour plus d'informations sur la configuration.
Voir également GViMail pour utiliser Vimperator avec Gmail.
pentadactyl est une autre extension firefox très similaire à Vimperator. Avantage notable de pentadactyl sur vimperator: la possibilité de remapper les touches du mode caret. D'après la faq de pentadactyl, The main difference is that Vimperator's most active developers have moved on to Pentadactyl. More qualitative changes may be found in the change log, but essentially add up to what we consider more active and thoughtful development.
- Vimprobable
Vimprobable est un navigateur à part entière qui ressemble fort à Vimperator.
- Chrome / Chromium
Il existe plusieurs extensions visant à émuler les commandes Vim sous Chrome. On peut citer YakShave, Vrome et Vimium. Les deux premières sont assez complexes mais extensivement configurables via un serveur à lancer en tâche de fond — indépendamment de Chrome. La dernière a le mérite de rester simple et de remplir assez bien son office. Voici de quoi lui apprendre à se comporter un peu mieux en bépo (lignes à copier dans la section « Adanced options >> Key mappings » des réglages de l’extension):
map t scrollDown
map s scrollUp
map c scrollLeft
map r scrollRight
map j createTab
map gé nextTab
map gb previousTab
map h reload
À noter : une extension apparue plus récemment, Vichrome, mérite le détour. Elle paraît mieux finie que les précédentes. Si vous souhaitez l’utiliser en bépo, ces lignes sont un bon point de départ (ajoutez-les à la section « Key Mapping » des options de l’extension) :
# bépo
nmap t ScrollDown
nmap s ScrollUp
nmap c ScrollLeft
nmap r ScrollRight
nmap j TabOpenNew
nmap gé TabFocusNext
nmap gb TabFocusPrev
nmap h TabReload
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é ;-)).
Il dispose aussi d'une très bon mode majeur simulant Vim, Evil
- Komodo
Komodo et OpenKomodo disposent nativement d'un mode Vi.
- 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.
- Visual Studio™
ViEmu propose un plugin Vim (non-libre) pour Visual Studio, ainsi que pour Word™ et Outlook™.
- Pida
Pida utilise nativement vim ou bien Emacs.
Lecteur multimédia
- Mpv.
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.
- most : un pager plus puissant encore qui peut être utilisé à la place de less pour les pages de man.
- 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).
- Newsbeuter : Agrégateur de flux de syndication en console fonctionnant comme mutt. Il est possible de redéfinir les binding pour les adapter à bépo.
- ranger : un explorateur de fichier avec interface légère utilisable au clavier. La configuration des raccourcis se fait dans le fichier ~/.config/ranger/rc.conf . Pour créer ce fichier et les autres fichiers de conf utiliser la commande : ranger --copy-config=all
Les plus gravement atteints peuvent utiliser des raccourcis Vi dans le terminal :
- en adaptant au bépo 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
- en utilisant fish, qui possède un mode vi ; on peut modifier ce mode pour l’adapter au bépo en créant le fichier
~/.config/fish/functions/fish_vi_bepo_key_bindings.fish
:
function fish_vi_bepo_key_bindings --description 'bepo vi-like key bindings for fish'
if contains -- -h $argv
or contains -- --help $argv
echo "Sorry but this function doesn't support -h or --help"
return 1
end
# Erase all bindings if not explicitly requested otherwise to
# allow for hybrid bindings.
# This needs to be checked here because if we are called again
# via the variable handler the argument will be gone.
set -l rebind true
if test "$argv[1]" = --no-erase
set rebind false
set -e argv[1]
else
bind --erase --all --preset # clear earlier bindings, if any
end
# Allow just calling this function to correctly set the bindings.
# Because it's a rather discoverable name, users will execute it
# and without this would then have subtly broken bindings.
if test "$fish_key_bindings" != fish_vi_key_bindings
and test "$rebind" = true
# Allow the user to set the variable universally.
set -q fish_key_bindings
or set -g fish_key_bindings
# This triggers the handler, which calls us again and ensures the user_key_bindings
# are executed.
set fish_key_bindings fish_vi_key_bindings
return
end
set -l init_mode insert
# These are only the special vi-style keys
# not end/home, we share those.
set -l eol_keys \$ g\$ \u00E7 # $ g$ ç
set -l bol_keys \^ 0 g\^ \u00E8 # ^ 0 g^ è
if contains -- $argv[1] insert default visual
set init_mode $argv[1]
else if set -q argv[1]
# We should still go on so the bindings still get set.
echo "Unknown argument $argv" >&2
end
# Inherit shared key bindings.
# Do this first so vi-bindings win over default.
for mode in insert default visual
__fish_shared_key_bindings -s -M $mode
end
bind -s --preset -M insert \r execute
bind -s --preset -M insert \n execute
bind -s --preset -M insert "" self-insert
# Space and other command terminators expand abbrs _and_ inserts itself.
bind -s --preset -M insert " " self-insert expand-abbr
bind -s --preset -M insert ";" self-insert expand-abbr
bind -s --preset -M insert "|" self-insert expand-abbr
bind -s --preset -M insert "&" self-insert expand-abbr
bind -s --preset -M insert "^" self-insert expand-abbr
bind -s --preset -M insert ">" self-insert expand-abbr
bind -s --preset -M insert "<" self-insert expand-abbr
# Closing a command substitution expands abbreviations
bind -s --preset -M insert ")" self-insert expand-abbr
# Ctrl-space inserts space without expanding abbrs
bind -s --preset -M insert -k nul 'commandline -i " "'
# Add a way to switch from insert to normal (command) mode.
# Note if we are paging, we want to stay in insert mode
# See #2871
bind -s --preset -M insert \e "if commandline -P; commandline -f cancel; else; set fish_bind_mode default; commandline -f backward-char repaint-mode; end"
# Default (command) mode
bind -s --preset :q exit
bind -s --preset -m insert \cc cancel-commandline repaint-mode
bind -s --preset -M default c backward-char
bind -s --preset -M default r forward-char
bind -s --preset -m insert \n execute
bind -s --preset -m insert \r execute
bind -s --preset -m insert o insert-line-under repaint-mode
bind -s --preset -m insert O insert-line-over repaint-mode
bind -s --preset -m insert i repaint-mode
bind -s --preset -m insert I beginning-of-line repaint-mode
bind -s --preset -m insert a forward-single-char repaint-mode
bind -s --preset -m insert A end-of-line repaint-mode
bind -s --preset -m visual v begin-selection repaint-mode
#bind -s --preset -m insert o "commandline -a \n" down-line repaint-mode
#bind -s --preset -m insert O beginning-of-line "commandline -i \n" up-line repaint-mode # doesn't work
bind -s --preset gg beginning-of-buffer
bind -s --preset G end-of-buffer
for key in $eol_keys
bind -s --preset $key end-of-line
end
for key in $bol_keys
bind -s --preset $key beginning-of-line
end
bind -s --preset u undo
bind -s --preset \cr redo
bind -s --preset [ history-token-search-backward
bind -s --preset ] history-token-search-forward
bind -s --preset s up-or-search
bind -s --preset t down-or-search
bind -s --preset b backward-word
bind -s --preset B backward-bigword
bind -s --preset ge backward-word
bind -s --preset gE backward-bigword
bind -s --preset \u00E9 forward-word forward-single-char
bind -s --preset \u00C9 forward-bigword forward-single-char
bind -s --preset e forward-single-char forward-word backward-char
bind -s --preset E forward-bigword backward-char
# OS X SnowLeopard doesn't have these keys. Don't show an annoying error message.
# Vi/Vim doesn't support these keys in insert mode but that seems silly so we do so anyway.
bind -s --preset -M insert -k home beginning-of-line 2>/dev/null
bind -s --preset -M default -k home beginning-of-line 2>/dev/null
bind -s --preset -M insert -k end end-of-line 2>/dev/null
bind -s --preset -M default -k end end-of-line 2>/dev/null
# Vi moves the cursor back if, after deleting, it is at EOL.
# To emulate that, move forward, then backward, which will be a NOP
# if there is something to move forward to.
bind -s --preset -M default x delete-char forward-single-char backward-char
bind -s --preset -M default X backward-delete-char
bind -s --preset -M insert -k dc delete-char forward-single-char backward-char
bind -s --preset -M default -k dc delete-char forward-single-char backward-char
# Backspace deletes a char in insert mode, but not in normal/default mode.
bind -s --preset -M insert -k backspace backward-delete-char
bind -s --preset -M default -k backspace backward-char
bind -s --preset -M insert \ch backward-delete-char
bind -s --preset -M default \ch backward-char
bind -s --preset -M insert \x7f backward-delete-char
bind -s --preset -M default \x7f backward-char
bind -s --preset -M insert \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete
bind -s --preset -M default \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete
bind -s --preset dd kill-whole-line
bind -s --preset D kill-line
bind -s --preset d\$ kill-line
bind -s --preset d\^ backward-kill-line
bind -s --preset d0 backward-kill-line
bind -s --preset d\u00E9 kill-word
bind -s --preset d\u00C9 kill-bigword
bind -s --preset di\u00E9 forward-single-char forward-single-char backward-word kill-word
bind -s --preset di\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword
bind -s --preset da\u00E9 forward-single-char forward-single-char backward-word kill-word
bind -s --preset da\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword
bind -s --preset de kill-word
bind -s --preset dE kill-bigword
bind -s --preset db backward-kill-word
bind -s --preset dB backward-kill-bigword
bind -s --preset dge backward-kill-word
bind -s --preset dgE backward-kill-bigword
bind -s --preset df begin-selection forward-jump kill-selection end-selection
bind -s --preset dj begin-selection forward-jump backward-char kill-selection end-selection
bind -s --preset dF begin-selection backward-jump kill-selection end-selection
bind -s --preset dJ begin-selection backward-jump forward-single-char kill-selection end-selection
bind -s --preset dc backward-char delete-char
bind -s --preset dr delete-char
bind -s --preset di backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection
bind -s --preset da backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection
bind -s --preset 'd;' begin-selection repeat-jump kill-selection end-selection
bind -s --preset 'd,' begin-selection repeat-jump-reverse kill-selection end-selection
bind -s --preset -m insert k delete-char repaint-mode
bind -s --preset -m insert K kill-whole-line repaint-mode
bind -s --preset -m insert ll kill-whole-line repaint-mode
bind -s --preset -m insert L kill-line repaint-mode
bind -s --preset -m insert l\$ kill-line repaint-mode
bind -s --preset -m insert l\u00E7 kill-line repaint-mode
bind -s --preset -m insert l\^ backward-kill-line repaint-mode
bind -s --preset -m insert l0 backward-kill-line repaint-mode
bind -s --preset -m insert l\u00E8 backward-kill-line repaint-mode
bind -s --preset -m insert l\u00E9 kill-word repaint-mode
bind -s --preset -m insert l\u00C9 kill-bigword repaint-mode
bind -s --preset -m insert li\u00E9 forward-single-char forward-single-char backward-word kill-word repaint-mode
bind -s --preset -m insert li\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword repaint-mode
bind -s --preset -m insert la\u00E9 forward-single-char forward-single-char backward-word kill-word repaint-mode
bind -s --preset -m insert la\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword repaint-mode
bind -s --preset -m insert le kill-word repaint-mode
bind -s --preset -m insert lE kill-bigword repaint-mode
bind -s --preset -m insert lb backward-kill-word repaint-mode
bind -s --preset -m insert lB backward-kill-bigword repaint-mode
bind -s --preset -m insert lge backward-kill-word repaint-mode
bind -s --preset -m insert lgE backward-kill-bigword repaint-mode
bind -s --preset -m insert lf begin-selection forward-jump kill-selection end-selection repaint-mode
bind -s --preset -m insert lj begin-selection forward-jump backward-char kill-selection end-selection repaint-mode
bind -s --preset -m insert lF begin-selection backward-jump kill-selection end-selection repaint-mode
bind -s --preset -m insert lJ begin-selection backward-jump forward-single-char kill-selection end-selection repaint-mode
bind -s --preset -m insert lc backward-char begin-selection kill-selection end-selection repaint-mode
bind -s --preset -m insert lr begin-selection kill-selection end-selection repaint-mode
bind -s --preset -m insert li backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection repaint-mode
bind -s --preset -m insert la backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection repaint-mode
bind -s --preset '~' togglecase-char forward-single-char
bind -s --preset gu downcase-word
bind -s --preset gU upcase-word
bind -s --preset T end-of-line delete-char
bind -s --preset S 'man (commandline -t) 2>/dev/null; or echo -n \a'
bind -s --preset yy kill-whole-line yank
bind -s --preset Y kill-whole-line yank
bind -s --preset y\$ kill-line yank
bind -s --preset y\u00E7 kill-line yank
bind -s --preset y\^ backward-kill-line yank
bind -s --preset y0 backward-kill-line yank
bind -s --preset y\u00E8 backward-kill-line yank
bind -s --preset y\u00E9 kill-word yank
bind -s --preset y\u00C9 kill-bigword yank
bind -s --preset yi\u00E9 forward-single-char forward-single-char backward-word kill-word yank
bind -s --preset yi\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword yank
bind -s --preset ya\u00E9 forward-single-char forward-single-char backward-word kill-word yank
bind -s --preset ya\u00C9 forward-single-char forward-single-char backward-bigword kill-bigword yank
bind -s --preset ye kill-word yank
bind -s --preset yE kill-bigword yank
bind -s --preset yb backward-kill-word yank
bind -s --preset yB backward-kill-bigword yank
bind -s --preset yge backward-kill-word yank
bind -s --preset ygE backward-kill-bigword yank
bind -s --preset yf begin-selection forward-jump kill-selection yank end-selection
bind -s --preset yj begin-selection forward-jump-till kill-selection yank end-selection
bind -s --preset yF begin-selection backward-jump kill-selection yank end-selection
bind -s --preset yJ begin-selection backward-jump-till kill-selection yank end-selection
bind -s --preset yc backward-char begin-selection kill-selection yank end-selection
bind -s --preset yr begin-selection kill-selection yank end-selection
bind -s --preset yi backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection yank end-selection
bind -s --preset ya backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection yank end-selection
bind -s --preset f forward-jump
bind -s --preset F backward-jump
bind -s --preset j forward-jump-till
bind -s --preset J backward-jump-till
bind -s --preset ';' repeat-jump
bind -s --preset , repeat-jump-reverse
# in emacs yank means paste
# in vim p means paste *after* current character, so go forward a char before pasting
# also in vim, P means paste *at* current position (like at '|' with cursor = line),
# \ so there's no need to go back a char, just paste it without moving
bind -s --preset p forward-char yank
bind -s --preset P yank
bind -s --preset gp yank-pop
# same vim 'pasting' note as upper
bind -s --preset '"*p' forward-char "commandline -i ( xsel -p; echo )[1]"
bind -s --preset '"*P' "commandline -i ( xsel -p; echo )[1]"
#
# Lowercase r, enters replace_one mode
#
bind -s --preset -m replace_one h repaint-mode
bind -s --preset -M replace_one -m default '' delete-char self-insert backward-char repaint-mode
bind -s --preset -M replace_one -m default \r 'commandline -f delete-char; commandline -i \n; commandline -f backward-char; commandline -f repaint-mode'
bind -s --preset -M replace_one -m default \e cancel repaint-mode
#
# Uppercase R, enters replace mode
#
bind -s --preset -m replace H repaint-mode
bind -s --preset -M replace '' delete-char self-insert
bind -s --preset -M replace -m insert \r execute repaint-mode
bind -s --preset -M replace -m default \e cancel repaint-mode
# in vim (and maybe in vi), <BS> deletes the changes
# but this binding just move cursor backward, not delete the changes
bind -s --preset -M replace -k backspace backward-char
#
# visual mode
#
bind -s --preset -M visual c backward-char
bind -s --preset -M visual r forward-char
bind -s --preset -M visual s up-line
bind -s --preset -M visual t down-line
bind -s --preset -M visual b backward-word
bind -s --preset -M visual B backward-bigword
bind -s --preset -M visual ge backward-word
bind -s --preset -M visual gE backward-bigword
bind -s --preset -M visual \u00E9 forward-word
bind -s --preset -M visual \u00C9 forward-bigword
bind -s --preset -M visual e forward-word
bind -s --preset -M visual E forward-bigword
bind -s --preset -M visual o swap-selection-start-stop repaint-mode
bind -s --preset -M visual f forward-jump
bind -s --preset -M visual j forward-jump-till
bind -s --preset -M visual F backward-jump
bind -s --preset -M visual J backward-jump-till
for key in $eol_keys
bind -s --preset -M visual $key end-of-line
end
for key in $bol_keys
bind -s --preset -M visual $key beginning-of-line
end
bind -s --preset -M visual -m insert l kill-selection end-selection repaint-mode
bind -s --preset -M visual -m insert k kill-selection end-selection repaint-mode
bind -s --preset -M visual -m default d kill-selection end-selection repaint-mode
bind -s --preset -M visual -m default x kill-selection end-selection repaint-mode
bind -s --preset -M visual -m default X kill-whole-line end-selection repaint-mode
bind -s --preset -M visual -m default y kill-selection yank end-selection repaint-mode
bind -s --preset -M visual -m default '"*y' "fish_clipboard_copy; commandline -f end-selection repaint-mode"
bind -s --preset -M visual -m default '~' togglecase-selection end-selection repaint-mode
bind -s --preset -M visual -m default \cc end-selection repaint-mode
bind -s --preset -M visual -m default \e end-selection repaint-mode
# Make it easy to turn an unexecuted command into a comment in the shell history. Also, remove
# the commenting chars so the command can be further edited then executed.
bind -s --preset -M default \# __fish_toggle_comment_commandline
bind -s --preset -M visual \# __fish_toggle_comment_commandline
bind -s --preset -M replace \# __fish_toggle_comment_commandline
# Set the cursor shape
# After executing once, this will have defined functions listening for the variable.
# Therefore it needs to be before setting fish_bind_mode.
fish_vi_cursor
set fish_bind_mode $init_mode
end
Il suffit ensuite d’utiliser cette fonction pour définir les raccourcis claviers : set -U fish_key_bindings fish_vi_bepo_key_bindings
.
Sous X, il est parfois possible détecter si votre disposition préférée est en place (pour ceux qui ne peuvent ou ne veulent s’en servir systématiquement). Il suffit d’enfermer les bindkey
dans un bloc if
:
if [[ $DISPLAY != '' && `setxkbmap -print|grep bepo` != '' ]]; then
...
fi
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, (adaptation à bépo).
- dvtm : permet de scinder n’importe quel émulateur de terminal à la manière d’un gestionnaire de fenêtres en mosaïque. Il est particulièrement utile en conjonction avec Vim, mais il faut le recompiler pour changer les raccourcis clavier.
Lecteurs PDF
Certains lecteurs PDF s’utilisent avec des raccourcis « vim-like » :
- Zathura est un lecteur PDF en apparence léger mais utilisant des bibliothèques lourdes en réalité ce qui n’ôte rien à ses qualités. Pour l’utiliser avec BÉPO il nécessite quelques configurations.
- Evince est le lecteur PDF du projet GNOME, il dispose de quelques fonctionnalités vim-like, reste à savoir comment le « bépoïfier ».
Visionneuse d'image Sxiv
Sxiv est une visionneuse d'image très légère écrite en C pour Linux. Il devrait pouvoir être porté sous Windows grâce à Cigwin.
Pour remaper le comportement des touches pour le standard bépo, j'ai effectué les modifications situées à ce lien. J'ai remapé les touches h j k l --> c t s r et r --> k et s --> h. La page générale du fork se situe à ce lien.
Sxiv est présente dans le dépot Community d'Archilnux, et semble également disponible pour Ubuntu.
Voir aussi la page d'aide d'Archlinux, taper « man sxiv » dans le terminal pour plus de détails.
Pour installer cette version remappée pour bépo de Sxiv :
- git clone https://github.com/juanes10/sxiv && cd sxiv
- make
- sudo make install
Gestionnaires de fenêtres en mosaïque
Ces gestionnaires de fenêtres sont des alternatives intéressantes pour ceux qui cherchent à se passer complètement de la souris. Ils sont conçus exclusivement pour la productivité : pas de décorations de fenêtre, les fenêtres sont placées automatiquement par le gestionnaire pour occuper tout l'espace disponible : typiquement, une fenêtre « maître » qui occupe une large colonne de l'écran, et toutes les autres fenêtres « auxiliaires » qui se partagent l'espace restant. Le lancement des applications et les manipulations de fenêtres (sélection, déplacement, passage d'une fenêtre auxiliaire en maître) se font entièrement au clavier.
On peut citer Ion (le plus connu) et Ratpoison/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 de type [Mod]+[HJKL] pour les manipulations de fenêtres, et s'intègrent très bien dans un environnement « vimiste ».
wmii est le plus facile à prendre en main. 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, et, plus prosaïquement, de repérer très facilement la fenêtre active. C'est aussi le seul à ne pas utiliser le concept de zones maître/auxiliaire : il est possible de créer autant de colonnes que souhaité, par contre leur redimensionnement requiert la souris. Ainsi, l'utilisation de logiciels comportant de nombreuses fenêtres (ex : GIMP) ne pose aucun problème, même en mode mosaïque. Il intègre un excellent lanceur d'applications, dmenu (activé avec Alt+P).
Il est aisément configurable via le fichier wmiirc
.
dwm est le petit frère de wmii : les deux projets sont développés en parallèle par le même auteur. dwm partage certains outils avec wmii, dont dmenu. Toutefois, les deux projets sont assez différents, dwm étant encore plus minimaliste : aucune décoration de fenêtre, la mise en page est limitée à deux colonnes (une zone « maître » et une zone auxiliaire), aucun langage de script, aucun fichier de configuration. Le code source est ainsi encore plus robuste et compact (limité à 2 000 lignes, contre 10 000 pour wmii).
dwm doit être recompilé pour toute modification de configuration, tous les paramètres étant dans le fichier config.h
— voir ce tutoriel. Plus d'informations sur la page dwm du wiki pour faciliter son usage avec la disposition BÉPO.
Awesome est un fork de dwm, et lui reste très proche dans l'esprit : même système de vues, même mise en page sur deux colonnes maître / auxiliaire. Il est plus complet que dwm, scriptable en Lua et configurable via un fichier externe. Il ne dispose pas encore d'un équivalent de dmenu (c'est prévu pour la version 3) : pour l'instant (version 2.3.1), il faut se créer un menu d'applications soi-même, et lancer les autres applications depuis un terminal.
Awesome est configurable via le fichier ~/.awesomerc
. Contrairement à wmii et dwm, Awesome est prévu pour fonctionner avec des dispositions de clavier ayant les chiffres en accès direct (sélection / changement de vue), il faut donc reconfigurer les touches [1234567890] pour le bépo.
Plus de détails pour la version 3.x
Xmonad utilise dmenu et reprend le principe des deux zones maître / auxiliaire de dwm, mais il est beaucoup plus complet : les manipulations de fenêtres ne sont pas limitées à un système de colonnes, et on peut même libérer une partie de l'écran pour inclure un panel type KDE, Gnome ou Xfce4. De plus, Xmonad est très modulaire et dispose déjà de nombreuses extensions. C'est un projet relativement récent (première release en avril 2007), écrit dans le langage fonctionnel Haskell. Voir cet extrait de la configuration de Gaëtan (à peaufiner).