← Index
Modal · Text editor

vim

Grammaire : {count}{operator}{motion}. Apprends les motions et les verbes, la combinatoire fait le reste.

VERSION · 9.x · Neovim 0.10+
CONFIG · ~/.vimrc · ~/.config/nvim/
HELP · :help · :Tutor

Modes 01

Sept modes — on parle toujours depuis le Normal mode.

Esc · Ctrl-[retour au mode Normal
iInsert (avant le curseur)
aInsert (après le curseur)
I · Adébut · fin de ligne (insert)
o · Onouvelle ligne dessous · dessus
vVisual char
VVisual line
Ctrl-vVisual block (colonne)
RReplace
:mode commande (Ex)
/ · ?recherche avant · arrière

Motions 02

Se déplacer — combinables avec un opérateur.

Caractère · ligne
h · j · k · l← ↓ ↑ →
0 · ^ · $col 0 · 1er non-blanc · fin
g_dernier non-blanc
Mot
w · Wmot suivant (w=ponctuation, W=WORD)
b · Bmot précédent
e · Efin du mot
gefin du mot précédent
Fichier · écran
gg · Gdébut · fin de fichier
123G · :123aller à la ligne N
Ctrl-d · Ctrl-udemi-page ↓ · ↑
Ctrl-f · Ctrl-bpage ↓ · ↑
H · M · Lhaut · milieu · bas de l'écran
zz · zt · zbcentrer · top · bottom
Char dans la ligne
f<c> · F<c>jusqu'au char (sur)
t<c> · T<c>jusqu'avant le char
; · ,répéter · inverse
Paragraphe · bloc
{ · }paragraphe ↑ · ↓
( · )phrase ↑ · ↓
% accolade/paren correspondante

Édition · Verbes 03

{op}{motion} — ex. d3w supprime 3 mots.

Opérateurs
ddelete (cut dans reg)
cchange (delete + insert)
yyank (copy)
p · Ppaste après · avant
> · <indent · désindent
=auto-indent
gu · gUlower · UPPER case
g~toggle case
!filtrer par commande externe
Raccourcis ligne entière
dd · yy · ccligne : cut · copy · change
D · Cjusqu'à fin de ligne
Y= yy (conventionnel)
Caractère
x · Xsupprimer après · avant
r<c>remplacer 1 char
s · Ssubstitute char · ligne
~toggle case char
Répétition · Undo
.répéter la dernière action
u · Ctrl-rundo · redo
Uannuler les changes de la ligne

Text objects 04

inner / around — combinables avec verbes.

iw · awmot (sans · avec espace)
iW · aWWORD
is · asphrase
ip · apparagraphe
i" · a"entre guillemets
i' · a'apostrophes
i( · a( · i) · a)parenthèses
i[ · a[ · i] · a]crochets
i{ · a{ · iB · aBaccolades (block)
i< · a<chevrons
it · attag HTML/XML
i` · a`backticks

# Patterns utiles

ci"   # change dans guillemets
da(   # delete y compris parens
yi{   # yank dans accolades
vit   # sélectionner contenu tag

Recherche · Remplace 05

:s est le couteau suisse.

Recherche
/<pattern>chercher vers le bas
?<pattern>chercher vers le haut
n · Nsuivant · précédent
* · #mot sous curseur ↓ · ↑
g* · g#sans frontière de mot
:noheffacer le highlight
:set hlsearch ichighlight · ignore-case
Substitution
:s/old/new/1ʳᵉ occ. de la ligne
:s/old/new/gtoutes les occ. de la ligne
:%s/old/new/gtout le fichier
:%s/old/new/gcavec confirmation
:%s/old/new/giignore-case
:5,20s/old/new/glignes 5 à 20
:'<,'>s/old/new/gsélection visuelle
&répéter dernier :s

# Captures & backrefs

# groupes : \( \) en vim-magic
:%s/\(\w\+\)_\(\w\+\)/\2-\1/g

# regex "très magique" (plus lisible)
:%s/\v(\w+)_(\w+)/\2-\1/g

Visual mode 06

Sélectionner d'abord, agir ensuite.

vchar visual
Vline visual
Ctrl-vblock visual (colonnes)
opermuter début/fin de sélection
gvre-sélectionner la dernière
Opérations depuis Visual
d · c · ydelete · change · yank
~ · U · utoggle · UP · low case
> · <indent
= auto-indent
:!cmdfiltrer via shell

# Édition colonne (Ctrl-v)

Ctrl-v → j...j → I → texte → Esc
# insère "texte" au début de toutes les lignes

Registres · Macros 07

" préfixe un registre.

Registres
"ay · "apyank · paste dans le registre a
"Ayappend au registre A
"+y · "+pclipboard système
"*y · "*psélection X11
"0pdernier yank (non pollué par d)
"_dblack hole (delete sans copier)
:reglister les registres
Ctrl-r acoller reg a en mode Insert
Macros
qa … qenregistrer dans a
@arejouer la macro a
@@rejouer la dernière
10@arejouer 10×
:reg avoir le contenu

Marks · Jumps 08

Signets + historique de position.

maposer le mark a (buffer-local)
mAmark global (entre fichiers)
`a · 'aaller exact · au début de ligne
:markslister
``position précédente (avant jump)
`.dernier changement
`^dernière position Insert
`[ · `]début · fin dernier yank/change
Ctrl-o · Ctrl-ijump-list ↑ · ↓
g; · g,change-list ↑ · ↓

Buffers · Splits · Tabs 09

Plusieurs fichiers à l'écran.

Buffers
:e <file>ouvrir un fichier
:ls · :bufferslister
:b <n|name>switch buffer
:bn · :bpsuivant · précédent
:bddelete buffer
Splits (windows)
:sp · :vspsplit H · V
Ctrl-w h/j/k/lnaviguer entre splits
Ctrl-w wsplit suivant
Ctrl-w cclose split
Ctrl-w oseul le courant
Ctrl-w =tailles égales
Ctrl-w _ · |maximiser H · V
Ctrl-w H/J/K/Ldéplacer le split
Tabs
:tabnew <file>nouvel onglet
gt · gTonglet ↓ · ↑
:tabc · :taboclose · keep only

Save · Quit · .vimrc 10

Ex-commands incontournables.

:wsauvegarder
:w <file>sauvegarder sous
:wasauver tous les buffers
:q · :q!quitter · forcer
:wq · ZZsauver & quitter
:qa · :qa!quitter tout
:x · ZQ:wq si modifié · quit sans save
:!cmdshell
:r !cmdinsérer la sortie
:r fileinsérer un fichier
" ~/.vimrc · essentiel
set nocompatible
syntax on
filetype plugin indent on

set number relativenumber
set expandtab tabstop=2 shiftwidth=2
set ignorecase smartcase
set incsearch hlsearch
set undofile
set clipboard=unnamedplus
set mouse=a
set scrolloff=8

let mapleader=" "
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>