Vim
Le 03/11/2020 Présentation par Loïc BRANSTETT
Qui suis-je ?


Loïc BRANSTETT
3ème année à EPITECH Strasbourg
Histoire
ed

ed
vi

vim

neovim

Sortez-moi de là!

:q
<Command> <Quit>
:q!
<Command> <Quit> <Force>
:qa
<Command> <Quit> <All>
:qa!
<Command> <Quit> <All> <Force>
:wq
<Command> <Write> <Quit>
:x
<Command> <Write?Exit>
:x!
<Command> <Write?Quit> <Force>
suffisant ?
man !
Ou êtes-tu ?
:help
<Command> <Help>
help
Apprenez à l'utiliser !
Vim est accompagné d'une impressionnante documentation.
Des plugins ajoutent également de la documentation à ce système
help
:h save-file
:h 'smartcase'
:h options.txt
:h :retab
:helpgrep tabs

Modes
Vim est un éditeur Modal
Modes
-
Normal
-
Visuel
-
Insertion
-
Command
-
....
INSERT MODE

NORMAL MODE

VISUAL MODE
Il y a en réalité 3 modes visuel
VISUAL MODE

Normal
VISUAL MODE

Ligne
VISUAL MODE

Block
COMMAND MODE

COMMAND MODE

Motions
Motions c'est le mouvement dans Vim


