Chapitre 03
Se déplacer vite
Objectifs
À la fin de ce chapitre, tu sauras :
- te déplacer par mots avec
w,b,eplutôt que caractère par caractère ; - sauter en début/fin de ligne (
0,^,$) et en début/fin de fichier (gg,G) ; - bondir vers un caractère précis sur la ligne avec
f,t,;,,; - te déplacer d'un écran à l'autre (
Ctrl-d,Ctrl-u) et atteindre une ligne par son numéro.
Au chapitre 2, tu te déplaçais caractère par caractère. C'est lent. Ici, on apprend à couvrir de grandes distances en quelques touches. C'est ce qui fait toute la vitesse de Vim.
Se déplacer par mots
Plutôt que d'avancer lettre par lettre, saute de mot en mot :
| Touche | Effet | Mémo |
|---|---|---|
w |
début du mot suivant | word |
b |
début du mot précédent | back |
e |
fin du mot courant (ou suivant) | end |
Sur cette ligne, curseur sur le t de total :
total = total + prix
wt'amène sur le=, puis encorewsur le secondtotal, puiswsur le+…et'amène sur lelfinal detotal(la fin du mot).bte ramène en arrière de mot en mot.
Vim distingue word et WORD (avec une majuscule pour la commande) :
wbe: un « mot » s'arrête à la ponctuation.total.prixcompte comme trois éléments (total,.,prix).WBE: un « grand mot » est délimité par les espaces seulement.total.prixcompte comme un seul grand mot.
sur "user.name = 42"
w saute : user → . → name → = → 42
W saute : user.name → = → 42
Astuce — En code,
WBEsont souvent plus pratiques pour franchir d'un coup un identifiant qui contient des points, des tirets ou des slashes (config.database.host,src/app/main.js).
Début et fin de ligne
| Touche | Effet |
|---|---|
0 |
tout début de la ligne (colonne 0, même sur un blanc) |
^ |
premier caractère non blanc de la ligne |
$ |
fin de la ligne |
La différence entre 0 et ^ compte pour du code indenté : sur une ligne en retrait, 0 va sous
l'indentation, ^ va directement sur le premier vrai caractère.
total = total + prix
# ^ ici avec ^ $ ici avec $
# 0 irait tout à gauche, avant les espaces
Atteindre un caractère précis : f et t
Voici un déplacement redoutablement efficace sur une ligne. f (find) saute sur la prochaine
occurrence d'un caractère que tu tapes :
total = total + prix
Curseur en début de ligne, tape f+ : le curseur bondit directement sur le +. Tape fp : il
bondit sur le p de prix.
Les variantes :
| Touche | Effet |
|---|---|
f<c> |
saute sur la prochaine occurrence de <c> |
F<c> |
saute sur la précédente occurrence (vers la gauche) |
t<c> |
saute juste avant la prochaine occurrence (till) |
T<c> |
saute juste après la précédente occurrence |
; |
répète le dernier f/t/F/T (même sens) |
, |
répète dans le sens inverse |
Exemple : f" puis ; te fait sauter de guillemet en guillemet sur la ligne. La nuance f / t est
subtile mais utile : t) s'arrête juste avant la parenthèse fermante (pratique pour se placer pile à
l'intérieur), f) se pose dessus.
À retenir —
f<c>est un de tes déplacements les plus rentables. Pense en termes de « caractère cible » : pour atteindre un point dans une ligne, vise un caractère unique et reconnais sable proche de ta destination.
Se déplacer dans le fichier
| Touche | Effet |
|---|---|
gg |
première ligne du fichier |
G |
dernière ligne du fichier |
42G ou :42 |
aller à la ligne 42 |
Ctrl-d |
descendre d'un demi-écran (down) |
Ctrl-u |
monter d'un demi-écran (up) |
H |
en haut de l'écran (high) |
M |
au milieu de l'écran (middle) |
L |
en bas de l'écran (low) |
Pour les fichiers longs, Ctrl-d / Ctrl-u te font parcourir le fichier sans perdre le fil (le texte
défile d'un demi-écran, ton œil suit). Et quand un message d'erreur te dit « erreur ligne 87 »,
87G t'y emmène instantanément.
Astuce — Active les numéros de ligne pour viser plus facilement : en mode Normal, tape
:set numberpuisEntrée. On rendra ce réglage permanent dans le.vimrcau chapitre 8.
Une carte mentale des déplacements
Range tes nouveaux outils par « portée », du plus fin au plus large :
caractère : h l f t (sur la ligne)
mot : w b e / W B E
ligne : 0 ^ $
écran : H M L Ctrl-d Ctrl-u
fichier : gg G 42G
Avant de bouger, demande-toi : « quelle est la plus grande portée qui m'approche de ma cible ? » Tu
choisiras G plutôt que trente j, ou f; plutôt que dix l.
Résumé
- Mots :
w(suivant),b(précédent),e(fin). MajusculesW B E= délimités par les espaces. - Ligne :
0(début brut),^(premier non-blanc),$(fin). - Caractère cible :
f<c>/t<c>(etFTvers la gauche), répétés par;et,. - Fichier :
gg(début),G(fin),42G(ligne 42),Ctrl-d/Ctrl-u(demi-écran),H M L(écran). - Réflexe : choisir le déplacement de plus grande portée qui approche de la cible.
Exercices
Exercice 1 — Par mots, pas par lettres
Dans panier.py, place le curseur en début de la ligne produits = [("pain", 1.20), ...] et atteins
le mot lait en utilisant uniquement des déplacements par mots (w, W, e…), sans l ni flèches.
Voir le corrigé
La démarche : enchaîne des w (ou W) en comptant les sauts, jusqu'à tomber sur lait. Comme la
ligne contient beaucoup de ponctuation, W est plus rapide : il franchit ("pain", d'un bloc.
Exemple : W W W … jusqu'à lait. Peu importe le compte exact ; l'objectif est de ne pas avancer
lettre par lettre.
Exercice 2 — Viser un caractère
Toujours sur la ligne des produits, depuis le début de ligne, place le curseur sur la première
parenthèse ouvrante ( en une seule commande de recherche de caractère.
Voir le corrigé
La démarche : f saute sur la prochaine occurrence du caractère tapé.
Tape f( : le curseur bondit directement sur la première (. Pour aller à la suivante, tape ;
(répète le dernier f).
Exercice 3 — Sauter aux extrémités
Dans panier.py, va à la dernière ligne du fichier en une touche, puis reviens à la première
en deux touches, puis saute directement à la ligne 3.
Voir le corrigé
La démarche : ce sont les déplacements « fichier ».
G→ dernière ligne.gg→ première ligne.3G(ou:3puisEntrée) → ligne 3.
Si tu as activé :set number, tu vois les numéros à gauche, ce qui aide à viser.
Quiz
1. Quelle commande place le curseur sur la fin de la ligne courante ?
- A.
0 - B.
^ - C.
$
2. Tu veux sauter sur la prochaine virgule de la ligne. Que tapes-tu ?
- A.
f, - B.
t, - C.
,f
3. Quelle est la différence entre w et W ?
- A. Aucune, ce sont des synonymes.
- B.
Wignore la ponctuation : un mot n'est délimité que par les espaces. - C.
Wrecule au lieu d'avancer.
4. Comment aller directement à la ligne 87 ?
- A.
87j - B.
87G - C.
g87
Voir les réponses
- C —
$va en fin de ligne.0va au tout début,^au premier caractère non blanc. - A —
f,saute sur la prochaine virgule.t,s'arrêterait juste avant. - B —
W(etB,E) traite tout ce qui n'est pas une espace comme un seul mot. - B —
87Gva à la ligne 87.87jdescendrait de 87 lignes depuis la position courante.
Projet fil rouge
Jalon « déplacement efficace ». Entraîne-toi sur panier.py à atteindre des cibles précises avec le
moins de touches possible :
- Depuis le bas du fichier, remonte à la ligne
produits = ...avecgg/G/<n>G. - Sur cette ligne, saute sur le prix
2.50avecfpuis;. - Active
:set numberpour la session et observe les numéros de ligne.
Ajoute à cheatsheet.md :
## Déplacements rapides
- `w b e` (mots) · `W B E` (grands mots, ignorent la ponctuation)
- `0` début · `^` premier non-blanc · `$` fin de ligne
- `f<c>` / `t<c>` viser un caractère · `;` répéter · `,` répéter à l'envers
- `gg` début fichier · `G` fin · `42G` ligne 42 · `Ctrl-d`/`Ctrl-u` demi-écran
- `:set number` afficher les numéros de ligne