Ici vous trouverez mes prises de note de l'excellent ouvrage Vim practical de Drew Neil.
Au delà de ces notes je vous encourage vivement à consulter son livre et/ou son site vimcast.org.

×

Vim way & normal mode

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 dt;.
Qui supprimera tous les caractères jusqu'au caractères précédent le prochain ";"

; Répète la recherche sur la ligne sur la droite

, Répète la recherche sur la ligne sur la gauche

“Vim golf“ Jeu dont le principe et de faire une action en un minimum de commandes Practical Vim - Drew Neil

<C-a> ou <C-x> Sur la ligne incrémentera décrémentera le premier digitale rencontré

zz Centre la ligne courante verticalement

Insert mode

<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

Visual select mode

gv Re sélectionne la dernière sélection

Command line

:register Todo : refaire un point et voir plus précisement par rapport aux macros Presse papier multiple, assigné par lettre. La commande affiche la liste. 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

:% 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 :-2,-1t. Exemple, copie les lignes relatives -2 à -1 à la ligne courante "."

:move ou :m Pareil que copy mais en move, déplace quoi !

:normal
Exécute la commande en mode normal (par ex . ou A; ou une macro)
:normal G Nous déplacera au début 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

:write !{cmd|ex sh} Transmet à la commande les lignes du buffer à executer

[range]!{filtre} Applique le filtre à une fourchette de lignes.
Les filtres sont des commandes shell, comme sort ou autre.

Supprime toutes les lignes contenant le pattern.
:g/pattern/d

Supprime toutes les lignes ne contenant pas le pattern.
:v/pattern/d

Manage multiple files

Buffer

: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] Éxécutera la commande sur toute la liste

Split

: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 la fenêtre suivante

<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

File directory

:edit % Édite le fichier courant

:edit %:h Affiche 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'héxiste pas.
:!mkdir -p %:h

Word

w … fin d'une phrase. Début d'une autre …

w … fin d'une phrase. Début d'une autre …

b … fin d'une phrase. Début d'une autre …

B … fin d'une phrase. Début d'une autre …

e … fin d'une phrase. Début d'une autre …

E … fin d'une phrase. Début d'une autre …

ge … fin d'une phrase. Début d'une autre …

gE … fin d'une phrase. Début d'une autre …

Text object

i{delimiter} À l'intérieur du délimiteur

a{delimiter} Délimiteurs inclut

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

Mark

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.

Automatics marks

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éden

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 vimrc

Register

"ay Copier dans le presse papier "a"

"ap Colle le presse papier "a"

"Np N étant la position dans l'historique des coupers

:reg Historique

:reg 1 Atteint l'historique à une certaine position

_dd Grâce au caratère "_", suppression de la ligne sans mettre celle-ci dans le register

Macros

: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é à la lettre en minuscule,
l'enregistrement en cours

Exemple de macro avec incrementation

:let i=1<CR> Définir une variable à 1, avant le début de la macro
qa Commencer une macro enregistrer sur 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 variable
jse positionner au prochain endroit où l'on voudra continuer cette insertion q 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

Matching pattern

/\c{pattern} Force la casse insensible

/\C{pattern} Force la casse sensible

Regex

\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" sera en surbrillance

escape({string}, {chars}) Échappe le caractère {chars} dans {string}

/motif/commande Par exemple chercher mot et se mettre à la fin de ce mot, en faisant : /mot/e

// 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

Substitution

[range]s[ubstitution]/{pattern}/{string}/[flags] Structure d'une commande de substitution

Cratè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

Flags

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 lien, un motif vide vaut la dernière 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érence
Si dans le presse papier on a copié (yank) un contenu multilignes,
vim évaluera ce presse papier et remplacera par le contenu multilignes

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.
Comme ; en bash.

Global command

:[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 ?

:t Pour copy

Ctags

<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 tag, précédent, premier, dernier 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

Compile code

:make(!)
Lance make depuis Vim en gros
Les erreurs se trouve dans le QuickFix list
Vim saute à la première erreur rencontrée, si on veut rester dans le fichier utilisé !

Search project wide

:grep Met le résulat dans le quick fix buffer.
Ouvrable avec la commande :copen.
Les résultats sont interactif et parcourable 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 dossier en cours
## dans tout les fichiers de la liste d'arguments

:vim[grep]/<C-r>//*
<C-r>/ reprendra la précédente recherche

Autocompletion

<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 incluts
<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

Spell check

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

Fugitive

:Gstatus

Dans 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

Commit

cc Commit

ca Commit --amend

Glog

: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.

Gdiff

Pour revenir d'un :Gdiff
Se mettre sur le buffer working directory (ne pointant pas dans l'index git),
par exemple :on

Gedit

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

vim-gitgutter

Dans Gstatus

<leader>hp Prévisualisation du bloc

<leader>hs Ajoute le bloc dans l'index

<leader>hr Restaure le bloc

Autre

:!pythom -m json.tool Ré-indente le json sélectionné