Vim

De Linuxmemo.

Sommaire

[modifier] Commandes de bases

Commande Alternative Explication
k Se déplacer vers le haut
j Se déplacer vers le bas
h Se déplacer vers la gauche
l Se déplacer vers la droite

[modifier] Les mouvements

Commande Alternative Explication
$ Aller en fin de ligne
0 Aller en début de ligne
^ Aller au premier caractère qui n'est pas un espace ou une tab de la ligne
gg Aller en début de document
G Aller en fin de document
:<n> Aller à la ligne <n> (où <n> est un nombre entier)
f<s> Jusqu'au caractère <s> en allant vers l'avant
F<s> Jusqu'au caractère <s> en allant vers l'arrière
t<s> Jusqu'au caractère <s> en allant vers l'avant et en s'arrêtant juste avant
T<s> Jusqu'au caractère <s> en allant vers l'arrière et en s'arrêtant juste avant

[modifier] Suppression

Commande Alternative Explication
x Le caractère sous le curseur
s Comme x mais entre en mode insertion après
dd La ligne sous le curseur
dw Le mot sous le curseur
d$ D Supprime jusqu'à la fin de la ligne
d<mouvement> Du curseur à la cible du déplacement
d<sélection> La sélection précisée
c Se comporte comme d mais entre en mode insertion après la suppression
u Annulation de la dernière action
CTRL+R Remettre (annuler l'annulation)

[modifier] Remplacement

Le caractère sous le curseur r puis le caractère que l'on veut mettre. Exemple: sur le mot "lepin", se positionner sur le "e", puis faire un ra remplacera le "e" par un "a".

Entrer en mode remplacement: <Insert><Insert> (double appui sur la touche <Insert>) vous permettra d'entrer en mode remplacement, c'est à dire que le texte que vous saisirez remplacera ce qu'il y a en dessous du curseur. La touche R permet également de le faire.

[modifier] Macro

Nous ouvrons ce fichier avec vim, puis, pour déclencher l'enregistrement de la macro, nous tapons :

qa

q = enregistrement de la macro

a = nom de la macro

Un avis : Enregistrement survient et tout ce que nous tapons à présent est l'enregistrement de cette macro nommée “a”. Nous pouvons voir en direct sur le texte ce que notre commande vim exécute sur la ligne visée. Terminer la macro par :

q

En cas d'erreur, il suffit de quitter la macro par :

q

puis, d'utiliser la lettre :

u

pour restaurer la ligne et recommencer la macro différemment, en la nommant de manière identique.

Pour relancer cette macro nommée “a”, tapons :

@a
2@a

2 = exécuter 2 fois. À noter que le nombre 2 de la répétition s'adapte aux nombres de lignes que nous voulons modifier. Il peut être supérieur à l'exemple présenté ici. @a = la macro nommée “a”

Et sur validation, les lignes visées seront modifiées.

Il est possible de modifier les macros ! Il suffit de manipuler les registres (registers) qui stockent (entre autres) le contenu des macros. Pour les voir, faites :

:registers

Pour faire appel à ces registres il faut taper " suivi du nom du registre. Par exemple pour coller le registre t dans le document courant je peux faire :

"tp

Il est alors possible d'opérer à toute sorte de changements sur cette ligne pour finalement la recopier dans le registre :

"ty

Voilà, vous savez maintenant comment modifier vos macros.

[modifier] Options pour les substitutions

 
%s/foo/bar/g :

globale

 
%s/foo/bar/gc :

globale et demande confirmation

 
%s/foo/bar/gci :

globale, demande confirmation et ignore la caste

 
%s/foo/bar/gcI :

globale, demande confirmation et respect la caste

range:
{number}	an absolute line number
.		the current line			  *:.*
$		the last line in the file		  *:$*
%		equal to 1,$ (the entire file)		  *:%*
*		equal to '<,'> (the Visual area)	  *:star*
't		position of mark t (lower case)		  *:'*
/{pattern}[/]	the next line where {pattern} matches	  *:/*
?{pattern}[?]	the previous line where {pattern} matches *:?*
\/		the next line where the previously used search
		pattern matches
\?		the previous line where the previously used search
		pattern matches
\&		the next line where the previously used substitute

pattern matches

[modifier] Action sur recherche

:g/search pattern/command
exemple supprimer les lignes vides
:g/^$/d

[modifier] Astuces

  • Afficher les numéros de lignes:
:set nu et :set nu! (pour les cacher)
  • Convertir tout en minuscules
ggVGu
Explication :
GG - va à la première ligne de texte
V - tourne sur une sélection visuelle, en mode ligne
G - va à la fin du fichier (en ce moment que vous avez sélectionné tout le texte)
u - minuscule zone sélectionnée
  • Convertir tout en majuscules
ggVG[shift]u
  • Changer la case
sous le caractère courant: ~
sous le mot courant: g~w
sous les 3 mots courant: g~3w
sous la ligne courante: guu ou gUU
  • Afficher les caractères invisibles
:set list
:set list!

Dans le paramétrage par défaut on à les caractères spéciaux de défini ainsi :

: ctrl+v suivi du code du caractère. Par exemple, ctrl+v u 0 3 b 4 donnera δ. (u pour unicode, 03b4 est l'identifiant numérique du delta minuscule dans la norme unicode). 
Tabulation : ^I (^I s'obtenant comme il est dit ci dessus: Ctrl V + Ctrl i)
Saut de ligne : $

Mais on peut personnaliser ces caractères avec la commande set listchars.

Les caractère spéciaux invisibles personnalisables sont :

Saut de ligne : eol
Tabulation : tab
Espaces de fin de ligne : trail
Espace insécable : nbsp
  • Suppression des lignes commençant par un #
:g/^#/d
  • Supprimer des lignes vides
:g/^$/d
  • Se positionner directement sur un nom de variable à l'ouverture d'un fichier de config
vim +/nom_variable /etc/fichier_de_conf
  • Commenter de la ligne courante jusqu’à la fin du fichier
:.,$s/^/#/

Les opérateurs ^et $ indiquent des positions (début et fin de ligne) et pas des caractères, c'est pour ça qu'il ne faut pas les reprendre dans le deuxième argument.

  • Commenter plusieurs lignes d’un coup
1)_ CTRL+V sur le premier caractère de la première ligne à commenter,
2)_ puis sélectionner toutes les lignes voulues avec la flèche du bas ou la touche J
3)_ Maj+i (I majuscule)
4)_ Insérer le caractère de commentaire (# ou // ou n’importe quoi d’autre )
5)_ Esc, Esc

[modifier] Liens externes

[modifier] Intervale

On peut donner un intervalle à toute les fonctions du mode Ex (ou command), celles qui commencent par : pour être clair. La combinaison d3w est une commande du mode normal, donc si tu lui donner un intervalle tu dois utiliser la commande :normal pour exécuter des commandes du mode normal dans le mode Ex:

:10,20 normal d3w

[modifier] Memo total

source: http://tnerual.eriogerg.free.fr/vimqrc-fr.html

VIM - CARTE DE RÉFÉRENCE RAPIDE

<tbody> </tbody>

Mouvement simple
h l k jlettre à gauche, droite ; ligne en haut, bas
b wmot à gauche, droite
ge efin du mot à gauche, droite
{  }début du paragraphe précédent, suivant
( )début de la phrase précédente, suivante
0 gmdébut, milieu de ligne
^  $première, dernière lettre de la ligne
nG nggligne n, par défaut la dernière, première
n%pourcentage n du document (<i>n</i> obligatoire)
n|colonne n de la ligne courante
%autre parenthèse, crochet, commentaire, #define
nH nLligne n depuis le début, la fin de la fenêtre
Mmilieu de la fenêtre

Insertion & remplacement mode insertion
i ainsertion avant, après le curseur
I Ainsertion au début, fin de ligne
gIinsertion à la première colonne
o Onouvelle ligne au dessous, dessus du curseur
rcremplace la lettre sous le curseur par c
grccomme r, mais sans changer le formattage
Rremplace le texte à partir du curseur
gRcomme R, mais sans changer le formattage
cmremplace le texte du mouvement m
cc or Sremplace la ligne courante
Cremplace jusqu'à la fin de la ligne
sremplace un caractère et insère
~change la casse et avance d'une lettre
g~mchange la casse du mouvement m
gum gUm minusc., majusc. le texte du mvt. m
<m >mdécale à gauche, droite le texte du mvt. m
n<< n>>décale n lignes à gauche, droite

Suppression
x Xsupprime le caractère sous, avant le curseur
dmsupprime le texte du mouvement m
dd Dsupprime la ligne courante, la fin de la ligne
J gJjointe la ligne courante et suivante, sans espace
:rdsupprime les lignes d'intervalle r
:rdxsupprime l'intervalle r dans le registre x

Mode insertion
^Vc ^Vninsère le car. c littéralement, valeur déc. n
^Ainsère le texte précédemment inséré
^@comme ^A & stoppe l'insertion mode commande
^Rx ^R^Rxinsère le contenu du reg. x, littéralement
^N ^Psaisie automatique avant, après le curseur
^Wsupprime le mot avant le curseur
^Usupprime le texte inséré dans la ligne en cours
^D ^Tdécale à gauche, droite d'une tabulation
^Kc1c2 or c1c2saisie le digraphe \c1,c2\
^Ocexécute c en mode commande temporaire
^X^E ^X^Ydéfilement haut, bas
<esc> or ^[abandonne l'édition mode commande

Copie
"xutilise le registre x pour la prochaine action
:regaffiche le contenu de tous les registres
:reg xaffiche le contenu du/des registre(s) x
ymcopie le texte de la commande de mouvement m
yy or Ycopie la ligne courante
p Pcolle après, avant la position du curseur
]p [pcomme p, P, avec ajustement de l'indentation
gp gPcomme p, P, avec le curseur à la fin du texte

Insertion avancée
g?mencode en rot13 le texte de mouvement m
n^A n^X+n, -n au nombre sous le curseur
gqmjustifie le texte du mouvement m
:rce wcentre les lignes r à la largeur w
:rle ialigne à la colonne i les lignes r
:rri waligne à droite les lignes r à la largeur w
!mcfiltre les lignes du mvt. m avec la cmd. c
n!!cfiltre n lignes avec la commande c
:r!cfiltre l'intervalle r avec la commande c

Mode visuel
v V ^Vsélectionne des lettres, lignes, blocs
oéchange le curseur avec le début de la sélection
gvdémarre la sélection à la position de la précédente
aw as apsélectionne un(e) mot, phrase, paragraphe
ab aBsélectionne un bloc ( ), un bloc { }

Annulation, répétition & registres
u Uannule une commande, restaure la ligne
.  ^Rrépète une commande, annule l'annulation
nrépète la commande avec le nombre n
qc qCenregistre, ajoute la frappe au registre c
qstoppe l'enregistrement
@cexécute le contenu du registre c
@@répète la commande @ précédente
:@cexécute le registre c comme une commande Ex
:rg/p/cexécute la commande Ex c
sur l'intervalle r où le motif p correspond

Mouvement complexe
- +ligne en haut, bas sur le 1er caractère non blanc
B Wmot séparé par un espace à gauche, droite
gE Efin du mot séparé par un espace à gauche, droite
n_n-1 lignes en bas sur le 1er caractère non blanc
g0début de ligne d'écran
g^  g$premier, dernier caractère de la ligne d'écran
gk gjligne d'écran en haut, bas
fc Fccaractère c suivant, précédent
tc Tcavant le caractère c suivant, précédent
; ,répète le dernier fFtT en sens opposé
[[ ]]début de section en arrière, avant
[] ][fin de section en arrière, avant
[( ])(, ) en arrière, avant
[{  ]}{, } en arrière, avant
[m ]mdébut de méthode Java en arrière, avant
[# ]##if, #else, #endif en arrière, avant
[* ]*début, fin de bloc /* */ en arrière, avant

Recherche & substitution
/s  ?scherche s en avant, arrière
/s/o  ?s?oidem, avec un décalage o
or /répète en avant la dernière recherche
or ?répète en arrière la dernière recherche
# *recherche en arrière, avant le mot sous le curseur
g# g*idem, avec les correspondances partielles
gd gDdéfinition locale, globale du mot sous le curseur
:rs/f/t/xsubstitue f par t dans l'intervalle r
x: g-toutes les occurrences, c-confirme
:rs xrépète la subst. avec de nouveaux r & x

Caractères spéciaux de recherche
.   ^  $tout caractère unique, début, fin de ligne
\< \>début, fin de mot
[c1-c2]un caractère unique dans l'intervalle c1..c2
[^c1-c2]un caractère unique hors intervalle
\i \f \I \Fun identificateur, mot-clé ; sans chiffres
\f \p \F \Pun fichier, car. imprim. ; sans chiffres
\s \Sun espace simple, autre espacement
\e \t \r \b<esc>, <tab>, <>, <>
\= * \+0..1, 0.., 1.. des atomes précédents
\|sépare deux branches (  ou)
\( \)groupe plusieurs éléments dans un atome
\& \nle motif entier, nieme groupe ()
\u \lle caractère suivant en majuscule, minuscule
\c \Cignore, respecte la casse

Décalage de recherche
n or +nn lignes en avant en colonne 1
-nn lignes en arrière en colonne 1
e+n e-nn caractères à droite, gauche de la fin
s+n s-nn caractères à droite, gauche du début
;scexécute la recherche sc suivante

Marques et déplacement
mcmarque la position courante avec [a..Z]
`c `Cva à la marque c, C dans n'importe quel fichier
`0..9va à la dernière position en sortie
`` `"va à la position avant le saut, dernière édition
`[ `]va au début, fin du texte préc. manipulé
:marksaffiche la liste des marques actives
:jumpsaffiche la liste des sauts
n^Ova au nieme dernier saut dans la liste
n^Iva au nieme premier saut dans la liste

