- Normal mode
- Insert mode
- Visual select mode
- Command line
- Manage multiple files
- File directory
- Navigation
- Mark
- Navigate in file
- Register
- Macros
- Search
- Substitution
- Flags
- Global command
- Ctags
- Search project wide
- Autocompletion
- Spell check
- Fugitive
- Vim gitgutter
- Autre
C
Supprime de la position de la ligne jusqu'à la fin et bascule en insertion
S
Supprime toute la ligne et bascule en insertion
f{char}
Cherche le caractère sur la ligne sur la droite
F{char}
Cherche le caractère sur la ligne sur la gauche
t{char}
Cherche le caractère sur la ligne sur la droite et se place un caractère avant
T{char}
Cherche le caractère sur la ligne sur la gauche et se place un caractère avant
Note : f
, F
, t
, T
, servent de motion également
On peut faire une commande comme dtX
Qui supprimera tous les caractères jusqu'au caractères précédent le prochain X
;
Répète la recherche sur la ligne sur la droite
,
Répète la recherche sur la ligne sur la gauche
<C-a> ou <C-x>
Sur la ligne incrémentera ou décrémentera le premier digitale rencontré
zz
Centre la ligne courante verticalement
<C-h>
Supprime le caractère précédent
<C-w>
Supprime le mot précédent
<C-u>
Supprime tout ce qui se trouve derrière le curseur
<C-[>
Retour en mode normal
<C-r>
0 Coller en mode insertion
<C-r>=1+2<CR>
Évalue avant d'insérer (3)
<c-v>{code} ou <c-v>u{code}
Pour insérer un caractère par son code
gv
Re-sélectionne la dernière sélection
o
Alterne le curseur aux extrémités de la sélection
O
Alterne le curseur aux autres extrémités (mode visuel bloc)
:register
Affiche la liste des presses papier
La copie et la suppression empile les caractères dedans
Pour coller l'avant dernier faire "1p
Pour copier dans presse papier d'une lettre "z", faire "zyy
Cette liste commence par le register "" puis "0 ensuite "1 etc
:1,3p
Print les lignes 1 à 3
:%p
Toutes les lignes
:2+1,5-1p
On peut affiner une fourchette de lignes comme ceci
[range] copy address
ou
[range] co address
ou
[range] t address
Copie la fourchette ou la ligne à telle ligne, sans passer par le presse papier
Exemple :-2,-1t
copie les lignes relatives -2 à -1 à la ligne courante "."
:move
ou :m
Identique que copy
mais coupe.
:normal
Exécute la commande en mode normal (par ex . ou A; ou une macro)
:normal G
Nous déplacera à la fin du document
--> :normal v/toto
Sélectionnera toto
:execute "normal! >>"
Indentera la ligne
@:
Répète la dernière commande (ligne de commande)
:[a-z]<C-d>
Provoque la suggestion de commandes en mode commande,
comme tab à condition de définir les options wildmenu et wildmode
:write
ou :w
Sauvegarde
<C-f>
Bascule de command line à command line window
:read!{cmd|ex ls}
Insère la sortie standard de la commande dans le buffer
[range]!{filtre}
Applique le filtre à une fourchette de lignes.
Les filtres sont des commandes shell, comme sort ou autre.
:g/pattern/d
Supprime toutes les lignes contenant le pattern.
:v/pattern/d
Supprime toutes les lignes ne contenant pas le pattern.
:ls
Liste les buffers
:bnext
Buffer suivant
:bprev
Buffer précédent
:bfirst
Premier buffer
:blast
Dernier buffer
:bdelete n1 n2
ou :N, M bdelete
Supprime les buffers lister (mais ne supprime pas les fichiers)
:args
Liste les arguments fournit pour ouvrir des fichiers
:argdo [command]
Exécutera la commande sur toute la liste
:new
Ouvre un split vierge
:vnew
Ouvre un vsplit vierge
:sp (file)
Ouvre le fichier dans un nouveau split (horizontal)
:vsp (file)
Ouvre le fichier dans un nouveau split (vertical)
<C-w> <C-w>
peut s'écrire <C-w> w
Passe active le buffer suivant
<C-w> =
Égalise les fenêtres
<C-w> _
Maximise la taille de la fenêtre courante horizontalement
<C-w> |
Maximise la taille de la fenêtre courante verticalement
<C-w> t
Déplace la fenêtre split en un nouvel onglet
:edit %
Édite le fichier courant
:edit %:h
Ouvre le dossier du fichier courant
Bien configurer son path (dépôt git courant)
et utiser find de vim.
:Explore
Viens d'un plugin intégré à Vim "netrw",
qui permet de lire des fichiers à travers le réseau.
<C-g>
Nom et statut du fichier
Astuce : Créer le dossier du fichier courant qui est dans une arborescence qui n'existe pas.
:!mkdir -p %:h
w
Début du prochain mot
w
Début du prochain mot en ignorant certains caractères
b
Début du mot précédent
b
Début du mot précédent en ignorant certains caractères
e
Fin du mot
E
Fin du mot en ignorant certains caractères
gE
Fin du mot précédent
Les commandes suivantes sont à précéder d'une action : v|i|c|d…
i{delimiter}
Action à l'intérieur du délimiteur
a{delimiter}
Délimiteurs incluts
it
À l'intérieur du tag xml
at
Le tag xml
iw
Le mot
aw
Le mot et l'espace
iW
Le mot ne s'arrêtant qu'avec un espace
aW
Le mot avec l'espace, ne finissant qu'avec un espace
is
La phrase
as
La phrase avec l'espace
ip
Le paragraphe
ap
Le paragraphe et un saut de ligne
m{a-z}
Définit une marque sur la lettre choisie
{a-z}
Positionne le curseur sur la marque définie à la marque
Les marks avec une lettre en majuscule sont dites globales,
atteignable depuis un autre fichier.
Raccourcis | Contenu du buffer |
---|---|
`` | Position avant le dernier saut de curseur |
`. | Position du dernier changement |
`^ | Position de la dernière insertion |
`[ | Début du dernier changement |
`] | Fin du dernier changement |
`< | Début de la dernière selection |
`> | Fin de la dernière selection |
Voir le plugin matchit qui permet d'utiliser le symbole %
,
pour faire correspondre le début et la fin d'un nœud xml.
<C-o> <C-i>
Précédente, suivante position du curseur
:jumps
Liste des positions du curseur
( )
Phrase suivante, précédente
{ }
Paragraphe suivant, précédent
H
M
L
Respectivement met le curseur sur l'écran (sans scroller),
en haut,
au milieu,
en bas
gf
"Go to file", atteint/ouvre le fichier dont l'adresse est sous le curseur.
Mais bien régler son path
On peut préciser à vim une liste de suffixes,
que vim ajoutera au fichier qu'il cherche sans le trouver avec la commande gf
<C-i>
En mode insertion, indente comme tab
:changes
Liste des changements
g;
g,
Positionne le curseur sur le changement précédent, suivant
vim -u NONE -N
Lancer vim sans plugin et sans configuration
"ay
Copier dans le presse papier "a"
"ap
Colle le presse papier "a"
"Np
N étant la position dans l'historique des couper
:reg
Historique
:reg 1
Atteint l'historique à une certaine position
_dd
Grâce au caractère _
, suppression de la ligne sans mettre celle-ci dans le register
:reg {a-z}
Voir la description de la macro {a-z}
@@
Exécute la dernière macro exécutée (en fait la dernière commande)
q{A-Z}
Ajoutera à la fin de la macro assignée à la lettre en minuscule,
l'enregistrement en cours
:let i=1<CR>
Définir une variable à 1, avant le début de la macroqa
Commencer une macro enregistrée à la lettre "a"I<C-r>=i<CR>
Insertion avant le premier caractère de la ligne, de la variable évaluée<Esc>
Sortir du mode d'insertion:let i +=1<CR>
Incrémenter la variablejse
positionner au prochain endroit où l'on voudra continuer cette insertionq
Arrêter l'enregistrement de la macro
Il ne reste plus qu'à exécuter la macro autant de fois que nécessaire en faisant :
@a
/\c{pattern}
Force la casse insensible
/\C{pattern}
Force la casse sensible
Les accolades : échapper les ouvrantes
Les crochets : ne pas à échapper (sauf littéral)
Les parenthèses : tout échapper
\v
"Very magic", regex plus traditionnelle,
Voir :h /character-classes
\V
"Verbatim", pour faire facilement du littéral
<motif>
Délimite le mot plus facilement
/mo\zsti\zef
Délimite la recherche, ici seul "ti" de "motif" sera en surbrillance
escape({string}, {chars})
Échappe le caractère {chars} dans {string}
//
Faire une recherche vide revient à chercher le dernier pattern.
Fonctionne pour / ? substitute etc
:noh
Enlève la surbrillance de la recherche une fois
/l[^a]
Trouve "le", "li" … tous sauf "la"
Les parenthèses d'une recherche capture le résultat dans groupe,
appelable par \1
etc
<C-r> "
Colle en insertion
Structure d'une commande de substitution : [range]s[ubstitution]/{pattern}/{string}/[flags]
Caractères spéciaux | Définition |
---|---|
\r | Insère un retour à la ligne |
\t | Insère une tabulation |
\ | Insère un backslash |
\1 | Insère le premier groupe capturé |
\2 | Insère le deuxième groupe capturé (jusqu'à 9) |
\0 | Insère la capture entière |
& | Insère la capture entière |
~ | ??? Utilise la chaine capturée précédemment ? À vérifier |
={Vim script} | Évalue le script et utilise le résultat pour le remplacer |
g
Global, toutes les occurrences
n
Compte et ne substitue pas
c
Demande confirmation, voir le tableau ci-dessous pour voir les options
Flags | Définition |
---|---|
y | oui |
n | non |
q | quitte la substitution |
l | "last" remplace ce dernier et quitte |
a | "all" remplace tout sans confirmation |
On peut pendant cette phase interactive faire :
<C-e>
ou <C-y>
pour faire défiler la page
Dans certains cas il peut être plus simple et plus claire,
de faire une recherche d'abord et d'examiner,
et enfin de faire une substitution (en faisant une recherche vide pour utiliser la précédente recherche).
<C-r> /
Colle la dernière recherche en mode insertion
:%s//\=@0/g
en décomposé :
//
vide donc correspond à la dernière recherche\=
évalue le script@0
presse papier par référenceg
global
Si dans le presse papier on a copié (yank) un contenu multi-lignes, vim évaluera ce presse papier et remplacera par le contenu multi-lignes
g&
Répète la dernière substitution, sur toutes les lignes
&&
Répète la dernière substitution, avec les mêmes "flags"
Voir la commande submatch qui permet de substituer à l'intérieur d'une substitution
:let dico = {"a" : 1, "b" : 2}
Déclarer un tableau associatif (peut être pratique pour échanger 2 mots par exemple)
Voir le plugin abolish
|
sert à chainer plusieurs commande.
:[range]global[!]/{pattern}/{cmd}
!
pour inverser la recherche, vglobal
peut servir dans ce sens aussi ?
{cmd}
par défaut print
:d
ou :delete
est une commande global ?
<C-]>
Saute à la définition du tag sous le curseur
<C-t> t ou
:pop
Reviens en arrière après avoir vu la définition du tag
g<C-]>
Dans le cas de plusieurs résultats, présente une liste
:tnext
:tprev
:tfirst
:tlast
Respectivement : prochain, précédent, premier, dernier tag de la liste de résultats
:tselect
Liste les tags trouvés
:tjump
Liste les tags trouvés, mais si il n'y en a qu'un saute vers celui-ci
:grep
Met le résultat dans le quick fix buffer.
Ouvrable avec la commande :copen
.
Les résultats sont interactif et peuvent être parcouru par les commandes :cnext
etc
Cette commande est configurable,
on peut préciser à vim quelle commande shell lancer (comme ack ou autre)
:vimgrep[!]/{pattern}/[g][j]/file
[j]
ne saute pas automatiquement sur le premier résultat
*
dans tout le dossier
**
récursif
%
dans le fichier en cours
##
dans tout les fichiers de la liste d'arguments
:vim[grep]/<C-r>//*
<C-r>/
Pendant au milieu de la commande, reprendra la précédente recherche
<C-p>
et <C-n>
suggestion précédente et suivante
Sommaire des commandes d'auto-complétion
Commande | Définition |
---|---|
<C-n> |
Mots clés générique |
<C-x><C-n> |
Mots clés du buffer |
<C-x><C-i> |
Mots clés des fichiers inclus |
<C-x><C-]> |
Mots clés des tags |
<C-x><C-k> |
Recherche dans le dictionnaire |
<C-x>s |
Recherche dans les langues |
<C-x><C-l> |
Complétion de la phrase entière |
<C-x><C-f> |
Nom de fichier |
<C-x><C-o> |
Omni-complétion |
Commandes de la fenêtre de complétion
Commande | Effet |
---|---|
<C-n> ou flèche du bas |
Suggestion suivante |
<C-p> ou flèche du haut |
Suggestion précédente |
<C-y> |
Accepte la suggestion suivante |
<C-e> |
Sort du menu et reviens au mot tapé originalement |
z=
Suggestion de correction
1z=
Accepter la 1ère suggestion
zg
Ajouter au dictionnaire le mot sous le curseur
zw
Enlève du dictionnaire
zug
Annule l'action d'ajout ou de suppression au dictionnaire
:Gstatus
r
Rafraichit Gstatus
-
Ajoute ou retire de l'index le fichier sous le curseur
o
Ouvrir le fichier sous le curseur, dans un split
O
Ouvrir le fichier sous le curseur, dans un nouvel onglet
p
Fait un add -p sur le fichier sous le curseur
Pointer vers le fichier désiré (par exemple avec ctl+n
ou ctrl+p
) et faire shift+D
Voir le diff [--staged] pour le fichier
cc
Commit
ca
Commit --amend
:Glog --
Place le log dans le buffer quickfix, mais il reste une validation avant de voir celui-ci.
:Glog -- %
Même chose que précédemment mais concernant le fichier courant.
:on
pour revenir d'un :Gdiff
En cas de manipulation hasardeuse,
si on veut récupérer le fichier se trouvant dans le working directory,
plutot qu'une version dans l'index de git, faire:
:Gedit
:Gedit HEAD:% Voir le fichier courant à une certaine révision
Pratique dans un buffer vertical
<leader>hp
Prévisualisation du bloc
<leader>hs
Ajoute le bloc dans l'index
<leader>hr
Restaure le bloc
:!python -m json.tool
Ré-indente le json sélectionné