Relecture

This commit is contained in:
Fabrice Mouhartem 2023-05-13 17:59:37 +02:00
parent 47ad5bcd78
commit 66a2acaad7

View File

@ -1,14 +1,14 @@
--- ---
Title: Quelques pointeurs pour ViM Title: Quelques pointeurs pour ViM
Date: 2023-05-13 11:00 Date: 2023-05-13 11:00
Modified: 2023-05-13 11:00 Modified: 2023-05-13 18:00
Lang: fr Lang: fr
Author: Fabrice Author: Fabrice
Category: programmes Category: programmes
Tags: vim, neovim Tags: vim, neovim
Slug: nvim Slug: nvim
Header_Cover: ../images/covers/hand-fan.jpg Header_Cover: ../images/covers/hand-fan.jpg
Summary: Des informations que j'aurais bien aimé connaître plus tôt dans (neo)vim. Summary: Des informations que jaurais bien aimé connaître plus tôt dans (neo)vim.
--- ---
[neovim](https://neovim.org/) est un éditeur de texte modal, héritier direct de [neovim](https://neovim.org/) est un éditeur de texte modal, héritier direct de
@ -22,75 +22,78 @@ Trolls mis à part, il savère que jutilise vim/neovim comme éditeur de t
quotidien pour éditer du code, [écrire certains quotidien pour éditer du code, [écrire certains
e-mails]({filename}../tips/emails-md-fr.md), prendre des notes, écrire ce blog… e-mails]({filename}../tips/emails-md-fr.md), prendre des notes, écrire ce blog…
Cependant, si vous êtes un vimiste convaincu ou simplement intéressé par la Cependant, si vous êtes un vimiste convaincu ou simplement intéressés par la
question et avez essayé, vous vous serez sans doute rendu compte que la courbe question et avez essayé, vous vous serez sans doute rendu compte que la courbe
d'apprentissage n'est pas des plus douce, et quil est parfois compliqué de dapprentissage nest pas des plus douce, et quil est parfois compliqué de
trouver l'information que l'on cherche… notamment si on ignore qu'elle existe. trouver linformation que lon cherche… notamment si on ignore quelle existe.
À ce sujet, je ne peux que recommander les rencontres avec d'autres usagers, À ce sujet, je ne peux que recommander les rencontres avec dautres usagers,
comme par exemple aux [tuppervim](https://tuppervim.org). comme par exemple aux [tuppervim](https://tuppervim.org).
Ces rencontres sont l'occasion de partager et de découvrir des informations Ces rencontres sont loccasion de partager et de découvrir des informations
autour de ViM afin de les intégrer __progressivement__ à son flot de travail. autour de ViM afin de les intégrer __progressivement__ à son flot de travail.
Malheureusement, cette solution n'est pas forcément des plus pratiques pour Malheureusement, cette solution nest pas forcément des plus pratiques pour
tous: les rencontres ont lieues à Paris/Lyon/Grenoble, ce qui les rendent tous: les rencontres ont lieues à Paris/Lyon/Grenoble, ce qui les rendent
difficile d'accès pour le sud-ouest de la France… voire pour les personnes en difficile daccès pour le sud-ouest de la France… voire pour les personnes en
dehors de la France métropolitaine. dehors de la France métropolitaine.
Ainsi, même si comme la documentation ViM qui regroupe toutes les informations Ainsi, même si comme la [documentation ViM](https://www.vim.org/docs.php) qui
dont on pourrait avoir besoin, il existe des [archives des rencontres regroupe toutes les informations dont on pourrait avoir besoin, il existe des
précédentes](https://tuppervim.org/archives.html), il est fastidieux de naviguer [archives des rencontres précédentes](https://tuppervim.org/archives.html).
dans cette jungle de conseils. Ces archives sont plutôt pratiques pour les On se perd cependant très vite au milieu de cette jungle de conseils.
personnes ayant déjà assisté à une des réunions et qui cherche à retrouver un Ces archives sont plutôt pratiques pour les personnes ayant déjà assisté à une
point particulier. des réunions et qui cherche à retrouver un point particulier.
Ainsi je vais essayer de compiler quelques astuces et conseils que je pense être Ainsi je vais essayer de compiler quelques astuces et conseils que je pense être
intéressants et que j'aurais bien aimé découvrir plus tôt par moments… intéressants et que jaurais bien aimé découvrir plus tôt par moments…
Pour rappeler quelques principes de base du [cheminement vers la Pour rappeler quelques principes de base du [cheminement vers la
sagesse](https://fabi1cazenave.github.io/slides/2017-vim-ducklings/0-survive.html): sagesse](https://fabi1cazenave.github.io/slides/2017-vim-ducklings/0-survive.html):
n'essayez pas de tout intégrer d'un coup, c'est un coup à se décourager. nessayez pas de tout intégrer dun coup: cest un coup à se décourager.
Dautant plus que vim est avant tout un couteau-suisse, ainsi on ne va pas Dautant plus que vim est avant tout un couteau-suisse, ainsi on ne va pas
utiliser la lime à ongle pour couper du fromage: ça fonctionne mais cest pas utiliser la lime à ongle pour couper du fromage : ça peut fonctionner mais cest
très pratique. pas très pratique.
Toutes les commandes et techniques ne se valent donc pas suivant lusage de ViM Toutes les commandes et techniques ne se valent donc pas suivant lusage de ViM
que lon a. que lon a.
Ce billet n'est donc pas un cours pour apprendre à utiliser vim, mais simplement Ce billet nest donc pas un cours pour apprendre à utiliser vim, mais simplement
quelques astuces pour des personnes qui utilisent vim régulièrement sans pour quelques astuces pour des personnes qui utilisent vim régulièrement sans pour
autant vouloir devenir des _vim-wizards_ et qui pourraient ignorer certains autant vouloir devenir des _vim-wizards_ et qui pourraient ignorer certains
conseils qui améliorent la qualité de vie sans relever de l'ésotérisme. conseils qui améliorent la qualité de vie sans relever de l'ésotérisme.
Je ne vais dailleurs pas aborder le point des modules en détails et essayer de
rester le plus agnostique possible.
Néanmoins, comme ce billet ne sadresse pas nécessairement à des personnes qui Néanmoins, comme ce billet ne sadresse pas nécessairement à des personnes qui
découvriraient Vim, si je me mets à jargonner de manière incompréhensible et que découvriraient Vim, si je me mets à jargonner de manière incompréhensible et que
vous trouvez cela dérangeant dans la lecture, merci de me le signaler (par mail, vous trouvez cela dérangeant dans la lecture, merci de me le signaler (par mail,
irc, autre).
# Parler à son éditeur # Parler à son éditeur
Lorsque j'ai découvert vim, comme indiqué dans la première phrase de ce billet, Lorsque jai découvert vim, comme indiqué dans la première phrase de ce billet,
ce qui m'a marqué est le mot « **modal** ». ce qui ma marqué est le mot « **modal** ».
Je pensais quil sagissait de la partie importante dans la description de vim, Je pensais quil sagissait de la partie importante dans la description de vim,
et que c'était ce qui le différenciait d'emacs ou autre. et que c'était ce qui le différenciait demacs ou autre.
En effet, lors de l'apprentissage de vim, la première réaction naturelle est de En effet, lors de lapprentissage de vim, la première réaction naturelle est de
se dire que pouvoir passer d'un mode à l'autre en une seule touche permet se dire que pouvoir passer dun mode à lautre en une seule touche permet
d'éviter des acrobaties digitales pour appuyer sur trois touches à la fois, qui d'éviter des acrobaties digitales pour appuyer sur trois touches à la fois, qui
ne sont pas toujours bien placées. ne sont pas toujours bien placées.
Cependant, selon moi, ce qui fait la force de ViM, ce n'est pas seulement cette Cependant, selon moi, ce qui fait la force de ViM, ce nest pas seulement cette
distinction entre modes qui permet de faire de la sélection visuelle, ou de distinction entre modes qui permet de faire de la sélection visuelle, ou de
naviguer dans son fichier pour aller exactement où lon souhaite aller en trois naviguer entre ses différents fichiers pour aller exactement où lon souhaite
entrées de touches, mais c'est la _langue_ de vim. aller en trois entrées clavier, mais cest la _langue_ de vim.
Ainsi, lors de l'apprentissage, il est important de comprendre ce qu'il se Ainsi, lors de lapprentissage, il est important de comprendre ce quil se
passe. passe.
De la même manière qu'il ne faut pas copier/coller des lignes de commandes qu'on De la même manière quil ne faut pas copier/coller des lignes de commandes quon
ne comprend pas dans sont terminal, il est impératif de ne pas simplement ne comprend pas dans sont terminal, il est impératif de ne pas simplement
apprendre des séquences de commandes dans vim sans comprendre ce qu'on est en apprendre des séquences de commandes dans vim sans comprendre ce quon est en
train de communiquer à son éditeur. train de communiquer à son éditeur.
Pour citer une erreur de jeunesse, lorsque j'ai appris à utiliser vim, j'ai lu Pour citer une erreur de jeunesse, lorsque jai appris à utiliser vim, jai lu
quelque part sur internet que `gqap` en mode normal permettait de reformater un quelque part sur internet que `gqap` en mode normal permettait de reformater un
bloc de texte. bloc de texte.
Je ne comprenais pas exactement ce que «bloc» signifiait, mais ça fonctionnait Je ne comprenais pas exactement ce que «bloc» signifiait, mais ça fonctionnait
globalement, et les modificateurs de répétition (par exemple `3gqap`) ont le globalement, et les modificateurs de répétition (par exemple `3gqap`) ont le
comportement attendu. comportement attendu.
Cependant, ce défaut d'abstraction fait d'une part que j'ai appris plus de Cependant, ce défaut dabstraction fait dune part que jai appris plus de
commandes par cœur que nécessaire, par exemple `dap` et `yap` construites sur le commandes par cœur que nécessaire, par exemple `dap` et `yap` construites sur le
même principe, là où simplement savoir ce que signifie la commande aurait été un même principe, là où simplement savoir ce que signifie la commande aurait été un
gain de place en mémoire, et fait gagner en flexibilité. gain de place en mémoire, et fait gagner en flexibilité.
@ -100,41 +103,42 @@ Pour cela il existe pas mal de tutoriels:
* [Learn Vim For the Last Time: A Tutorial and Primer](https://danielmiessler.com/study/vim/#language) * [Learn Vim For the Last Time: A Tutorial and Primer](https://danielmiessler.com/study/vim/#language)
* [Learning Vim in 2014: Vim as Language](https://benmccormick.org/2014/07/02/062700.html) * [Learning Vim in 2014: Vim as Language](https://benmccormick.org/2014/07/02/062700.html)
Mais pour faire simple, et ce que j'aurais bien aimé qu'on me dise à mes débuts Mais pour faire simple, et ce que jaurais bien aimé quon me dise à mes débuts
(mais bon, après faut lire de la documentation rébarbative en anglais, et (mais bon, après faut lire de la documentation rébarbative en anglais, et
c'était pas très facile pour moi à lépoque), cest quune commande vim est en c'était pas très facile pour moi à lépoque), cest quune commande vim est en
fait… une phrase. fait… une phrase.
On demande une action (par exemple `=` qui signifie «indenter»), on donne un On demande une action (par exemple `=` qui signifie «indenter»), on donne un
champ daction (`ap` qui signifie «autour du paragraphe», où un paragraphe est champ daction (`ap` qui signifie «autour du paragraphe», où un paragraphe est
défini comme un bloc séparé par au moins deux retours chariots avant et après). défini comme un bloc séparé par au moins deux retours chariots avant et après).
Et là encore ce champ d'action peut être modifié, ainsi le `a` de `ap` signifie Et là encore ce champ daction peut être modifié, ainsi le `a` de `ap` signifie
_around_ (autour), et peut-être remplacé par `i` pour `inside`. _around_ (autour), et peut-être remplacé par `i` pour `inside`.
Pour les paragraphes, cela signifie prendre en compte ou non les lignes vides Pour les paragraphes, cela signifie prendre en compte ou non les lignes vides
autour de ce dernier, mais pour des parenthèses, cela peut-être plus autour de ce dernier, mais pour des parenthèses, cela peut-être plus
intéressant. intéressant.
Ainsi `ri(` permet de réécrire le contenu d'une parenthèse, ce qui peut être Ainsi `ri(` permet de réécrire le contenu dune parenthèse, ce qui peut être
utiles pour remplacer les arguments d'une fonction, là où `ra(` va aussi effacer utiles pour remplacer les arguments dune fonction, là où `ra(` va aussi effacer
les parenthèses lors de la réécriture. les parenthèses lors de la réécriture.
Si vous n'êtes pas certain de ce que vous faites, il peut être intéressant de se Si vous n'êtes pas certain de ce que vous faites, il peut être intéressant de se
placer en mode visuel (`v`) pour voir et assimiler ce quil se passe. C'est un placer en mode visuel (`v`) pour voir et assimiler ce quil se passe.
peu comme mettre des sous-titres. Cest un peu comme mettre des sous-titres pour être sûr de comprendre ce qu'il
se dit.
# Le mode visuel # Le mode visuel
Parlons de ce mode visuel d'ailleurs. Parlons de ce mode visuel dailleurs.
Comme beaucoup dutilisateur Linux, jai été formaté pour trouver que tout ce Comme beaucoup dutilisateur Linux, jai été formaté pour trouver que tout ce
qui se fait simplement en ligne de commande est mieux que de devoir faire treize qui se fait simplement en ligne de commande est beaucoup plus pur/élégant que de
clics pour arriver au même résultat. devoir faire treize clics pour arriver au même résultat.
Or comme tout dogmatisme, il révèle parfois ses limites et pousse à Or comme tout dogmatisme, il révèle parfois ses limites et pousse à
lobstination là où ça na pas forcément lieu dêtre. lobstination là où ça na pas forcément lieu dêtre.
Une des conséquences perverse de cette préconception est davoir ignoré le mode Une des conséquences perverse de cette préconception est davoir ignoré le mode
visuel, ou alors essayer de trouver de manière de men passer par moments alors visuel, ou alors essayer de trouver de manière de men passer par moments alors
qu'il permet de faire les choses avec un retour visuel qui permet de limiter les quil permet de faire les choses avec un retour visuel qui permet de limiter les
erreurs. erreurs.
Et de manière similaire à la frappe au clavier, la précision est plus importante Et de manière similaire à la frappe au clavier, la précision est plus importante
que la vitesse: on perd beaucoup plus de temps et dénergie à corriger une que la vitesse: on perd beaucoup plus de temps et dénergie à corriger une
faute que d'avoir pris quelques instants de plus pour garantir le résultat… sans faute que davoir pris quelques instants de plus pour garantir le résultat… sans
parler de la frustration induite. parler de la frustration induite.
## Changer la position du curseur visuel ## Changer la position du curseur visuel
@ -151,7 +155,8 @@ pression sur la touche `o`.
## Incrémenter une colonne de nombres ## Incrémenter une colonne de nombres
Si l'on souhaite créer une colonne de nombres (par exemple pour une énumération) comme ceci: Si lon souhaite créer une colonne de nombres (par exemple pour une énumération)
comme ceci:
``` ```
1 1
2 2
@ -167,26 +172,26 @@ Si l'on souhaite créer une colonne de nombres (par exemple pour une énumérati
Une technique consiste à insérer 10 fois 0: `10i0<Enter><Esc>`, supprimer la Une technique consiste à insérer 10 fois 0: `10i0<Enter><Esc>`, supprimer la
ligne surnuméraire `dd`, rentrer en mode visuel `v`, sélectionner le bloc (sil ligne surnuméraire `dd`, rentrer en mode visuel `v`, sélectionner le bloc (sil
est précédé dune ligne vide ou d'un début de fichier): `ip`, et incrémenter de est précédé dune ligne vide ou dun début de fichier): `ip`, et incrémenter de
manière globale `g<Ctrl+a>`. manière globale `g<Ctrl+a>`.
## Utiliser le mode visuel pour limiter certaines actions ## Utiliser le mode visuel pour limiter certaines actions
Parfois on est tenté de lancer de gros remplacements par expressions régulières On est parfois tenté de lancer de gros remplacements par expressions régulières
sur son fichier, mais on est pas toujours sûr de ce qu'on fait. sur son fichier, mais on est pas toujours sûr de ce quon fait.
Lorsqu'on se met en mode ligne de commande sous vim pour effectuer un Lorsquon se met en mode ligne de commande sous vim pour effectuer un
[remplacement](https://www.gnu.org/software/sed/manual/sed.html) par exemple, [remplacement](https://www.gnu.org/software/sed/manual/sed.html) par exemple,
cela va commencer la ligne par `'<,'>`, qui indique que laction se déroulera cela va commencer la ligne par `'<,'>`, qui indique que laction se déroulera
entre les marques `<` et `>` qui représentent le début et la fin de la sélection entre les marques `<` et `>` qui représentent le début et la fin de la sélection
visuelle. visuelle.
C'est ainsi possible de faire des tests pour vérifier si l'expression régulière Cest ainsi possible de faire des tests pour vérifier si lexpression régulière
fait bien ce qui est attendu d'elle sur un petit exemple avant de passer à fait bien ce qui est attendu delle sur un petit exemple avant de passer à
l'échelle. l'échelle.
Bien entendu, je ne recommande pas cette méthode, principalement parce Bien entendu, je ne recommande pas cette méthode, principalement parce
quaujourdhui il existe dautres méthodes pour faire du remplacement de masse. quaujourdhui il existe dautres méthodes pour faire du remplacement de masse.
Par exemple, une des raisons qui peut pousser à cela, est le renommage d'une Par exemple, une des raisons qui peut pousser à cela, est le renommage dune
variable dans un programme. variable dans un programme.
Désormais, il est possible de faire appel au « _language-server protocol_ » (LSP) pour Désormais, il est possible de faire appel au « _language-server protocol_ » (LSP) pour
faire cela: faire cela:
@ -197,15 +202,15 @@ faire cela:
Un autre point que je trouve important et que jai découvert un peu tard est la Un autre point que je trouve important et que jai découvert un peu tard est la
structure des dossier `.config/{n,}vim/`. structure des dossier `.config/{n,}vim/`.
J'ai en effet passé mes premières années avec un seul `.vimrc` avant de Jai en effet passé mes premières années avec un seul `.vimrc` avant de
létendre avec d'autres fichiers que je changeais (`source`) par la suite. létendre avec dautres fichiers que je changeais (`source`) par la suite.
Or, le dossier `$VIMHOME` est rangé de manière sémantique: Or, le dossier `$VIMHOME` est rangé de manière sémantique:
* [Vim Directory Structure](http://www.panozzaj.com/blog/2011/09/09/vim-directory-structure/) * [Vim Directory Structure](http://www.panozzaj.com/blog/2011/09/09/vim-directory-structure/)
* [Plugin Layout in the Dark Ages](https://learnvimscriptthehardway.stevelosh.com/chapters/42.html) * [Plugin Layout in the Dark Ages](https://learnvimscriptthehardway.stevelosh.com/chapters/42.html)
Bien entendu je nutilise par toute la structure, mais le point intéressant sont Nutilisant pas toute la structure, je vais me concentrer ici sur mon usage:
les dossiers `ftplugin` et `plugin`. les dossiers `ftplugin` et `plugin`.
Pour faire simple, le contenu de `plugin/*.{vim,lua}` sera automatiquement Pour faire simple, le contenu de `plugin/*.{vim,lua}` sera automatiquement
chargé au démarrage, et le contenu de `ftplugin/$FT.{vim,lua}` sera chargé chargé au démarrage, et le contenu de `ftplugin/$FT.{vim,lua}` sera chargé
@ -213,38 +218,41 @@ lorsque vous ouvrez un fichier reconnu comme `$FT` par son
[type de fichier](https://vimdoc.sourceforge.net/htmldoc/filetype.html). [type de fichier](https://vimdoc.sourceforge.net/htmldoc/filetype.html).
Ainsi, en ayant un fichier `ftplugin/pandoc.lua` avec le paramétrage de Ainsi, en ayant un fichier `ftplugin/pandoc.lua` avec le paramétrage de
[vim-pandoc-syntax](https://github.com/vim-pandoc/vim-pandoc-syntax) et mes [raccourcis pour pandoc]({filename}../tips/emails-md-fr.md) pour écrire [vim-pandoc-syntax](https://github.com/vim-pandoc/vim-pandoc-syntax) et mes
ce billet, il m'est facile de l'éditer par la suite et de retrouver quelle ligne [raccourcis pour pandoc]({filename}../tips/emails-md-fr.md) pour écrire
sert à quoi grâce au système de fichier. ce billet.
Par la suite, il est plus facile de l'éditer et de retrouver la signification
des différentes lignes grâce au système de fichier.
De manière similaire, je sais que `plugin/bepo.lua` est mon réarrangement De manière similaire, je sais que `plugin/bepo.lua` décrit mon réarrangement
partiel des raccourcis vim pour le [bépo](https://bepo.fr/). partiel des raccourcis Vim pour le [bépo](https://bepo.fr/).
# La navigation # La navigation
Un autre point important, est la navigation dans vos projets. En effet, à partir Un autre point important, est la navigation dans vos projets.
d'un moment, avoir un seul fichier pour tout devient irréaliste quel que soit le En effet, à partir dun moment, avoir un seul fichier pour tout devient
projet, et il convient de savoir naviguer rapidement entre différents irréaliste quel que soit le projet, et il convient de savoir naviguer rapidement
emplacements dans le fichier. entre différents emplacements dans le fichier.
Par soucis de généralité, nous allons ignorer les actions de navigations Par soucis de généralité, je vais, dans la suite, ignorer les actions de
spécifiques à certains plugins comme LSP. navigations spécifiques à certains plugins comme LSP.
## Sauter de fichier en fichier ## Sauter de fichier en fichier
Pour prendre un exemple de ma vie courante, j'utilise souvent LaTeX pour générer Pour prendre un exemple de ma vie courante, jutilise souvent LaTeX pour générer
des documents. Lorsque ces documents commencent à prendre de la place (par des documents.
exemple un [manuscrit de thèse](https://git.epheme.re/fmouhart/Manuscrit)) et Lorsque ces documents commencent à prendre de la place (par exemple un
quils sont séparés en plusieurs fichiers, on inclut les sous-fichiers à l'aide [manuscrit de thèse](https://git.epheme.re/fmouhart/Manuscrit)) et quils sont
de la macro `\include{filename}`. séparés en plusieurs fichiers, on inclut les sous-fichiers à laide de la macro
`\include{filename}`.
Pour aller directement à au fichier `filename.tex`, il suffit de placer le Pour aller directement à au fichier `filename.tex`, il suffit de placer le
curseur dessus et d'utiliser la commande `gf` (_go file_ pour le mnémonique, curseur au dessus et dutiliser la commande `gf` (_go file_ pour le mnémonique,
même si en terme de langue vim c'est pas exactement ça, c'est une approximation même si en terme de langue vim cest pas exactement ça, cest une approximation
suffisante). suffisante).
Bien entendu cette commande peut sétendre : Bien entendu cette commande peut sétendre :
[`<ctrl-w>gf`](https://vimdoc.sourceforge.net/htmldoc/windows.html#CTRL-W_gf) [`<ctrl-w>gf`](https://vimdoc.sourceforge.net/htmldoc/windows.html#CTRL-W_gf)
permet de l'ouvrir dans un [nouvel permet de louvrir dans un [nouvel
onglet](https://vim.fandom.com/wiki/Using_tab_pages). onglet](https://vim.fandom.com/wiki/Using_tab_pages).
Et cela fonctionne aussi pour les en-têtes en C par exemple ou dans nimporte Et cela fonctionne aussi pour les en-têtes en C par exemple ou dans nimporte
@ -254,48 +262,48 @@ quel situation où un chemin vers un fichier existe dans le fichier ouvert.
Si vous avez effectué la commande précédente (`gf`), pour revenir sur vos pas, Si vous avez effectué la commande précédente (`gf`), pour revenir sur vos pas,
il existe la commande `<Ctrl-o>` qui permet de revenir en arrière dans il existe la commande `<Ctrl-o>` qui permet de revenir en arrière dans
l'[historique de l[historique de
sauts](https://vimdoc.sourceforge.net/htmldoc/motion.html#jumplist), que vous sauts](https://vimdoc.sourceforge.net/htmldoc/motion.html#jumplist), que vous
pouvez visualiser à l'aide de la commande `jumps`. pouvez visualiser à laide de la commande `jumps`.
Vous pouvez aussi revenir en avant à l'aide de la commande `<Ctrl-i>`. Vous pouvez aussi revenir en avant à laide de la commande `<Ctrl-i>`.
C'est aussi pratique pour revenir plus haut après un grand déplacement (par Cest aussi pratique pour revenir plus haut après un grand déplacement (par
exemple une recherche avec `/`). exemple une recherche avec `/`).
## Repliements ## Repliements
Je ne vais pas rentrer dans les détails des repliements sous vim, surtout que Je ne vais pas rentrer dans les détails des repliements sous vim, surtout que
cest parfois les plugins qui le gèrent, mais apprendre à les ouvrir et les cest parfois les _plugin_s qui le gèrent, mais apprendre à les ouvrir et les
fermer peut-être utile alors je laisse ça ici: fermer est potentiellement utile alors je pose ça là:
* `zo`/`zc`: ouvrir/fermer d'un niveau le repli sous le curseur. * `zo`/`zc`: ouvrir/fermer dun niveau le repli sous le curseur.
* `zO`/`zC`: ouvrir/fermer complètement le repli sous le curseur. * `zO`/`zC`: ouvrir/fermer complètement le repli sous le curseur.
* `zm`/`zr`: ouvrir/fermer d'un niveau tous les replis. * `zm`/`zr`: ouvrir/fermer dun niveau tous les replis.
* `zM`/`zR`: ouvrir/fermer complètement tous les replis. * `zM`/`zR`: ouvrir/fermer complètement tous les replis.
Plus de ressources: Plus de ressources:
* [Learn Vim the smart way: Folds](https://github.com/iggredible/Learn-Vim/blob/master/ch17_fold.md) * [Learn Vim the smart way: Folds](https://github.com/iggredible/Learn-Vim/blob/master/ch17_fold.md)
# Le reste en vrac # Le reste en vrac
Quelques autres astuces plus ou moins utiles en vrac qui utilisent des concepts Quelques autres astuces plus ou moins utiles en vrac qui utilisent ou non des
présentés précédemment: concepts présentés précédemment:
* `%r)<Ctrl-o>r(`: en se plaçant sur le premier élément d'une paire (par exemple * `%r)<Ctrl-o>r(`: en se plaçant sur le premier élément dune paire (par exemple
des crochets), permet de les remplacer par des parenthèses. La commande va à des crochets), permet de les remplacer par des parenthèses. La commande va à
la paire associée avec `%`, remplace par une parenthèse fermante avec `r)`, la paire associée avec `%`, remplace par une parenthèse fermante avec `r)`,
revient en arrière avec `<Ctrl-o>` (donc au crochet ouvrant) et remplace par revient en arrière avec `<Ctrl-o>` (donc au crochet ouvrant) et remplace par
une parenthèse ouvrante via `r(`. une parenthèse ouvrante via `r(`.
* `@:`/`@@`: je n'ai rien dit sur les macros parce que si c'est puissant, c'est * `@:`/`@@`: je nai rien dit sur les macros parce que si cest puissant, cest
aussi un moyen simple de faire des erreurs, mais une utilisation un peu aussi un moyen simple de faire des erreurs, mais une utilisation un peu
détourné des macros est de remarquer que `@:` permet de relancer la commande détourné des macros est de remarquer que `@:` permet de relancer la commande
précédente (par exemple un `make`), et ainsi `@@` qui relance la macro précédente (par exemple un `make`), et ainsi `@@` qui relance la macro
précédente, permet de réeffectuer cette commande à moindre coût. précédente, permet de réeffectuer cette commande à moindre coût.
* `<Ctrl-x><Ctrl-f>`: complète un nom de fichier. Je voulais en dire plus sur la * `<Ctrl-x><Ctrl-f>`: complète un nom de fichier. Je voulais en dire plus sur la
complétion, mais pour le moment, ma configuration est un peu chaotique à ce complétion, mais pour le moment, ma configuration est un peu chaotique à ce
niveau et j'ai trois plugins qui se battent pour la même fonctionnalité, je niveau et jai trois plugins qui se battent pour la même fonctionnalité, je
me suis donc passé de cette section pour le moment. me suis donc passé de cette section pour le moment.
* `:r !<commande système>`: par exemple `:r !date` permet décrire la date * `:r !<commande système>`: par exemple `:r !date` permet décrire la date
actuelle sur la ligne suivante. De façon plus générale, cela permet décrire actuelle sur la ligne suivante. De façon plus générale, cela permet décrire