Saut de lignes
-
G => Bas du fichier
-
gg => Haut du fichier
-
30gg => 30ème ligne
-
:30 => 30ème ligne
Saut de lignes relatif
-
4k => 4 lignes plus haut
-
3j => 3 lignes en bas
Déplacement par mot
-
e: passer à la fin du mot
-
E: passer à la fin du MOT
-
w: passer au prochain mot
-
W: passer au prochain MOT
-
b: reculer d'un mot
-
B: reculer d'un MOT
Attendez une minute monsieur... un mot, un MOT, ...QUOI ?
-
Un mot est un mot ordinaire, tel que fin
-
Un MOT est tout jusqu'au prochain espace blanc, comme xml:foobar
Recherche
-
Une recherche (/) dans vim est également une motion.
-
Répéter une recherche avec n ou N est aussi une recherche
La plupart des motions prennent un nombre.
-
3b: reculer de 3 mots
-
10j: descendre de 10 lignes
-
2n: passer au deuxième résultat de recherche suivant
Commandes
Les commandes sont la façon dont vous dites à Vim de faire quelque chose.
Quelques commandes
-
d: supprime un caractère
-
c: modifier le texte (supprimer et passer en mode insertion)
-
r: remplacer un seul caractère
-
v: passer en mode visuel
-
y: copier la sélection
-
p: coller au niveau du curseur
-
u: annuler un changement (comme C-Z)
Beaucoup de commandes peuvent être combinées avec une motions.
[count] Command [count] Motion
La plupart des commandes prennent également un nombre.
Suppression de quelque chose
Lorsque vous utilisez la commande d, Vim s'attend à ce que vous lui disiez ce que vous voulez supprimer
Suppression effective de quelque chose
-
dd: supprime la ligne actuelle
-
d3j: supprime la ligne actuelle et les 3 lignes suivantes
-
dtx: supprime jusqu'au prochain x de la ligne en cours
-
d2t(: supprime jusqu'à la deuxième occurrence de (
-
d/foo: supprime jusqu'à la prochaine occurrence de foo
Mais ce n'est pas tout !
Tout ce système est extensible.
Des plugins et des mappages peuvent ajouter de nouveaux motions, commandes qui peuvent être combinés comme les éléments intégrés.
Un exemple
- tcomment: (dé)commenter une zone de texte (commande gc)
- vim-indent-object: sélection de zone de texte (ii pour sélection tous ce qui ais au même niveau d'indentation)

Avec votre curseur a l'intérieur du if, appuyez sur gcii pour commenter tout ce qui se trouve à l'intérieur de l'if.
Splits
-
:vs(plit) <filename>: split horizontal
-
:sp(lit) <filename>: split vertical

-
C^w + s: split horizontal
-
C^w + v: split vertical

-
C^w + h: aller au split de gauche
-
C^w + j: aller au split du bas
-
C^w + k: aller au split du haut
-
C^w + l: aller au split de droite

Répète la dernière édition.
La commande point
-
dd: supprime la ligne courante
-
.: supprime la ligne suivante
-
.: supprime encore
-
u: oops, annuler la dernière édition

Un exemple

Un autre exemple
- Rechercher CUR avec /CUR<entrer>
- Changer CUR avec ceABC<echap>
- Aller au prochain match: n
- Remplacer également: .
- ...
Macros
Bien que la commande point puisse être très utile et doive être utilisée autant que possible, vous voudrez parfois effectuer une commande plus complexe à plusieurs reprises.
Enregistrer une macro
-
qa: commencer à enregistrer dans le registre a
-
[commandes]: exécuter tous vos commandes
-
q: arrêter l'enregistrement de la macro
Exécuter une macro
-
Cela prend aussi un nombre
-
@@: répétez rapidement la dernière macro
@a: exécute la macro qui a été enregistrée dans le registre a
Configuer Vim
Vim est extrêmement configurable. Personnaliser Vim, c'est bien. Mais il y a aussi la possibilité qu'il devienne complètement différent d'un "Vim" normal.
Lorsque vous voulez commencer à configurer Vim, il peut être très intéressant de jeter un coup d'œil aux configurations des autres personnes.
Mais ne vous contentez pas d'utiliser la configuration de quelqu'un d'autre !
Un bon début est le plugin Vim-sensible de Tim Pope.
Options
Il y a trop d'options pour commencer à les expliquer
- set listchars ?
- set tabstop=4
- set guioptions+=T
- ...
Les mappages du clavier
Une autre méthode très puissante pour configurer Vim consiste à créer vos propres raccourcis clavier personnalisés.
-
map, noremap: map dans tous les cas
-
nmap, nnoremap: map en mode normal
-
vmap, vnoremap: map en mode visuel
-
imap, inoremap: map en mode insertion
-
cmap, cnoremap: map en mode commandes
Plugins
En utilisant des plugins, vous pouvez configurer Vim encore plus et lui faire faire des choses vraiment folles.
-
ctrlp: ouvrir rapidement des fichiers en tapant des parties de leur nom
-
fugitif + gitv: une intégration Git géniale
-
syntastic: vérification automatique de la syntaxe lors de la sauvegarde
-
vimwiki: le wiki entier dans vim
gitv
Gestion des plugins
Si vous comptez utiliser plus de deux plugins, utilisez un gestionnaire de plugins
-
Vundle: ma préférence, propre et simple
-
pathogen: moins cool mais fais le job
-
vim-addon-manager: pour les barbus
Ma configuration
$ cat ~/.config/nvim/init.vim
""" Plugins
set rtp+=~/.config/nvim/bundle/Vundle.vim
call vundle#begin('~/.config/nvim/bundle')
Plugin 'VundleVim/Vundle.vim' " Plugin manager
if $TERM !=? "linux"
Plugin 'itchyny/lightline.vim' " Status bar
endif
Plugin 'ervandew/supertab' " Tab completion
Plugin 'NLKNguyen/papercolor-theme' " Color scheme
Plugin 'https://git.x4m3.rocks/x4m3/vim-epitech.git' " Epitech plugin
Plugin 'airblade/vim-rooter' " cd to .git
Plugin 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plugin 'junegunn/fzf.vim' " Fuzzy search
Plugin 'tomtom/tcomment_vim' " Comment plugin
Plugin 'michaeljsmith/vim-indent-object' " Indent selector
call vundle#end()
""" Autres
...
Aller plus loin
-
Contrôle de l'orthographe
-
Terminal dans vim
-
tags, vimgrep
-
abréviations
-
Vimscript
Lectures suggérées
-
:help
-
Practical Vim de Drew Neil
-
Vimcasts (aussi de Drew Neil)
-
Stack Overflow
-
Cheat Sheet
-
Vim wiki
:q!
Workshop
Débutant
Novice
:Tutor ou vimtutor
Cheat sheet
Workshop

Workshop
$ brew install neovim
$ pacman -S neovim
$ yum install neovim
MacOS:
Arch/Manjaro:
Fedora:
$ apt-get install neovim
Debian:
Autres distribution: ici
Vim
By urgau-1
Vim
- 303