Allocation de touches & abbréviation
:map c ealloue e en mode normal & visuel
:map!  c ealloue e en mode insertion & cmd.
:unmap c  :unmap!  csupprime l'alloc. pour c
:mk fsauvegarde les paramètres dans le fichier f
:ab c eajoute l'abbréviation pour e
:ab cliste les abbréviations commençant par c
:una csupprime l'abbréviation pour c

Étiquettes
:ta tva à l'étiquette t
:ntava à la nieme nouvelle étiquette
^] ^Tva à l'étiquette sous le curseur, revient
:ts tliste les étiquettes pour sélection
:tj tva à l'étiquette ou sélectionne si plusieurs
:tagsaffiche la liste des étiquettes
:npo  :n^Trevient de, va à la nieme dernière
:tlva à la dernière étiquette utilisée
^W}  :pt tprévisualise l'étiquette sous le curseur, t
^W]sépare la fenêtre et montre l'étiq. sous le curseur
^Wz or :pcferme la fenêtre de prévisualisation

Défilement & multi-fenêtrage
^E ^Ydéfile une ligne en haut, bas
^D ^Udéfile une demi-page en haut, bas
^F ^Bdéfile une page en haut, bas
zt or zplace la ligne courante en haut de la fenêtre
zz or z.  place la ligne courante au centre de la fenêtre
zb or z-place la ligne courante au bas de la fenêtre
zh zldéfile un caractère à droite, gauche
zH zLdéfile une demi-fenêtre à droite, gauche
^Ws or :splitsépare la fenêtre courante en deux
^Wn or :newcréé une nouvelle fenêtre vide
^Wo or :onagrandit la fenêtre courante
^Wj ^Wkva à la fenêtre au dessous, dessus
^Ww ^W^Wva à la fenêtre au dessous, dessus (enroule)

