« Vim » : différence entre les versions

De Disposition de clavier bépo
m (a renommé Utilisateur:Kaze/Vim en Vim: Le fichier ~/.vimrc étant finalisé, on peut proposer cette page à tous les utilisateurs.)
(nettoyage)
Ligne 16 : Ligne 16 :
=== Tutoriels et ressources Vim en français ===
=== Tutoriels et ressources Vim en français ===
* http://www.docmirror.net/fr/linux/howto/programming/Vim-HOWTO
* http://www.docmirror.net/fr/linux/howto/programming/Vim-HOWTO
TODO : ajouter des liens vers des tutoriels Vim.
''À faire :'' ajouter des liens vers des tutoriels Vim.


=== Objectif de cette page ===
=== Objectif de cette page ===
Proposer un fichier ~/.vimrc par défaut aux utilisateurs Bépo :
Proposer un fichier ~/.vimrc par défaut aux utilisateurs Bépo :
* Le fait que les touches [HJKL] correspondent à {CTRS} complique singulièrement l'utilisation de Vim aux Bépoïstes, même pour les Vimistes convaincus.
* Le fait que les touches [HJKL] correspondent à {CTRS} complique singulièrement l'utilisation de Vim aux Bépoïstes, même pour les Vimistes convaincus.
* Vim n'est pas utilisable en l'état avec le Bépo, contrairement à l'Azerty ou même le Dvorak-US, essentiellement parce que les touches {J} et {K} ne sont pas côte-à-côte.
* Vim n'est pas utilisable en l'état avec le Bépo, contrairement à l'Azerty ou même le Dvorak-US, essentiellement parce que les touches {J} et Constituer une ''cheat sheet'' correspondant à cette configuration Bépo, dans le genre de celle-ci : http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html
Il serait donc appréciable de s'entendre sur un fichier ~/.vimrc basique avant de le mettre en ligne sur le Wiki.
 
Une fois ce fichier ~/.vimrc défini, on pourra (devra) constituer une ''cheat sheet'' correspondant à cette configuration Bépo, dans le genre de celle-ci : http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html


== Reconfiguration partielle des touches ==
== Reconfiguration partielle des touches ==
Ligne 95 : Ligne 92 :
  noremap gB :exe "silent! tabfirst"<CR>
  noremap gB :exe "silent! tabfirst"<CR>
  noremap gÉ :exe "silent! tablast"<CR>
  noremap gÉ :exe "silent! tablast"<CR>
Plutôt que de mettre ces lignes dans le fichier ~/.vimrc, on peut vouloir créer un fichier séparé spécifique au Bépo, par exemple « ~/.vimrc.bepo ». On peut alors inclure ce fichier dans Vim et Vimperator en ajoutant la ligne suivante dans leurs fichiers de configurations respectifs :
source ~/.vimrc.bepo


