Lâche ta souris !

Luca Ferro (lferro)

Clavier → souris → clavier

CLAVIER SOURIS
lâcher le clavier
→
trouver la souris
→
viser
→
cliquer
→
revenir
→
retrouver les touches
Chaque trajet est petit. Ils s'additionnent, des dizaines de fois par jour.

Deux chemins, une seule intention

Intention
« ouvrir user_service.py »
Souris
sidebar
→
dossier
→
scroll
→
fichier
→
clic
5 étapes
Clavier
Ctrl+P
→
usrserv
→
Enter
1 geste

Découvrabilité vs exécution

GUI
découvrir
exécuter

Des boutons, des menus, des icônes. Vous n'avez pas besoin de connaître le logiciel.

Clavier
découvrir
exécuter

Invisible. Ctrl+P n'existe pas tant que personne ne vous l'a montré.

Au début, c'est pire

Vitesse d'exécution
NIVEAU SOURIS AUJOURD'HUI SEMAINE 1 PLUS TARD TEMPS →
SourisJe sais où est le bouton. Je vais le chercher.
Clavier conscient« c'était quoi déjà… Ctrl… P ? »
Muscle memoryJe pense « ouvrir un fichier ». Mes doigts font Ctrl+P.

On a fait un détour de 50 ans

1960sDu texte et des commandes. Il faut connaître le langage de la machine.
1968Engelbart démontre un ancêtre de la souris.
1970sXerox PARC : fenêtres, icônes, menus, pointeur.
1984Macintosh. L'informatique devient accessible.
2026On recrée du keyboard-first à l'intérieur de la GUI.
GUI
←
a appris du terminal : command palette, fuzzy finder, navigation par symboles, shortcuts, terminal intégré
Terminal
←
a appris de la GUI : autosuggestions, fuzzy search, syntax highlighting, completion, TUI

Tout tient dans 4 catégories

Naviguerun fichier · un symbole · une fenêtre · un workspace
Manipulerdu texte · un symbole (rename) · une fenêtre
Exécuterun test · une commande · une action
ContrôlerGit · Docker · votre machine

search > browse

Navigation dans les fichiers
src/ services/ auth/ user_service.py token.py billing/ models/ tests/

Je descends une hiérarchie que je connais déjà.

Navigation sémantique
Ctrl+Pun fichier
Ctrl+Tun symbole
F12sa définition
Shift+F12ses références
Alt+←là où j'étais

J'exprime directement ce que je cherche.

Rename, pas rechercher-remplacer

Replace all
def find_user(id): return db.get(id) def find_user_id(email): ... # find_user : lookup principal user = find_user(42) log("find_user called")
5 remplacements. 3 n'auraient jamais dû arriver.
F2 rename
def find_user(id): return db.get(id) def get_user_id(email): ... # get_user : lookup principal user = find_user(42) log("get_user called")
2 remplacements. Le language server sait ce qu'est get_user.

Une édition, n curseurs

Une par une
user.name = row["name"]1 user.email = row["email"]2 user.phone = row["phone"]3 user.city = row["city"]4
Viser, double-clic, taper. Quatre fois.
Ctrl+D
user.name = row["name"] user.email = row["email"] user.phone = row["phone"] user.city = row["city"]
Ctrl+D ×3 : quatre sélections. Je tape data une seule fois.

Cliquer sans souris

Souris
github.com/acme/demo-api
ForkCreate pull request
Je repère, je lâche le clavier, je vise, je clique.
Vimium
github.com/acme/demo-api
jfForkjdCreate pull request
f : chaque élément cliquable reçoit un nom. jd : clic.

Supprimer l'interaction, pas l'accélérer

Floating
terminal
browser
éditeur
Je prends, je déplace, je resize, je remets à gauche, je reprends l'autre.
Tiling
éditeur
browser
terminal
Les fenêtres se placent. Elles ne s'overlap pas.

Un workspace par contexte

1
éditeur
terminal
browser
2
browser
3
docs
notes
4
chat
5
musique
Super+2aller sur le workspace 2
Super+Shift+3envoyer la fenêtre sur le 3
Super+←→↑↓changer de fenêtre
Super+Spaceouvrir une application
Super+Enterouvrir un terminal
Super+Wfermer la fenêtre

fish vs bash vanilla

je tape exactement les mêmes touches
↓↓
bash vanilla
$git checkout fea
Rien. Je tape tout, à chaque fois.
autosuggestion syntax highlighting completion des arguments abbreviations
fish
$git checkout feature/api-v2
Autosuggestion. Gris : la suite, depuis mon historique. → pour accepter.
autosuggestion syntax highlighting completion des arguments abbreviations

Abbreviations

$gaa
espace
$git add --all
$gc
espace
$git commit -m ""
Quand en créer une
12345 →
$abbr -a gaa git add --all
Une friction répétée, pas 150 aliases. Et l'abbr se déploie : l'historique garde la vraie commande.

Intention, pas étapes

aller dans demo-api
↓↓
cd
$cd ~/Documents/dev/projects/demo-api
~/
Documents/
dev/
projects/
demo-api/
Je reproduis le chemin, niveau par niveau.
zoxide
$z demo-api
~/
demo-api/
zoxide retient mes dossiers fréquents. J'écris où je veux aller.

Comment commencer

Gardez les defaultsSi le raccourci par défaut est correct, gardez-le. Votre muscle memory devient portable.
Apprenez au moment du besoinCinquième fois à la souris aujourd'hui ? Cherchez le raccourci. Apprenez-en un. Pas vingt.
Répétez immédiatementForcez-vous à l'utiliser, même si c'est plus lent pendant deux jours.
search > browseUn fichier, un symbole, une commande, un projet, une application, une action.

La souris garde sa place

← nommable
spatial →
↑ répété
↓ rare
Raccourci
Souris + raccourcis
Chercher
Souris
Ctrl+P ouvrir un fichier
F2 renommer un symbole
changer de fenêtre
Figma
capturer une zone de l'écran
Ctrl+Shift+P une action rare
un réglage VS Code
lancer une app
explorer une app inconnue
recadrer une image
un réglage visuel

Rien d'impressionnant individuellement

Naviguer
Ctrl+Shift+Osymbole du fichierCtrl+Shift+\bracket correspondantF8prochaine erreurTonglets · Vimiumgipremier champ · Vimiumz demo-apidossier · zoxide
Manipuler
Ctrl+Shift+Ltoutes les occurrencesAlt+↑↓déplacer la ligneCtrl+Shift+Ksupprimer la ligneCtrl+.quick fixAlt+Ecommande dans l'éditeur · fishyycopier l'URL · Vimium
Exécuter
Ctrl+Shift+Pn'importe quelle actionCtrl+Rhistorique · fishAlt+Spréfixer sudo · fishSuper+Spacelancer une app
Contrôler
lazydockerconteneurs en TUIbtopla machinegh pr checkout 42tester une PRSuper+Shift+3fenêtre → workspace 3
Aucun n'est impressionnant seul. C'est la composition qui change tout.
Est-ce qu'il existe un chemin plus direct entre mon intention et l'action ?
Pas « mouse bad ». Juste moins de distance.