Relecture
This commit is contained in:
parent
47ad5bcd78
commit
66a2acaad7
@ -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 j’aurais 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 s’avère que j’utilise 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 qu’il est parfois compliqué de
|
d’apprentissage n’est pas des plus douce, et qu’il est parfois compliqué de
|
||||||
trouver l'information que l'on cherche… notamment si on ignore qu'elle existe.
|
trouver l’information que l’on cherche… notamment si on ignore qu’elle existe.
|
||||||
|
|
||||||
À ce sujet, je ne peux que recommander les rencontres avec d'autres usagers,
|
À ce sujet, je ne peux que recommander les rencontres avec d’autres 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 l’occasion 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 n’est 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 d’accè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 j’aurais 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.
|
n’essayez pas de tout intégrer d’un coup : c’est un coup à se décourager.
|
||||||
D’autant plus que vim est avant tout un couteau-suisse, ainsi on ne va pas
|
D’autant 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 c’est pas
|
utiliser la lime à ongle pour couper du fromage : ça peut fonctionner mais c’est
|
||||||
très pratique.
|
pas très pratique.
|
||||||
Toutes les commandes et techniques ne se valent donc pas suivant l’usage de ViM
|
Toutes les commandes et techniques ne se valent donc pas suivant l’usage de ViM
|
||||||
que l’on a.
|
que l’on a.
|
||||||
|
|
||||||
Ce billet n'est donc pas un cours pour apprendre à utiliser vim, mais simplement
|
Ce billet n’est 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 d’ailleurs pas aborder le point des modules en détails et essayer de
|
||||||
|
rester le plus agnostique possible.
|
||||||
Néanmoins, comme ce billet ne s’adresse pas nécessairement à des personnes qui
|
Néanmoins, comme ce billet ne s’adresse 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 j’ai découvert vim, comme indiqué dans la première phrase de ce billet,
|
||||||
ce qui m'a marqué est le mot « **modal** ».
|
ce qui m’a marqué est le mot « **modal** ».
|
||||||
Je pensais qu’il s’agissait de la partie importante dans la description de vim,
|
Je pensais qu’il s’agissait 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 d’emacs ou autre.
|
||||||
En effet, lors de l'apprentissage de vim, la première réaction naturelle est de
|
En effet, lors de l’apprentissage 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 d’un mode à l’autre 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 n’est 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ù l’on souhaite aller en trois
|
naviguer entre ses différents fichiers pour aller exactement où l’on souhaite
|
||||||
entrées de touches, mais c'est la _langue_ de vim.
|
aller en trois entrées clavier, mais c’est la _langue_ de vim.
|
||||||
|
|
||||||
Ainsi, lors de l'apprentissage, il est important de comprendre ce qu'il se
|
Ainsi, lors de l’apprentissage, il est important de comprendre ce qu’il 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 qu’il ne faut pas copier/coller des lignes de commandes qu’on
|
||||||
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 qu’on 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 j’ai appris à utiliser vim, j’ai 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 d’abstraction fait d’une part que j’ai 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 j’aurais bien aimé qu’on 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), c’est qu’une commande vim est en
|
c'était pas très facile pour moi à l’époque), c’est qu’une 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 d’action (`ap` qui signifie « autour du paragraphe », où un paragraphe est
|
champ d’action (`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 d’action 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 d’une 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 d’une 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 qu’il se passe. C'est un
|
placer en mode visuel (`v`) pour voir et assimiler ce qu’il se passe.
|
||||||
peu comme mettre des sous-titres.
|
C’est 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 d’ailleurs.
|
||||||
Comme beaucoup d’utilisateur Linux, j’ai été formaté pour trouver que tout ce
|
Comme beaucoup d’utilisateur Linux, j’ai é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 à
|
||||||
l’obstination là où ça n’a pas forcément lieu d’être.
|
l’obstination là où ça n’a pas forcément lieu d’être.
|
||||||
Une des conséquences perverse de cette préconception est d’avoir ignoré le mode
|
Une des conséquences perverse de cette préconception est d’avoir ignoré le mode
|
||||||
visuel, ou alors essayer de trouver de manière de m’en passer par moments alors
|
visuel, ou alors essayer de trouver de manière de m’en passer par moments alors
|
||||||
qu'il permet de faire les choses avec un retour visuel qui permet de limiter les
|
qu’il 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 d’avoir 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 l’on 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 (s’il
|
ligne surnuméraire `dd`, rentrer en mode visuel `v`, sélectionner le bloc (s’il
|
||||||
est précédé d’une ligne vide ou d'un début de fichier): `ip`, et incrémenter de
|
est précédé d’une ligne vide ou d’un 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 qu’on fait.
|
||||||
Lorsqu'on se met en mode ligne de commande sous vim pour effectuer un
|
Lorsqu’on 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 l’action se déroulera
|
cela va commencer la ligne par `'<,'>`, qui indique que l’action 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
|
C’est ainsi possible de faire des tests pour vérifier si l’expression régulière
|
||||||
fait bien ce qui est attendu d'elle sur un petit exemple avant de passer à
|
fait bien ce qui est attendu d’elle 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
|
||||||
qu’aujourd’hui il existe d’autres méthodes pour faire du remplacement de masse.
|
qu’aujourd’hui il existe d’autres 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 d’une
|
||||||
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 j’ai découvert un peu tard est la
|
Un autre point que je trouve important et que j’ai 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
|
J’ai 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 d’autres 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 n’utilise par toute la structure, mais le point intéressant sont
|
N’utilisant 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 d’un 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, j’utilise 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
|
||||||
qu’ils 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 qu’ils sont
|
||||||
de la macro `\include{filename}`.
|
séparés en plusieurs fichiers, on inclut les sous-fichiers à l’aide 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 d’utiliser 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 c’est pas exactement ça, c’est 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 l’ouvrir 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 n’importe
|
Et cela fonctionne aussi pour les en-têtes en C par exemple ou dans n’importe
|
||||||
@ -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 à l’aide de la commande `jumps`.
|
||||||
|
|
||||||
Vous pouvez aussi revenir en avant à l'aide de la commande `<Ctrl-i>`.
|
Vous pouvez aussi revenir en avant à l’aide de la commande `<Ctrl-i>`.
|
||||||
|
|
||||||
C'est aussi pratique pour revenir plus haut après un grand déplacement (par
|
C’est 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
|
||||||
c’est parfois les plugins qui le gèrent, mais apprendre à les ouvrir et les
|
c’est 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 d’un 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 d’un 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 d’une 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 n’ai rien dit sur les macros parce que si c’est puissant, c’est
|
||||||
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 j’ai 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
|
||||||
|
Loading…
Reference in New Issue
Block a user