name: inverse layout: true class: center, middle, inverse --- layout: false # Vim pour les humains - survivre à Vim en cas d’apocalypse zombie - utiliser Vim comme un canard (ou presque) - débuter sur le chemin de l’éveil .footnote[:kazé / [@fabi1cazenave](https://github.com/fabi1cazenave)] --- ## Historique - 1970 : ed (Ken Thompson) - 1976 : Vi (Billy Joy) - 1988 : Vim (Bram Moolenaar) - 2015 : Neovim --- ## Pourquoi Vim ? - disponible partout - utilisable dans un term - ergonomie redoutable - “bash as IDE” - nerd factor --- template: inverse # Étape #0 : survie - pour écrire un message de commit - pour modifier une conf sur un serveur distant - pour survivre en cas d’apocalypse zombie - pour survivre quand Xorg / Wayland est tout cassé - pour débuter sur le chemin de l’éveil --- template: inverse background-image: url(images/duck_in_a_cup.jpg) --- ## :help vim-modes Pour survivre il faut connaître ces trois modes : - *normal* : visualiser et manipuler du texte - *insertion* : ajouter (et supprimer) du texte - *commande* : options et commandes complexes (`:`) --- ## Cheat mode - `i` passe en mode *insertion* - `Esc` passe en mode *normal* En mode insertion, Vim se comporte comme un Notepad… mais sans aucun raccourci clavier. Objectif : passer le plus de temps possible en mode *normal*. --- ## Enregistrer - mode *normal* - Ctrl-S (It’s a trap ! Remède : Ctrl-Q) --- ## Enregistrer (pour de vrai) - mode *normal* - “Enregistrer” == `:w` (“write”) - “Enregistrer sous…” == `:saveas [nom_de_fichier]` --- ## Panic mode Pour quitter Vim sans rien enregistrer : - mode *normal* - `:cq` (“cancel and quit”) Note : Vim sort avec une erreur (status == 1). Parfait pour annuler un commit. --- ## Annuler - mode *normal* - Ctrl-Z (It’s a trap ! Remède : `fg`) --- ## Annuler (pour de vrai) - mode *normal* - `u` (“undo”) Redo = Ctrl-R (suggestion : `nmap U
`). --- template: inverse # Recherche de texte --- ## Ctrl-F ? F3 ? En mode *normal* : - `/` + expression rationnelle pour chercher vers le bas - `?` + expression rationnelle pour chercher vers le haut - `n` pour aller à l’occurrence suivante - `N` pour aller à l’occurrence précédente Nota : `/` fonctionne dans beaucoup d’autres applications que Vim. --- ## Options qui tuent Indispensable : - `:set hlsearch` : mise en évidence de la recherche - `:set incsearch` : recherche incrémentale (“find as you type”) Bonus : - `:set ignorecase` : recherche insensible à la casse… - `:set smartcase` … sauf si le motif de recherche contient des majuscules --- ## Commandes qui tuent En mode *normal* : - `*` : cherche le mot sous le curseur (vers le bas) - `#` : cherche le mot sous le curseur (vers le haut) Bonus: - `gd`: chercher la première occurrence du mot sous le curseur (“go to definition”) --- template: inverse # Étape #1 : efficacité - comprendre les déplacements - utiliser les commandes de base - progresser sur le chemin de l’éveil --- template: inverse background-image: url(images/duck_attack.jpg) --- template: inverse # Les déplacements --- ## Souris, touchpad, pointeur ? - `:set mouse=a` : active la sélection à la souris - mais veut-on vraiment faire un tel effort physique ? --- ## ←↓↑→ - pro tip : en appuyant sur une flèche, le curseur se déplace dans la direction indiquée par la flèche… - … ouais mais non, trop loin `~/.vimrc` ``` map
imap
map
imap
map
imap
map
imap
``` --- ## HJKL ? Pour des raisons historiques : - `j` / `k` : bas / haut - `h` / `l` : gauche / droite Ça fonctionne avec d’autres applications : - `jk` : gmail, feed.ly, twitter, emacs, screen, less/more/most… - `hjkl` : tweetdeck, Awesome, i3 (*ahem*), Ranger, NetHack… --- ## JK, vraiment ? TL;PL : oui, avec modération (= sans répétitions) - `{`, `}` : sauter à la ligne vide précédente / suivante - `/`, `?` : rechercher vers le haut / vers le bas (+ `n`, `N`) - `*`, `#` : idem, avec le mot sous le curseur (PRO-TIP !) - `gg`, `G` : sauter en début / fin de fichier `~/.vimrc` ``` " recherche incrémentale set hlsearch set incsearch ``` --- ## HL, vraiment ? Mouahahahahaha, nope. - `w`, `b` : mot suivant / précédent - `W`, `B` : MOT suivant / précédent (= délimité par des espaces) - `e`, `ge` : fin de mot suivant / précédent - `E`, `gE` : fin de MOT suivant / précédent (= délimité par des espaces) - `^`, `$` : début / fin de ligne --- ## Hopopop, ch’uis perdu. Les indispensables, verticalement : - `j`, `k` : ligne à ligne - `/`, `?` : recherche Les indispensables, horizontalement : - `w`, `b` : mot à mot - `^`, `$` : début / fin de ligne Tous les autres : `:help navigation` --- template: inverse # Commandes de base Couper, Copier, Coller… Ctrl-X ? Ctrl-C ? Ctrl-V ? --- ## Sélection de texte Trois variantes de mode *visuel* : - `v` = caractère par caractère : `w`, `b`, `^`, `$`… - `Shift-v` = ligne par ligne : `j`, `k`, `{`, `}`… - `Ctrl-v` = sélection rectangulaire … et `Esc` (ou même opérateur) pour revenir au mode *normal*. --- ## Action (« règle 0 ») `sélection opérateur` Une fois la sélection effectuée, les opérateurs déclenchent une action : - `d` : delete (couper) - `y` : yank (copier) - `p` : paste (coller) - `c` : change (couper + passer en mode *insertion*) Démo ! --- ## À envisager Pour les faibles : - `:set clipboard=unnamedplus` Pour les tricheurs : - `:help registers` --- ## Commande qui tue En mode *normal* : - `.` : répète la dernière action ’nuf said. --- template: inverse # Étape #2 : éveil Arrivés ici, vous en êtes au niveau « caneton ». Félicitations, vous êtes autonomes avec Vim ! Les diapos qui suivent visent à atteindre le niveau « colvert ». Ne clignez pas des yeux. --- template: inverse background-image: url(images/flying_mallard.jpg) --- ## Poésie minimaliste >> On n’appuie pas sur des raccourcis clavier. >> >> On discute avec Vim. >> >> On lui adresse des demandes précises sur quoi effectuer avec quel morceau. >> >> Tout ceci de manière annulable, répétable, factorisable, partageable ! [@delapouite](https://twitter.com/Delapouite) — auteur de [« Vim en 10 vimutes »](http://delapouite.com/slides/vim-en-10-vimutes/#/vimutes) --- ## Règle 1 `opérateur mouvement` - `dw` : efface jusqu’à la fin du mot (“delete word”) - `d$` : efface jusqu’à la fin de ligne - `yW` : copie jusqu’à la fin du MOT (“yank Word”) - `cw` : efface jusqu’à la fin du mot et passe en mode *insertion* (“change word”) Bonus : `.` pour répéter l’action. --- ## Règle 1bis `[répétition] opérateur [répétition] mouvement` - `3dw` : efface un mot, trois fois - `d3w` : efface trois mots (bon, OK, c’est pareil) - `5d3w` : efface trois mots, cinq fois - `c3w` : efface trois mots et passe en mode *insertion* --- ## text-objects `modifieur objet` Modifieur : - `i`, `a` : “in” ou “around” Objet : - `w`, `W` : mot - `s`, `p` : phrase, paragraphe (point / ligne vide) - `b`, `B` : bloc (parenthèses / accolades) - `t` : tag (html/xml) - `[`, `]`, `{`, `}`, `(`, `)`, `'`, `"`… --- ## Règle 2 `opérateur objet` - `vaw` : sélectionne le mot - `daw` : supprime le mot - `dip` : supprime le paragraphe (*sans* la ligne de séparation) - `dap` : supprime le paragraphe (*avec* la ligne de séparation) - `ci'` : change le contenu d’une chaîne Bonus : `.` pour répéter l’action, encore et derechef. --- ## Idiomes Opérateur répété = action sur une ligne : - `dd` : couper toute la ligne - `yy` : copier toute la ligne - `cc` : changer toute la ligne Opérateur en majuscule = action jusqu’à la fin de ligne : - `D` : effacer jusqu’à la fin de ligne (d$) - `C` : changer jusqu’à la fin de ligne (c$) --- template: inverse # ~/.vimrc --- ## Quelques recommandations - ne pas copier des lignes de vimrc qu’on ne comprend pas (`:help` FTW) ; - ne pas utiliser des « distributions Vim » contenant tout un tas de greffons et options discutables ; - il est toujours bon de savoir utiliser un Vim sans aucun vimrc ni greffon. Voilà un **exemple** pas tant mal de vimrc. Pour info. --- ``` " coloration syntaxique syntax on colorscheme desert set background=dark " aides visuelles set number set ruler " recherche incrémentale set incsearch set hlsearch " auto-indentation à 2 espaces set autoindent set tabstop=2 set shiftwidth=2 set softtabstop=2 set expandtab " compléter avec
en mode commande set wildmenu set wildmode=longest,full " options honteuses (pour les faibles) set mouse=a set clipboard=unnamedplus ``` --- template: inverse # Aller plus loin « Ce n’est pas le chemin qui est difficile,
c’est le difficile qui est chemin. » (et si c’est Bouddha qui le dit, c’est que c’est vrai) --- ## Le chemin de l’éveil 1. repérer une tâche qu’on pourrait mieux faire 2. trouver une façon de mieux la faire 3. en faire une habitude 4. GOTO 1 Pour ça il y a [tupperVim](https://tuppervim.org/) — à Paris, Lyon, Grenoble… Alternative solo : VimTutor + [VimGolf](https://vimgolf.com/). --- template: inverse background-image: url(images/superduck.jpg) # Ayé. http://tuppervim.org/ .footnote[:kazé / [@fabi1cazenave](https://github.com/fabi1cazenave)]