/Discover_Vim

Epitech workshop to learn how to use neovim

Découverte de vim (ou plutôt neovim 😏)

L'interface et les bases

L'interface

Neovim interface

Les bases

La notion de modes

Normal: Déplacements rapides, de modifications rapides...

Insertion: Insertion de textes

Remplacement: Remplacer du texte

Visual: Sélection

Visual-block: Sélection en bloc

Command: Mode d'éxécution de commandes

Les raccourcis de base

Les raccourcis sont utilisables en mode normal, visual et visual-block

Le deplacement

Possible de se déplacer avec les flèches

Cependant il est conseillé d'utiliser les raccourcis suivants:

h: Gauche

j: Bas

k: Haut

l: Droite

w: Aller au début du prochain mot

e: Aller à la fin du mot sur lequel est le curseur

b: Aller au début du mot sur lequel est le curseur

Écrire du texte

i: Passer en mode insertion avant le curseur

a: Passer en mode insertion après le curseur

s: Supprimer le caractère sous le curseur et passer en mode insertion

I: Passer en mode insertion au début de la ligne

A: Passer en mode insertion à la fin de la ligne

S: Supprimer la ligne actuelle et passer en mode insertion

r: Remplacer le caractère sur lequel est positionné le curseur

R: Passer en mode remplacement

J: Fusionner la ligne actuelle et celle d'en dessous

Presse-papier

yy: Copier la ligne actuelle

dd: Couper la ligne actuelle

p: Coller après le curseur

P: Coller avant le curseur

x: Couper le caractère sous le curseur

X: Couper le caractère avant le curseur

s et S gardent les éléments supprimés dans le presse-papier

Navigation

gg: Aller au début du fichier

G: Aller à la fin du fichier

H: Aller à la première ligne affichée

L: Aller à la dernière ligne affichée

:<xx>: Aller à la ligne avec un numéro

Recherche

/: Rechercher une string

n: Aller à la prochaine occurrence

N: Aller à la précédente occurrence

f: Rechercher dans la ligne et déplacer le curseur sur la première occurrence

t: Rechercher dans la ligne et déplacer le curseur avant la première occurrence

*: Rechercher le mot sur lequel est positionné le curseur

Autre

u: Annuler (Ctrl + z)

Ctrl + R: Refaire (Ctrl + y)

<Esc>: Passer en mode normal

La combinaison

Vim propose de combiner ces raccourcis afin d'augmenter la puissance de ceux-ci

dj: Couper la ligne actuelle et celle d'en dessous

Il est possible de combiner quasiment tous les raccourcis entre eux

Il est aussi possible d'utiliser des chiffres avec ces raccourcis

Par exemple

<nbr>j: Allez à nbr lignes après, de même avec h, k et l (tous les déplacements en somme)

On peut donc faire d3j pour couper la ligne actuelle et les trois d'en dessous

Et d3k pour au-dessus

d3l pour couper le caractère sous le curseur et les trois sur sa droite, pareil pour h

dfl: Pour couper jusqu'au prochain l dans la ligne

Essayer par exemple, de trouver la combinaison des raccourcis pour:

Supprimer le contenu entre des guillemets " à partir du curseur
dt"
Supprimer de la position du curseur jusqu'à la fin du fichier
dG
Copier les trois mots après le curseur
y3w

En bref, il est possible de faire beauuuuuuuucoup de combinaisons

Les commandes de base

Les commandes commencent toutes par : car on rentre ainsi dans le mode commande

:w: Sauvegarder

:q: Quitter

:x: Sauvegarder et quitter

:noh: Désactiver le 'surlignage' des recherches

:h: Ouvrir une page d'aide sur un sujet

:vs: Ouvrir une deuxième fenêtre

:ls: Lister les buffers ouverts

:b: Changer de buffer

:%s: Rechercher et remplacer

Les macros

Les macros permettent d'enregistrer une suite d'actions et de les refaires

Les macros sont identifiées par une lettre

Pour enregistrer une macro, il suffit en mode normal, d'appuyer sur q puis sur la lettre correspondant à la macro

Ensuite il suffit d'exécuter des actions, puis d'appuyer sur q pour finir l'enregistrement

Pour utiliser une macro, il faut utiliser un @ puis la lettre qui correspond à la macro

La configuration

Vim est configurable (et heureusement, sinon ça serait bien nul)

Pour vim de base, le fichier de configuration est ~/.vimrc

Dans notre cas, pour neovim, ce sera ~/.config/nvim/init.vim

C'est ici que l'on peut configurer vim

Pour plus d'informations sur ces configurations, vous avez mes dotfiles à disposition qui vous expliquent tous comme il faut

Comment faire de vim un vrai IDE en utilisant des plugins

La vraie force de vim, au-delà de ça, c'est les plugins

Ces plugins sont écrits en vimscript (ou lua) et sont créés par des utilisateurs

Pour les installer, il existe plusieurs méthodes

  • La plupart des plugins proposent ces méthodes d'installation sur leur github

  • Un plugin manager

