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

: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

  • 288