Reste à voir à l'usage si ça suffit pour utiliser Vim confortablement, à suivre…
Reste à voir à l'usage si ça suffit pour utiliser Vim confortablement, à suivre…
<!--
===[W] -> {È} ===
W E B sont les trois commandes de déplacement mot-à-mot de Vim. Le placement de {W} est catastrophique, mais ça se soigne :
{| border="1" class="wikitable"
|-
!  Bépo  !!  Qwerty  !!  Commande  !!
|-       
|   é  ||  w || word || mot suivant
|-       
|   É  ||  W || Word || mot suivant (délimiteur = espace)
|-       
|   e  ||  e || end  || fin de mot
|-       
|   E  ||  E || End  || fin de mot (délimiteur = espace)
|-       
|   b  ||  b || back || mot précédant
|-       
|   B  ||  B || Back || mot précédant (délimiteur = espace)
|-
|}
On conserve donc {B} et {E}, mais on utilise {É} comme commande {W} :
noremap é w
noremap É W
Par contre, il semble impossible de remapper Ctrl+W en Ctrl+È, ce qui est regrettable pour les manipulations de fenêtres… À défaut, on peut toutefois utiliser {W} comme un Ctrl+W :
noremap W <C-w>
Nota : les adeptes du Bépo-intl n'ont pas besoin de ces mappings, {W} étant déjà placé sur la touche [T].
===[HJKL] -> {CTSR} ===
L'objectif principal est d'utiliser les touches de déplacement case-à-case de Vim :
{| border="1" class="wikitable"
|-
!  Bépo  !!  Qwerty  !!  Commande  !!
|-       
|   c ||  h || ← || gauche
|-
|   t ||  j || ↓ || bas
|-
|   s ||  k || ↑ || haut
|-
|   r ||  l || → || droite
|-
|}
Les majuscules ont une fonction différente :
{| border="1" class="wikitable"
|-
!  Bépo  !!  Qwerty  !!  Commande  !!
|-       
|   C ||  H || ⇑      || haut de l'écran
|-
|   T ||  J || Join    || joindre les lignes
|-
|   S ||  K || Keyword || lancer ''man'' sur le mot courant
|-
|   R ||  L || ⇓      || bas de l'écran
|-
|}
Ce qui donne :
" {cr} = « gauche / droite »
noremap c h
noremap r l
" {ts} = « haut / bas »
noremap t j
noremap s k
" {CR} = « haut / bas de l'écran »
noremap C H
noremap R L
" {TS} = « joindre / aide »
noremap T J
noremap S K
==={HJKL} <- [CTSR] ===
Maintenant il faut replacer {HJKL}. En première approche, on pourrait se contenter d'échanger les touches deux à deux, mais il est plus opportun de regrouper les commandes C et T sur la ligne du haut, S et R sur la ligne du bas. En effet, la commande « Change » — [C] en Qwerty — est très souvent couplée avec une commande de déplacement telle que [w][b][t]…
{| border="1" class="wikitable"
|-
!  Bépo  !!  Qwerty  !!  Commande  !!
|-
|   h ||  r || replace || remplacer le caractère
|-           
|   H ||  R || Replace || remplacer à partir du caractère
|-           
|   j ||  t || till    || jusqu'au caractère suivant
|-           
|   J ||  T || Till    || jusqu'au caractère précédant
|-           
|   k ||  s || suppr.  || supprimer le caractère et insérer
|-           
|   K ||  S || Suppr.  || supprimer la ligne et insérer
|-           
|   l ||  c || change  || changer
|-           
|   L ||  C || Change  || changer jusqu'à la fin de ligne
|-
|}
{L} devient ainsi la touche « Change », c'est juste à coté de {D} (« Delete »), donc assez cohérent.
" {J} = « Jusqu'à »            (j = suivant, J = précédant)
noremap j t
noremap J T
" {L} = « Change »            (h = bloc, H = jusqu'à la fin de ligne)
noremap l c
noremap L C
" {H} = « Remplace »          (l = caractère, L = texte)
noremap h r
noremap H R
" {K} = « Supprime et insère » (k = caractère, K = ligne)
noremap k s
noremap K S
===Problème avec {g} ===
Avec le fichier de configuration proposé en l'état, les commandes [gj] et [gk] ne fonctionnent pas ; cela est dû au fait que [gt] et [gT] sont déjà affectées à la sélection d'onglets. Les commandes [gj] et [gk] sont utilisées respectivement pour se déplacer ver le bas et vers le haut à l'intérieur d'une ligne, ce qui peut s'avérer nécessaire quand on utilise Vim pour des tâches littéraires.
Pour implémenter [gj] et [gk] il est nécessaire d'utiliser une touche supplémentaire. Voilà quatre possibilités de correction.
; Utiliser {gTab} pour changer d'onglet
C'est la méthode la plus simple :
noremap gt gj        " ligne inférieure
noremap gs gk        " ligne supérieure
noremap g<Tab> gt    " onglet suivant
noremap g&lt;S-Tab> gT  " onglet précédant
; Utiliser {gb}/{gé} pour changer d'onglet
C'est la même chose en plus confortable :
noremap gt gj
noremap gs gk
noremap gb gT
noremap gé gt
; Utiliser {Ç} et modifier le comportement de {ST}
En Bépo, les commandes gj et surtout gk (bas / haut) sont difficiles à faire. On peut contourner la difficulté en utilisant :
* {T} et {S} pour [j] et [k]
* {t} et {s} pour [gj] et [gk]
* {ç} pour J (joindre deux lignes) et {Ç} pour K (aide)
La section [HJKL] devient alors :
" {ctsr} = « gauche / bas / haut / droite »
noremap c h
noremap t gj
noremap s gk
noremap r l
" {CR} = « haut / bas de l'écran »
noremap C H
noremap R L
" {TS} = « ligne suivante / précédente »
noremap T j
noremap S k
" Effet domino : J et K manquent à l'appel
noremap ç J
noremap Ç K
C'est surtout pour un usage littéraire de Vim que cette variante serait appréciable, les longues lignes de texte étant alors plus faciles à manipuler.
; Intervertir {g} et {k}
Ça pourrait être la meilleure solution :
* les commandes « s » et « r » seraient regroupées côte à côte sur {g} et {h}, juste en-dessous de {s} et {r} — on peut difficilement faire plus cohérent
* les commandes gc, gt, gs, gr seraient faites à deux mains
Par contre :
* c'est moins bien pour « ge » (fin du mot précédant) — on pourrait utiliser {è} pour ça
* ça fait une touche de plus qui serait dévoyée de son usage normal
noremap k g
noremap K G
noremap g s
noremap G S
noremap è ge
noremap È gE
-->


