Table of contents
<flèches directionnelles> déplacement selon les flèches
w aller au prochain mot
b aller au début du mot (et des mots précédents)
e aller à la fin du mot (et des mots suivants)
^ aller au début de la ligne
$ (ou 0) aller à la fin de la ligne
gg aller au début du document
G aller à la fin du document
:X aller à la ligne X (où X est un nombre)
( aller au début de la phrase
) aller à la fin de la phrase
{ aller au début du paragraphe
} aller à la fin du paragraphe
ctrl-f faire défiler le document d'une page (écran) vers la fin
ctrl-b faire défiler le document d'une page vers le début
a commence l'insertion après le curseur A commence l'insertion à la fin de la ligne C Supprime le reste de la ligne à partir du curseur et passe en mode insertion e commence l'insertion après le mot i (ou touche <Insert>) commence l'insertion depuis le curseur I commence l'insertion depuis le début de la ligne o commence l'insertion à la ligne suivante O commence l'insertion à la ligne précédente s commence l'insertion en effaçant le caractère sous le curseur S commence l'insertion en effaçant la ligne entière <Echap> quitter le mode édition
v passer en mode sélection "visuelle" (touche <Echap> pour en sortir) V passer en mode sélection "visuelle" par ligne ctrl-v passer en mode sélection "visuelle" par bloc dd couper la ligne entière dX couper la ligne ainsi que les X prochaines (où X est un nombre) D couper à partir du curseur yy (ou Y) copier la ligne yX copier la ligne ainsi que les X prochaines (où X est un nombre) p coller après le curseur P coller avant la ligne rX substitue le caractère sous le curseur par X
u annuler ctrl-r rejouer
:w sauvegarder (:w! pour forcer la sauvegarde si avertissement) :q quitter Vim (:q! pour quitter sans sauvegarder) :x quitter en sauvegardant (équivaut à :wq)
(ceci|cela)) doivent être échappés à l'aide d'un ''antislash'' ::%s/tout \(ceci\|cela\) pour ça/tout ça pour ça/
:e ouvrir un fichier dans un nouveau buffer :ls lister les buffers :bn aller au buffer suivant :bp revenir au buffer précédent :bd détruire le buffer courant (= à clore le fichier) :bX aller au buffer X (où X est un nombre entier, cf. :ls pour les identifiants des buffers existants) ctrl+^ intervertir le buffer courant avec le précédent
map. Exemple pour illustrer le propos : n'utilisant personnellement pas les raccourcis clavier <ctrl-n> et <ctrl-p> — permettant de déplacer le curseur respectivement à la ligne suivante et à la ligne précédente —, je les ai redéfinis comme ceci :
:map <C-n> :bn<CR> :map <C-p> :bp<CR>
Désormais, <ctrl-n> est un raccourci vers la commande :bn — qui, comme vue ci-dessus, permet d'aller au ''buffer'' suivant —, <ctrl-p> vers la commande :bp ; la séquence <CR> correspond à un "retour charriot" (''carriage return'' en anglais) et permet donc d'exécuter directement la commande définie dans la directive de ''mapping'' sans avoir besoin de taper sur la touche <Enter>.
ctrl-g
$ vim fichier1 fichier2 fichier3Pour passer de l'un à l'autre en descendant :
:nPour passer de l'un à l'autre en remontant :
:N
:syn on :set background=dark (si terminal sur fond sombre)
:r <fichier>
!!<cmd>
:%!<cmd>
ctrl-a (incrémente) ctrl-x (décrémente)
ctrl-p (sur un mot : autocomplète le mot, ou affiche une liste des complétions possibles) ctrl-x ctrl-l (sur une ligne : autocomplète la ligne courante si une ligne similaire existe)
dw (en début de ligne)
* (sur le mot ; recherche descendante) # (recherche ascendante)
guu passer la ligne en lettres minuscules gUU passer la ligne en lettres majuscules
% (sur le crochet/accolade/parenthèse)
:set paste (collez votre texte, puis ":set nopaste" pour réactiver l'auto-indentation)
/<mot> (recherche descendante) ?<mot> (recherche ascendante)Par défaut la recherche est sensible à la casse, pour lancer une recherche insensible à la casse, il faut précéder <mot> par \c :
/\c<mot> (recherche descendante) ?\c<mot> (recherche ascendante)Il est possible de paramétrer définitivement Vim pour que les recherches ne soient pas sensibles à la casse, en ajoutant la directive suivante dans votre .vimrc :
set ignorecase set hlsearch (pour mettre surbrillance les résultats de la recherche)
:%s/regexp/remplacement/g ("/gc" pour demander confirmation à chaque remplacement)
Il est possible de concentrer cette opération sur un intervalle de lignes :
:10,20s/regexp/remplacement/g (n'effectue la substitution que des lignes 10 à 20 inclues)
I (tapez ensuite votre chaîne de caractère ou simple caractère, par exemple "#" pour commenter tout un bloc) <Echap>
mX (poser une marque) `X (revenir à la marque)
:set number :set nonumber (pour désactiver l'affichage)
== sur une ligne seule, ou = sur un ensemble de lignes sélectionnées en mode visuel N>> (où N est un entier ; par exemple "5>>" indente 5 lignes à partir du curseur)
:1,10w nouveau_fichier.txt (ici, copie de la ligne 1 à la ligne 10 dans le fichier nouveau_fichier.txt)
:set list
:%s/\r//g
:g/regexp/d
Ainsi, il est par exemple possible de supprimer toutes les lignes commentées dans un fichier de configuration (:g/^#/d si le caractère de commentaires est "#").
:set makeprg=gcc\ -o\ %<\ % (générera un exécutable nommé d'après le fichier source sans le suffixe .c)
’. déplace le curseur au début de ligne où la dernière modification a eu lieu ou `. positionne le curseur sur l'emplacement exact de la dernière modification
<ctrl-r>=24*24 (insère 576 sous le curseur)
gf (ouvre le fichier dont le nom est écrit sous le curseur)
$ vim un_fichier.txt +15Cette ligne de commande ouvrira dans Vim le fichier
un_fichier.txt et positionnera le curseur à la ligne 15.
cw remplace le texte depuis le curseur jusqu'à la fin du mot courant c/ remplace le texte depuis le curseur jusqu'à la première occurrence de la chaîne recherchée
:w !sudo tee %
:set fdm=expr :set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
Pour "déplier" temporairement un bloc de commentaires (un bloc correspondant dans ce cas à plusieurs lignes consécutives commençant par le caractère "#"), placez votre curseur sur le pli correspondant au bloc compacté et tapez zo (ou pressez simplement <espace>), et zm pour le replier. Si vous avez déplié plusieurs blocs, vous pouvez tous les replier d'un coup avec zM ; à l'inverse, vous pouvez déplier tous les blocs d'un seul coup avec zi.
Source : Erik Rossen. Plus d'informations : Vim tips: Folding fun sur linux.com.
$ vim scp://marc@centra.soolbox.net//home/marc/monfichier.txt
/ : un séparant le nom de la machine distante du chemin vers le fichier, et un autre désignant la racine du système de fichier distant si vous spécifiez un chemin absolu./etc/vimrc ou .vimrc :
set modeline
Il suffit ensuite de lister sur une ligne commentée selon le langage de programmation si il s'agit de code ou d'un fichier de configuration, ou préfixée d'un signe # en cas de texte. Voici un exemple dans un script Python :
#!/usr/bin/python
# -*- Coding: utf-8 -*-
# vim: tabstop=4 fileencoding=utf-8
def hw():
print('hello world!')
hw()
La directives spécifiées sur la troisième ligne de ce script indique à Vim qu'au sein de ce document il doit formater les tabulations avec 4 caractères d'espace et que l'encodage de ce document est l'UTF-8 ; la ligne doit impérativement commencer, après le signe de commentaire, par une espace suivie de vim: puis encore une espace.
Taper la séquence `` (deux backticks) vous ramènera où vous étiez avant de faire une recherche ou un saut à un endroit spécifique dans le fichier ouvert.
Si le chemin d'un fichier est renseigné dans le fichier courant, il est possible de l'ouvrir directement depuis celui-ci, tapez simplement gf. Pour revenir au fichier principal utilisez ensuite <Ctrl> + o.
Vous avez déjà probablement pesté contre Vim lorsque vous avez placé une ligne en mémoire en vue de la coller plus tard, mais l'avez perdue entre temps pour avoir effacé une autre ligne avec la séquence dd. Il existe une parade qui permet d'effacer des lignes sans garder leur contenu en mémoire (et donc perdre le contenu de la précédente) en utilisant la séquence suivante :
"_dd
Lorsque vous êtes placé entre deux caractères tels que des guillemets, parenthèses ou encore accolades, taper la séquence ciX — où X est le dernier caractère bornant la zone, par exemple "}" — effacera tous le contenu compris entre ces guillemets/parenthèses/accolades et vous placera en mode "insertion". Note : cela fonctionne même sur plusieurs lignes.
Taper la séquence zt redessine l'affichage du document en plaçant la ligne actuelle en haut de la fenêtre ; une variante avec zz fait de même en plaçant la ligne actuelle au centre de la fenêtre.