Commandes Ex ()
:e fédite le fichier f, sauf si changements
:e!  fédite le fichier f (par défaut celui en cours)
:wn :wNsauve le fichier et édite le suivant, précédent
:n :Nédite le fichier suivant, précédent dans la liste
:rwsauvegarde l'intervalle r dans le fichier en cours
:rw fsauvegarde l'intervalle r dans le fichier f
:rw>>fajoute l'intervalle r au fichier f
:q :q!quitte et confirme, quitte sans sauvegarder
:wq or :x or ZZsauvegarde et quitte
<up> <down>rappele les cmd. comme celle en cours
:r finsère le fichier f sous le curseur
:r!  cinsère le résultat de la cmd. c sous le curseur
:argsaffiche la liste des arguments
:rco  a racopie, déplace l'interv. r après la ligne a

Intervalles Ex
, ;  sépare deux lignes, la première ligne
nun numéro de ligne absolu n
.   $la ligne courante, la dernière ligne
% *le fichier entier, la sélection visuelle
'tla position de la marque t
/p/ ?p?la ligne suivante, précédente où p correspond
+n -n+n, -n au numéro de ligne précédent

Pliage
zfmcréé un pli avec le mouvement m
:rfocréé un pli sur l'intervalle r
zd zEsupprime le pli sous le curseur, tous
zo zc zO zCouvre, ferme un pli, récursivement
[z ]zdébut, fin du pli ouvert en cours
zj zkdébut, fin du pli suivant, précédent

Divers
:sh  :!clance un shell, exécute c dans un shell
Kaffiche l'aide man du mot-clé sous le curseur
:makelance make, lit les erreurs et va à la 1ère
:cn  :cpaffiche l'erreur suivante, précédente
:cl  :cfliste les erreurs, depuis un fichier
^L ^Gré-affiche l'écran, nom de fichier et position
g^Gmontre la position détaillée du curseur
gamontre la valeur ASCII du caractère
gfouvre le fichier sous le curseur
:redir>fredirige la sortie dans le fichier f
:mkview [f]sauve la config. [dans le fichier f]
:loadview [f]charge la config. [depuis le fichier f]
^@ ^K ^_  \  Fn ^Fntouches inusitées


Copyright (C) 2005 by Laurent GRÉGOIRE (<a href="mailto:laurent.gregoire@icam.fr">laurent.gregoire@icam.fr</a>)
Translated from English by Laurent Grégoire
Converted from vimqrc-fr.tex using a <a href="http://www.python.org">Python</a> script.
You can find the latest revision at <a href="http://tnerual.eriogerg.free.fr">http://tnerual.eriogerg.free.fr</a>

Outils personnels