=== ~/.vim/after/ftplugin/netrw.vim ===
=== ~/.vim/after/ftplugin/netrw.vim ===


Ex est le plugin d'exploration de fichiers de Vim. On le lance avec « :Ex », « :Sex », « :Vex », « :Tex », ou tout simplement « :e . ».
Ex est le plugin d'exploration de fichiers de Vim. On le lance avec « :Ex », « :Sex », « :Vex », « :Tex », ou même « :e . ».


Malheureusement, {t} et {s} ne fonctionnent pas comme « bas / haut » avec cet explorateur, car les mappings d'Ex ne sont pas définis dans ~/.vimrc. Deux solutions :
Malheureusement, {t} et {s} ne fonctionnent pas comme « bas / haut » avec cet explorateur, car les mappings d'Ex ne sont pas définis dans ~/.vimrc. Deux solutions :
Ligne 361 : Ligne 189 :
''À compléter par un utilisateur Emacs.''
''À compléter par un utilisateur Emacs.''


Note : OpenKomodo dispose également d'un mode Vim. Par ailleurs il y a un plugin Vim pour Visual Studio.
Note : OpenKomodo dispose également d'un mode Vim. Il y a aussi un plugin Vim pour Visual Studio.


=== Outils du shell ===
=== Outils du shell ===

Version du 27 mai 2008 à 22:57

Attention

Page en cours de construction

Vim n'est pas UN éditeur de texte, c'est LE éditeur de texte. Cette page a pour but de regrouper toutes les infos relatives à l'utilisation de Vim en Bépo.

Ergonomie

Pourquoi Vim ?

Vim a été optimisé pour la prévention des TMS :

  • il n'utilise que très peu de raccourcis en Ctrl+{}, toutes les commandes se faisant en position « dactylo », c'est-à-dire avec les doigts proches de la position de repos ;
  • les déplacements du curseur peuvent (doivent) se faire sans les flèches : [HJKL] déplacent le curseur case à case, [WEB] déplacent le curseur mot à mot (équivalent de Ctrl+flèche) ;
  • l'utilisation des différents modes de Vim (normal, insertion, visualisation) permet de se passer complètement de la souris tout en diminuant le nombre de frappes effectuées dans la journée.

Le prix à payer est un temps d'apprentissage assez long — plus long que sur n'importe quel autre éditeur de texte. Quand on maîtrise les bases de Vim, le gain en confort et en productivité est tel qu'on n'utilise plus aucun autre éditeur.

Là où le bât blesse, c'est que Vim est conçu pour un clavier Qwerty. Il convient donc de reconfigurer Vim pour l'utiliser en Bépo.

Tutoriels et ressources Vim en français

À faire : ajouter des liens vers des tutoriels Vim.

Objectif de cette page