Un plugin manager est un plugin lui aussi, qu'il va falloir installer à la main (pas le choix)

Et qui va permettre d'installer et de désinstaller des plugins très facilement

Il existe pas mal de plugin managers: vimplug, vundle, pathogen

Mais celui que j'utilise et recommande est vimplug

Pour l'installer, il faut suivre les instructions sur github

Il existe deux catégories de plugins

Les plugins passifs, qui tournent en arrière plan

La plupart du temps, ces plugins affichent des informations ou facilitent la vision de l'utilisateur


Les plugins actifs, qui se lancent lors d'une action de l'utilisateur

Ces plugins ne font des actions uniquement quand l'utilisateur le demande

Pour cela, les plugins actifs utilisent des commandes, par exemple :MakeHeader

Le problème ici, c'est que taper des commandes, c'est long et chiant

Vim permet donc de faciliter l'utilisation de ces commandes

Comment faire ses propres raccourcis

Pour faire ses propres raccourcis, il faut relier une commande (:command) à une combinaison de touches

La syntaxe et la suivante:

<mode>map <combinaison de touches> <commande(s)>

Par exemple

nmap <C-n> :NERDTreeToggle<CR>

Quelques plugins utiles

Vimplug

Github

Vimplug est le plugin qui permet de gérer facilement l'installation et la suppression d'autres plugins

Vimplug preview

Coc

Github

Coc, c'est la vie, il fait beaucoup de choses, dont l'autocompletion, les snippets, les linters et les formatters

Coc preview

Vim tek-header

Github

Vim tek-header est un plugin qui permet de générer les headers Epitech automatiquement (une nouvelle version arrive bientôt)

Vim tek-header preview

Auto pairs

Github

Auto pairs ferme automatiquement les délimiteurs de blocs ((), [], "", ''...)

Ce plugin facilite également leur identification

Auto pairs

Vim airline

Github

Airline permet d'avoir plein d'informations sur le fichier facilement (et joliment surtout :))

Airline preview

Airline preview

Onedark

Github

One dark est un thème de couleur

Onedark preview

Nightfox

Github

Nightfox est un autre thème de couleur

Onedark preview

Vim surround

Github

Vim surround est un plugin qui facilite l'utilisation des délimiteurs (", ', {}, []...)

Vim smoothie

Github

Vim smoothie est un plugin qui rend plus fluide les déplacements dans un fichier

Git messenger

Github

Git messenger affiche l'historique des commits d'une section de code

Git messenger preview

Nerdtree

Github

Nerdtree est un plugin qui permet d'avoir un arbre de fichiers

Nerdtree preview

Nerdtree git

Github

Nerdtree-git affiche des icônes suivant le statut git des fichiers

Nerdtree-git preview

Vim arduino

Github

Vim arduino permet d'utiliser un arduino directement avec vim

Indentline

Github

Indentline rends les tabulations plus visibles et lisibles

Indentline preview

Vim devicons

Github

Vim devicons permet d'avoir de jolis icônes

Vim devicons preview

Vim JSX pretty

Github

Ce plugin rends du code jsx joli

Vim better whitespace

Github

Permet d'identifier les espaces en trop

Vim better whitespace preview

Vim gitgutter

Github

Ce plugin permet d'identifier rapidement les modifications git sur un fichier

Vim git gutter

Vim CSS color

Github

Vim css color permet d'avoir un rendu en direct des couleurs

Vim CSS color preview

Markdown preview

Github

Ce plugin permet d'avoir une vue en direct d'un fichier markdown

Tabnine

Github

Tabnine est un plugin qui permet d'améliorer l'autocompletion

NerdCommenter

Github

Nerdcommenter permet de faciliter l'utilisation des commentaires

Instant nvim

Github

Intant vim est un plugin qui permet de faire de l'édition collaborative

Comment bien configurer de nouveaux plugins

Pour bien configurer un plugin, il est recommandé de lire entièrement leurs documentations sur leurs githubs respectifs

Il est également recommandé de séparer les configurations des plugins par fichiers

Des petits tips

Pour faciliter le passage en mode normal, on peut 'mapper' <Esc> sur une combinaison

La plupart des gens le map sur la combinaison de lettres jk

Dès que vous pensez que quelque chose qu'il serait utile d'avoir sur vim, cherchez sur internet

Il y a énormément de plugins vim, et bien souvent, le truc auquel vous pensez, bah ça existe

En bref

Comme vous avez pu le comprendre, vim est fait pour aller vite

Cependant, il est nécessaire de passer du temps sur sa configuration pour qu'il soit de plus en plus efficace

Si vous voulez vous documenter un peu plus sur vim et sur les plugins que je viens de vous montrer

Voici le lien de mes Dotfiles (ils contiennent de la doc sur les plugins)

Maintenant, la pratique !

Maintenant que vous avez toutes ces infos, je vous laisse configurer votre vim comme vous le souhaitez

Servez vous des liens pour faire votre configuration

Je suis là pour répondre à vos questions ou si vous avez des problèmes