Proposer un fichier ~/.vimrc par défaut aux utilisateurs Bépo :

  • Le fait que les touches [HJKL] correspondent à {CTRS} complique singulièrement l'utilisation de Vim aux Bépoïstes, même pour les Vimistes convaincus.
  • Vim n'est pas utilisable en l'état avec le Bépo, contrairement à l'Azerty ou même le Dvorak-US, essentiellement parce que les touches {J} et Constituer une cheat sheet correspondant à cette configuration Bépo, dans le genre de celle-ci : http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Reconfiguration partielle des touches

On ne cherche ici qu'à implémenter le déplacement en [HJKL] avec le moins d'impact possible sur le reste des commandes Vim.

Principe

  • {ctsr} remplace [hjkl] pour les touches de direction
  • {H} remplace [R] (remplacer)
  • {J} remplace [T] (jusqu'à)
  • {K} remplace [S] (supprime et insère)
  • {L} remplace [C] (modification de texte) — juste à coté de {D}
  • {É} remplace [W] (mot suivant) — le {W} étant beaucoup trop loin en Bépo

C'est la solution la plus simple pour utiliser Vim confortablement en Bépo. :-/

Aide-mémoire

Vim-bepo.png

~/.vimrc

Ajouter les lignes suivantes au fichier ~/.vimrc :

" {W} -> [É]
" ——————————
" Le placement de {W} est catastrophique, mais ça se soigne ;-)
noremap é w
noremap É W
" Pour faciliter les manipulations de fenêtres, on utilise {W} comme un Ctrl+W :
noremap w <C-w>
noremap W <C-w><C-w>

" [HJKL] -> {CTSR}
" ————————————————
" {cr} = « gauche / droite »
noremap c h
noremap r l
" {ts} = « haut / bas »
noremap t j
noremap s k
" {CR} = « haut / bas de l'écran »
noremap C H
noremap R L
" {TS} = « joindre / aide »
noremap T J
noremap S K

" {HJKL} <- [CTSR]
" ————————————————
" {J} = « Jusqu'à »            (j = suivant, J = précédant)
noremap j t
noremap J T
" {L} = « Change »             (h = bloc, H = jusqu'à la fin de ligne)
noremap l c
noremap L C
" {H} = « Remplace »           (l = caractère, L = texte)
noremap h r
noremap H R
" {K} = « Supprime et insère » (k = caractère, K = ligne)
noremap k s
noremap K S

" Désambiguation de {g}
" —————————————————————
" ligne précédante/suivante (à l'intérieur d'une phrase)
noremap gs gk
noremap gt gj
" onglet précédant/suivant
noremap gb gT
noremap gé gt
" premier/dernier onglet
noremap gB :exe "silent! tabfirst"<CR>
noremap gÉ :exe "silent! tablast"<CR>

Plutôt que de mettre ces lignes dans le fichier ~/.vimrc, on peut vouloir créer un fichier séparé spécifique au Bépo, par exemple « ~/.vimrc.bepo ». On peut alors inclure ce fichier dans Vim et Vimperator en ajoutant la ligne suivante dans leurs fichiers de configurations respectifs :

source ~/.vimrc.bepo

Reste à voir à l'usage si ça suffit pour utiliser Vim confortablement, à suivre…

~/.vim/after/ftplugin/netrw.vim

Ex est le plugin d'exploration de fichiers de Vim. On le lance avec « :Ex », « :Sex », « :Vex », « :Tex », ou même « :e . ».

Malheureusement, {t} et {s} ne fonctionnent pas comme « bas / haut » avec cet explorateur, car les mappings d'Ex ne sont pas définis dans ~/.vimrc. Deux solutions :

  • utiliser les flèches plutôt que {CTSR} avec Ex — voire même, utiliser la souris (horreur !)
  • redéfinir les commandes d'Ex dans le fichier ~/.vim/after/ftplugin/netrw.vim comme suit :
nunmap <buffer> t
nunmap <buffer> s
nunmap <buffer> k
nnoremap <buffer> t j
nnoremap <buffer> s k
nnoremap <buffer> k s

Avec ce fichier, {t}{s} fonctionnent désormais comme bas/haut et {k} permet de changer le type de tri (par nom, par date, etc.). Attention, l'aide affichée par Ex ne correspond plus à la réalité.

Remarques

Les touches {Ê}{È}{À}{Ç} sont inutilisées par Vim, et peuvent donc être affectées librement.

Par exemple, on peut faire de {È} une touche « début de ligne » :

noremap è ^
noremap È 0

Les adeptes du rqsm en direct ne pourront pas remapper ce caractère en une apostrophe droite (probablement parce que le rqsm n'est pas disponible en Latin-1) ; par contre, ils peuvent utiliser la touche {ç} à cet effet :

noremap ç '
noremap Ç `

Par ailleurs, on pourrait échanger {s} et {g} de façon à avoir {g} sous la main gauche et pour une meilleure cohérence du mapping Vim : les commandes correspondant à « s » et « r », respectivement {g} et {h}, se trouveraient alors sous les touches {S} et {R}.

Reconfiguration totale des touches

Une option radicale consisterait à reconfigurer toutes les touches en mode normal, afin qu'elles correspondent aux labels du clavier Azerty. On pourrait même générer un tel fichier automatiquement avec les outils du projet Bépo si suffisamment d'utilisateurs étaient intéressés…

Bépo/Qwerty

C'est à priori la meilleure solution du point de vue de l'ergonomie. On peut reprendre les cheat sheets classiques en l'état.

À faire.

Bépo/Azerty

Cette variante permettrait de se référer aux labels des touches du clavier Azerty pour les commandes Vim.

À faire.

Autres options utiles

À ajouter dans le fichier ~/.vimrc.

Appliquer automatiquement les modifications de ~/.vimrc

La première chose à faire pour jouer avec ~/.vimrc !

if has("autocmd")
  autocmd! bufwritepost .vimrc source ~/.vimrc
endif

Voir les espaces insécables

Bien entendu, on peut changer la couleur.

" colore les nbsp
highlight NbSp ctermbg=lightgrey guibg=lightred
match NbSp /\%xa0/

[Esc] plus accessible

Vim fait un grand usage de la touche Escape qui se trouve loin. On peut modifier le comportement de Tab pour qu’il serves de touche [Esc]. On garde un Tab en Maj+Tab. Attention, à ne pas utiliser dans Vimperator, on y a besoin du Tab…

" Tab fait un Esc, Maj+Tab fait un Tab
inoremap <Tab> <Esc>
inoremap <S-Tab> <Tab>

[PgUp] / [PgDn] plus accessibles

Vim utilise par défaut Ctrl+[B] et Ctrl+[F] pour aller à la page précédente / suivante. Ce n'est déjà pas la panacée en Qwerty mais en Bépo c'est l'horreur, ces deux touches étant à l'exact opposé l'une de l'autre. Pour y remédier, on peut utiliser les touches [BackSpace] et [Espace], c'est bien plus confortable :

noremap <BS> <PageUp>
noremap <Space> <PageDown>

Tant qu'on y est, on peut aussi utiliser [Entrée] pour centrer la page sur le curseur (ne fonctionne pas avec Vimperator) :

noremap <Return> zz

Autres applications « à la Vim »

Bon nombre d'applications courantes utilisent les touches de déplacement de Vim. Certaines applications comme vifm ne sont pas configurables, on n'en parlera donc pas ici.

Vimperator

Cette extension Firefox permet de piloter confortablement Firefox au clavier. Elle peut partager une partie de son fichier de configuration avec Vim, et même utiliser Vim comme éditeur.

Voir http://vimperator.cutup.org/index.php?title=Configuration pour la configuration de Vimperator.

Voir également GViMail pour utiliser Vimperator avec Gmail.

À compléter.

Emacs

Emacs dispose d'un mode Vim qui le rend utilisable permet de déplacer le curseur sans bouger les mains (pas testé ;-)). Par contre, Vim ne dispose pas d'un mode Emacs, on se demande bien pourquoi. :-D

À compléter par un utilisateur Emacs.

Note : OpenKomodo dispose également d'un mode Vim. Il y a aussi un plugin Vim pour Visual Studio.

Outils du shell

À compléter.

Gestionnaires de fenêtres en mosaïque

Wmii, Dwm, Xmonad, Awesome… ces gestionnaires de fenêtres sont des alternatives intéressantes pour ceux qui veulent se passer de la souris.

À compléter.