2009-09-20 12:34:28 +02:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
2003-01-19 20:50:02 +01:00
|
|
|
|
<!DOCTYPE html
|
|
|
|
|
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
|
|
|
|
"tuteurs://DTD/tml.dtd">
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>Vim</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>Vim</h1>
|
|
|
|
|
|
|
|
|
|
<div class="resume">
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Vim est un éditeur de textes difficile à prendre en main, mais extrêmement
|
|
|
|
|
puissant. Il s'agit d'un des nombreux héritiers (moraux) de l'historique Vi
|
2003-01-19 20:50:02 +01:00
|
|
|
|
des Unix ancestraux, et c'est dans cette famille probablement le plus
|
|
|
|
|
puissant. L'essentiel de ce qui sera dit ici sera aussi valable pour les
|
2009-09-20 12:27:14 +02:00
|
|
|
|
autres, mais pas tout ; la documentation de Vim précise pour chaque
|
|
|
|
|
commande si elle est spécifique ou pas.
|
2003-01-19 20:50:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<h2>Concepts de base</h2>
|
|
|
|
|
|
|
|
|
|
<h3>Les deux modes</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Vi possède deux modes. En fait, ce n'est pas vrai, il en possède plus, et
|
2003-03-27 16:34:53 +01:00
|
|
|
|
Vim encore plus, mais il y en a deux qui sont plus importants que les autres
|
|
|
|
|
pour comprendre le fonctionnement. L'un de ces modes s'appelle le <em>mode
|
2009-09-20 12:27:14 +02:00
|
|
|
|
insertion</em> : c'est dans ce mode-là qu'on tape l'essentiel du texte. La
|
|
|
|
|
particularité de Vi est que ce mode propose très peu de fonctions de
|
2003-03-27 16:34:53 +01:00
|
|
|
|
manipulation du texte (recherche, copier-coller, sauvegarde). En effet, la
|
2009-09-20 12:27:14 +02:00
|
|
|
|
manipulation du texte se fait en <em>mode normal</em> : dans ce mode, à
|
|
|
|
|
peu près tous les caractères ont une signification et déclenchent des
|
|
|
|
|
modifications du texte ou un déplacement du curseur.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Il est possible, avec Vi, de définir de nouvelles touches pour des actions.
|
|
|
|
|
Quand on débute, il est tentant de définir des touches pour les actions les
|
|
|
|
|
plus fréquentes (sauver, rechercher, quitter, copier, coller), et de rester
|
|
|
|
|
tout le temps en mode insertion. L'usage montre que c'est en général une
|
|
|
|
|
mauvaise idée : une fois l'habitude des deux modes prises, et l'automatisme
|
|
|
|
|
du changement de mode connu des doigts, l'efficacité croît avec
|
|
|
|
|
l'utilisation des commandes évoluées. Autant prendre l'habutude rapidement
|
2003-03-27 16:34:53 +01:00
|
|
|
|
donc.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<div class="encadre">
|
|
|
|
|
<p>
|
|
|
|
|
On revient en mode normal avec la touche <code>Escape</code>
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Suivant la configuration, le changement peut ne prendre effet qu'au moment
|
2009-09-20 12:27:14 +02:00
|
|
|
|
où la touche suivante est tapée. En cas de problème, <kbd>Ctrl-C</kbd>
|
|
|
|
|
ramène <em>toujours</em> en mode normal.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h3>Action et déplacement</h3>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Beaucoup de commandes de Vi (en mode normal, donc) servent à déplacer le
|
|
|
|
|
curseur. Vers la droite ou la gauche, le haut et le bas bien sûr, mais aussi
|
|
|
|
|
de paragraphe en paragraphe, de mot en mot, en sautant à des marques
|
|
|
|
|
prédéfinies ou en recherchant rapidement un caractère donné, etc.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Vi a aussi des commandes pour supprimer, copier, ou d'autres plus exotiques,
|
|
|
|
|
comme passer en majuscules. C'est bien beau, mais supprimer ou copier
|
2009-09-20 12:27:14 +02:00
|
|
|
|
quoi ? Faut-il une commande pour supprimer un mot, une autre pous supprimer
|
|
|
|
|
une ligne, encore une autre pour supprimer un paragraphe, etc. ? Là, on
|
|
|
|
|
découvre un des aspects les plus astucieux de Vi : les commandes d'action
|
|
|
|
|
définissent ce qu'il y a à faire, mais attendent ensuite une commande de
|
|
|
|
|
déplacement. L'action est alors appliquée à tout le texte parcouru par le
|
|
|
|
|
curseur dans le déplacement.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Par exemple la commande <kbd>w</kbd> avance jusqu'au mot suivant, la
|
|
|
|
|
commande <kbd>d</kbd> est celle pour effacer. Alors <kbd>dw</kbd> supprime
|
2009-09-20 12:27:14 +02:00
|
|
|
|
tout du curseur au début du mot suivant.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Avec ce système, connaître n commandes de déplacement et m commandes
|
|
|
|
|
d'action se conjuguent en n×m possibilités de manipulations différentes.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2>Principales commandes</h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Voici un tableau récapitulant les principales commandes de Vim. Les
|
|
|
|
|
commandes marquées « action » attendent une commande de déplacement pour
|
|
|
|
|
agir (cette dénomination n'est pas standard), et agissent alors sur le texte
|
|
|
|
|
toucert par le déplacement ainsi désigné. Certains des termes utilisés dans
|
|
|
|
|
ce tableau seront expliqués un peu plus loin. Cette liste n'est pas
|
2003-03-27 16:34:53 +01:00
|
|
|
|
exhaustive du tout.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<table class="tableau">
|
|
|
|
|
<tr><th>Commande</th><th>Sens</th><th>Type</th><th>Effet</th></tr>
|
|
|
|
|
<tr><td><kbd>i</kbd></td><td>insert</td><td></td><td>passe en mode insertion</td></tr>
|
|
|
|
|
<tr><td><kbd>a</kbd></td><td>append</td><td></td><td>passe en mode insertion en faisant avancer le curseur</td></tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>o</kbd></td><td>open</td><td></td><td>passe en mode insertion en créant une nouvelle ligne sous le curseur</td></tr>
|
|
|
|
|
<tr><td><kbd>O</kbd></td><td>open</td><td></td><td>passe en mode insertion en créant une nouvelle ligne au dessus du curseur</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<tr><td><kbd>R</kbd></td><td>replace</td><td></td><td>passe en mode remplacement</td></tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>A</kbd></td><td></td><td></td><td>passe en mode insertion en allant à la fin de la ligne</td></tr>
|
|
|
|
|
<tr><td><kbd>I</kbd></td><td></td><td></td><td>passe en mode insertion en allant au début de la ligne</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<tr><td><kbd>v</kbd></td><td>visual</td><td></td><td>passe en mode visuel</td></tr>
|
|
|
|
|
<tr><td><kbd>V</kbd></td><td></td><td></td><td>passe en mode visuel par ligne</td></tr>
|
|
|
|
|
<tr><td><kbd>Ctrl-V</kbd></td><td></td><td></td><td>passe en mode visuel par bloc</td></tr>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>h</kbd></td><td></td><td>déplacement</td><td>déplace le curseur vers la gauche</td></tr>
|
|
|
|
|
<tr><td><kbd>j</kbd></td><td></td><td>déplacement</td><td>déplace le curseur vers le bas</td></tr>
|
|
|
|
|
<tr><td><kbd>k</kbd></td><td></td><td>déplacement</td><td>déplace le curseur vers le haut</td></tr>
|
|
|
|
|
<tr><td><kbd>l</kbd></td><td></td><td>déplacement</td><td>déplace le curseur vers la droite</td></tr>
|
|
|
|
|
<tr><td><kbd>w</kbd></td><td>word</td><td>déplacement</td><td>avance d'un mot</td></tr>
|
|
|
|
|
<tr><td><kbd>b</kbd></td><td>back</td><td>déplacement</td><td>recule d'un mot</td></tr>
|
|
|
|
|
<tr><td><kbd>e</kbd></td><td>end</td><td>déplacement</td><td>avance jusqu'à la fin d'un mot</td></tr>
|
|
|
|
|
<tr><td><kbd>W</kbd></td><td></td><td>déplacement</td><td>avance d'un MOT</td></tr>
|
|
|
|
|
<tr><td><kbd>B</kbd></td><td></td><td>déplacement</td><td>recule d'un MOT</td></tr>
|
|
|
|
|
<tr><td><kbd>E</kbd></td><td></td><td>déplacement</td><td>avance jusqu'à la fin d'un MOT</td></tr>
|
|
|
|
|
<tr><td><kbd>f<i>x</i></kbd></td><td>forward</td><td>déplacement</td><td>avance jusqu'au prochain <i>x</i></td></tr>
|
|
|
|
|
<tr><td><kbd>F<i>x</i></kbd></td><td></td><td>déplacement</td><td>recule jusqu'au <i>x</i> précédent</td></tr>
|
|
|
|
|
<tr><td><kbd>t<i>x</i></kbd></td><td></td><td>déplacement</td><td>avance jusqu'à juste avant le prochain <i>x</i></td></tr>
|
|
|
|
|
<tr><td><kbd>T<i>x</i></kbd></td><td></td><td>déplacement</td><td>recule jusqu'à juste après le <i>x</i> précédent</td></tr>
|
|
|
|
|
<tr><td><kbd>gg</kbd></td><td></td><td>déplacement</td><td>va au début du texte</td></tr>
|
|
|
|
|
<tr><td><kbd>G</kbd></td><td></td><td>déplacement</td><td>va à la fin du texte</td></tr>
|
|
|
|
|
<tr><td><kbd>$</kbd></td><td></td><td>déplacement</td><td>va à la fin de la ligne</td></tr>
|
|
|
|
|
<tr><td><kbd>0</kbd></td><td></td><td>déplacement</td><td>va au début de la ligne</td></tr>
|
|
|
|
|
<tr><td><kbd>{</kbd></td><td></td><td>déplacement</td><td>va au début du paragraphe</td></tr>
|
|
|
|
|
<tr><td><kbd>}</kbd></td><td></td><td>déplacement</td><td>va à la fin du paragraphe</td></tr>
|
|
|
|
|
<tr><td><kbd>(</kbd></td><td></td><td>déplacement</td><td>va au début de la phrase</td></tr>
|
|
|
|
|
<tr><td><kbd>)</kbd></td><td></td><td>déplacement</td><td>va à la fin de la phrase</td></tr>
|
|
|
|
|
<tr><td><kbd>n</kbd></td><td>next</td><td>déplacement</td><td>continue une recherche</td></tr>
|
|
|
|
|
<tr><td><kbd>N</kbd></td><td></td><td>déplacement</td><td>continue une recherche, en sens inverse</td></tr>
|
|
|
|
|
|
|
|
|
|
<tr><td><kbd>u</kbd></td><td>undo</td><td></td><td>annule la dernière action</td></tr>
|
|
|
|
|
<tr><td><kbd>Ctrl-R</kbd></td><td>redo</td><td></td><td>refait la dernière action annulée</td></tr>
|
|
|
|
|
<tr><td><kbd>.</kbd></td><td>redo</td><td></td><td>répète la dernière opération</td></tr>
|
|
|
|
|
<tr><td><kbd>x</kbd></td><td></td><td></td><td>supprime un caractère vers la droite (« delete »)</td></tr>
|
|
|
|
|
<tr><td><kbd>X</kbd></td><td></td><td></td><td>supprime un caractère vers la gauche (« backspace »)</td></tr>
|
|
|
|
|
<tr><td><kbd>s</kbd></td><td>substitute</td><td></td><td>supprime un caractère et passe en mode insertion</td></tr>
|
|
|
|
|
<tr><td><kbd>r<i>x</i></kbd></td><td>replace</td><td></td><td>remplace un caractère par <i>x</i></td></tr>
|
|
|
|
|
<tr><td><kbd>p</kbd></td><td>paste</td><td></td><td>colle un registre après le curseur</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<tr><td><kbd>P</kbd></td><td></td><td></td><td>colle un registre avant le curseur</td></tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>~</kbd></td><td></td><td></td><td>passe un caractère de majuscule en minuscule ou l'inverse</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<tr><td><kbd>/</kbd></td><td></td><td></td><td>fais une recherche</td></tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>?</kbd></td><td></td><td></td><td>fais une recherche vers l'arrière</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<tr><td><kbd>*</kbd></td><td></td><td></td><td>cherche le mot sous le curseur</td></tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>#</kbd></td><td></td><td></td><td>cherche le mot sous le curseur vers l'arrière</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
|
|
|
|
|
<tr><td><kbd>d</kbd></td><td>delete</td><td>action</td><td>supprime</td></tr>
|
|
|
|
|
<tr><td><kbd>c</kbd></td><td>change</td><td>action</td><td>supprime et passe en mode insertion</td></tr>
|
|
|
|
|
<tr><td><kbd>y</kbd></td><td>yank</td><td>action</td><td>copie dans un registre</td></tr>
|
|
|
|
|
<tr><td><kbd>gu</kbd></td><td></td><td>action</td><td>passe en minuscules</td></tr>
|
|
|
|
|
<tr><td><kbd>gU</kbd></td><td></td><td>action</td><td>passe en majuscules</td></tr>
|
|
|
|
|
<tr><td><kbd>g?</kbd></td><td></td><td>action</td><td>passe en rot13</td></tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd><</kbd></td><td></td><td>action</td><td>décale vers la gauche</td></tr>
|
|
|
|
|
<tr><td><kbd>></kbd></td><td></td><td>action</td><td>décale vers la droite</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<tr><td><kbd>gq</kbd></td><td></td><td>action</td><td>recoupe les lignes</td></tr>
|
|
|
|
|
<tr><td><kbd>=</kbd></td><td></td><td>action</td><td>met en forme un programme</td></tr>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>"</kbd><i>x</i></td><td></td><td></td><td>sélectionne le registre <i>x</i></td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<tr><td><kbd>m</kbd><i>x</i></td><td></td><td></td><td>pose la marque <i>x</i></td></tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<tr><td><kbd>'</kbd><i>x</i></td><td></td><td>déplacement</td><td>va à la marque <i>x</i> (par ligne)</td></tr>
|
|
|
|
|
<tr><td><kbd>`</kbd><i>x</i></td><td></td><td>déplacement</td><td>va à la marque <i>x</i> (par caractère)</td></tr>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La plupart des commandes peuvent être précédées d'un nombre, tapé
|
|
|
|
|
directement avec les chiffres : ce nombre va alors en général multiplier
|
2003-03-27 16:34:53 +01:00
|
|
|
|
l'action. Ainsi, puisque <kbd>w</kbd> avance d'un mot, <kbd>42</kbd> avance
|
|
|
|
|
de 42 mots.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Le mode remplacement est similaire au mode insertion, mais les caractères
|
2003-03-27 16:34:53 +01:00
|
|
|
|
viennent remplacer ceux qui se trouvaient auparavant. Les modes visuels sont
|
2009-09-20 12:27:14 +02:00
|
|
|
|
des modes utilisés pour sélectionner du texte, nous verrons leur fonction
|
|
|
|
|
plus en détail plus bas.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Un mot est une suite de lettres et de chiffres, ou une suite de signes
|
2009-09-20 12:27:14 +02:00
|
|
|
|
autres, exceptés les espaces. Un « MOT » est une suite de signe qui ne
|
2013-10-20 00:04:58 +02:00
|
|
|
|
sont pas des espaces. Ainsi, <code>tuteurs@sas.eleves.ens.fr</code> est un seul
|
|
|
|
|
MOT, formé de sept mots.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Quand on répète une touche correspondant à une action, le résultat est
|
|
|
|
|
souvent d'agir sur la ligne entière. Ainsi <kbd>dd</kbd> supprime une ligne.
|
|
|
|
|
Quand on la met en majuscule, elle agit souvent de la position du curseur à
|
|
|
|
|
la fin de la ligne (comme si la commande de déplacement était <kbd>$</kbd>.
|
|
|
|
|
Ainsi <kbd>D</kbd> supprime jusqu'à la fin de la ligne.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Certaines commandes de déplacement sont dites <em>horizontales</em> alors
|
2003-03-27 16:34:53 +01:00
|
|
|
|
que d'autres sont <em>verticales</em>. Quand une action est suivie d'un
|
2009-09-20 12:27:14 +02:00
|
|
|
|
déplacement vertical, elle agit par lignes entières (par exemple
|
|
|
|
|
<kbd>dj</kbd> supprime la ligne où est le curseur et la ligne en dessous, en
|
|
|
|
|
entier). Cette distinction peut paraître difficile à saisir, mais à l'usage
|
2003-03-27 16:34:53 +01:00
|
|
|
|
le comportement est tel qu'on peut s'y attendre naturellement.
|
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2>Opérations usuelles</h2>
|
2003-03-27 16:34:53 +01:00
|
|
|
|
|
|
|
|
|
<h3>Copier-coller, registres</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Vim possède un certain nombre de registres qui peuvent contenir du texte.
|
2010-07-27 16:43:14 +02:00
|
|
|
|
Ils servent pour les opérations de copier-coller. Lors qu'une opération
|
2009-09-20 12:27:14 +02:00
|
|
|
|
supprime une portion de texte, celle-ci est automatiquement copiée dans le
|
|
|
|
|
registre sélectionné. La commande <kbd>y</kbd> sert à copier du texte dans
|
2003-03-27 16:34:53 +01:00
|
|
|
|
un registre sans le supprimer.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Si on ne précise rien, c'est le registre <code>"</code> qui est sélectionné.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
La commande <kbd>"</kbd> permet de choisir le registre pour la prochaine
|
2009-09-20 12:27:14 +02:00
|
|
|
|
opération. Il y a 26 registres génériques portant les lettres de
|
2010-07-27 16:43:14 +02:00
|
|
|
|
<code>a</code> à <code>z</code>. Si on utilise une lettre en majuscule, le
|
2009-09-20 12:27:14 +02:00
|
|
|
|
texte copié où coupé va s'ajouter au contenu du registre au lieu de le
|
2003-03-27 16:34:53 +01:00
|
|
|
|
remplacer. Il est donc possible de maintenir 26 bouts de textes qu'on peut
|
2009-09-20 12:27:14 +02:00
|
|
|
|
ensuite coller n'importe où.
|
2010-07-27 16:43:14 +02:00
|
|
|
|
Par exemple, si on veut copier du texte dans le registre <code>r</code>, on
|
|
|
|
|
tape <kbd>"ry</kbd>.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
C'est la commande <kbd>p</kbd> ou <kbd>P</kbd> qui sert à coller le contenu
|
|
|
|
|
d'un registre. Comme les autres, elle peut être précédée de <kbd>"</kbd>
|
|
|
|
|
pour sélectionner le registre qui doit être collé.
|
2010-07-27 16:43:14 +02:00
|
|
|
|
Par exemple, si on veut coller le contenu du registre <code>r</code>, on
|
|
|
|
|
tape <kbd>"rp</kbd>.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
À chaque fois qu'un registre est modifié, le registre <code>1</code> est
|
|
|
|
|
rempli également, tandis que son ancien contenu est transféré dans le
|
|
|
|
|
registre <code>2</code>, dont l'ancien contenu est à son tour transféré dans
|
|
|
|
|
le registre <code>3</code>, et ainsi de suite jusqu'à 9.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2010-07-27 16:43:14 +02:00
|
|
|
|
Attention. Un registre se souvient de la manière dont il a été rempli : par
|
2009-09-20 12:27:14 +02:00
|
|
|
|
une action verticale ou horizontale. Lors du collage, il s'insère de la
|
|
|
|
|
même manière : un registre copié verticalement s'insérera sur des lignes
|
|
|
|
|
entières, quelle que soit la position du curseur. Ça marche également pour
|
2003-03-27 16:34:53 +01:00
|
|
|
|
des copies faites en mode visuel par bloc.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Le mode visuel</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2010-07-27 16:43:14 +02:00
|
|
|
|
Le mode visuel, ou plutôt les modes visuels, permettent de sélectionner du
|
2003-03-27 16:34:53 +01:00
|
|
|
|
texte. Une commande de modification faite en mode visuel va agir sur la zone
|
2009-09-20 12:27:14 +02:00
|
|
|
|
sélectionnée au lieu d'un seul caractère, ou d'attendre un déplacement. Pour
|
|
|
|
|
les déplacements, le mode visuel fonctionne comme le mode commande.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Le mode visuel normal sélectionne une zone qui va précisément de l'endroit
|
|
|
|
|
où se trouvait le curseur quand on a appuyé sur <kbd>v</kbd> à la position
|
|
|
|
|
curseur courante. Il est donc similaire à une commande de déplacement
|
|
|
|
|
<em>horizontal</em>. Le mode visuel par ligne sélectionne des lignes
|
|
|
|
|
entières, il est donc similaire à une commande de déplacement
|
2003-03-27 16:34:53 +01:00
|
|
|
|
<em>vertical</em>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Le mode visuel par bloc sélectionne un rectangle de texte, indépendemment
|
2003-03-27 16:34:53 +01:00
|
|
|
|
des coupures des lignes. Ceci peut servir pour des constructions en colonnes
|
|
|
|
|
ou des alignements. Dans ce mode, les commandes de remplacement
|
|
|
|
|
(<kbd>c</kbd> et <kbd>s</kbd>) et d'insertion (<kbd>I</kbd> et <kbd>A</kbd>
|
|
|
|
|
au lieu de <kbd>i</kbd> et <kbd>a</kbd>) ont un fonctionnement
|
2009-09-20 12:27:14 +02:00
|
|
|
|
particulier : le texte tapé sur la première ligne va être répété de la même
|
|
|
|
|
manière sur toutes les lignes. Attention : pour que ça marche il ne faut
|
|
|
|
|
pas utiliser de déplacement du curseur pendant l'insertion. Exemple : pour
|
|
|
|
|
ajouter un <code>></code> au début de toutes les lignes d'un bout de
|
|
|
|
|
texte, se placer au début, faire <kbd>Ctrl-V</kbd>, descendre jusqu'à la
|
|
|
|
|
dernière ligne, faire <kbd>I></kbd>, puis <kbd>Escape</kbd>.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Les marques</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Vim est capable de poser des marques dans le texte, afin d'y revenir plus
|
|
|
|
|
tard facilement. On pose une marque avec <kbd>m</kbd> suivi d'une lettre. Il
|
|
|
|
|
y a donc 26 marques librement utilisables.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
On peut aller à une marque ainsi posée avec la commande <kbd>'</kbd> suivie
|
|
|
|
|
de la lettre, ou <kbd>`</kbd> pour un déplacement horizontal. Si la lettre
|
|
|
|
|
est donnée en majuscule, le saut peut faire changer de fichier si la marque
|
2003-03-27 16:34:53 +01:00
|
|
|
|
est dans un autre.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2010-07-27 16:43:14 +02:00
|
|
|
|
Il existe deux marques spéciales, <kbd><</kbd> et <kbd>></kbd>, qui
|
2009-09-20 12:27:14 +02:00
|
|
|
|
désignent respectivement le début et la fin du dernier mode visuel. Elles
|
|
|
|
|
sont surtout utiles pour désigner un intervalle en ligne de commande.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h2>La ligne de commande</h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Pour les opérations plus complexes, en particulier celles qui agissent sur
|
|
|
|
|
la totalité du texte, Vim utilise une ligne de commande. Si on tape
|
|
|
|
|
<kbd>:</kbd> en mode normal, on peut taper une commande entière, qui ne sera
|
|
|
|
|
évaluée que lorsqu'on validera avec entrée. Avec Vim (et pas avec Vi), la
|
|
|
|
|
ligne de commande est complètement éditable, et comporte un hitorique.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La plupart des commandes peuvent s'abréger. Les plus utilisées peuvent
|
|
|
|
|
descendre jusqu'à une seule lettre.
|
2003-03-27 16:34:53 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Sauver, charger, quitter</h3>
|
|
|
|
|
|
2003-06-05 18:17:14 +02:00
|
|
|
|
<table class="tableau">
|
|
|
|
|
<tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<th>Commande</th><th>Abbréviation</th><th>Effet</th>
|
2003-06-05 18:17:14 +02:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>:write</code></td><td><code>:w</code></td>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td>sauve le fichier en cours d'édition</td>
|
2003-06-05 18:17:14 +02:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>:write <i>fichier</i></code></td><td><code>:w</code></td>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td>écrit le texte dans le fichier indiqué</td>
|
2003-06-05 18:17:14 +02:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>:saveas <i>fichier</i></code></td><td><code>:sav</code></td>
|
|
|
|
|
<td>sauve le fichier sous un nouveau nom</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>:edit <i>fichier</i></code></td><td><code>:ed</code></td>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td>édite un nouveau fichier</td>
|
2003-06-05 18:17:14 +02:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>:quit</code></td><td><code>:q</code></td>
|
|
|
|
|
<td>quitte</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>:exit</code></td><td><code>:x</code></td>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td>sauve si nécessaire et quitte</td>
|
2003-06-05 18:17:14 +02:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>:wq</code></td><td></td>
|
|
|
|
|
<td>sauve et quitte</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La différence entre <code>:w</code> avec un nom de fichier et
|
|
|
|
|
<code>:save</code>, c'est le nom qui sera utilisé pour les <code>:w</code>
|
|
|
|
|
suivants : l'ancien nom dans le premier cas, le nouveau dans le second.
|
2003-06-05 18:17:14 +02:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Selon la configuration de Vim, ouvrir un nouveau fichier va soit fermer le
|
2009-09-20 12:27:14 +02:00
|
|
|
|
fichier en cours d'édition (avec confirmation, évidemment) soit simplement
|
2003-06-05 18:17:14 +02:00
|
|
|
|
le cacher, tout en permettant d'y revenir.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
On peut insister pour quitter sans sauver, ou pour sauver sur un fichier qui
|
2009-09-20 12:27:14 +02:00
|
|
|
|
existe déjà, en ajoutant <code>!</code> à la fin de la commande, ce qui
|
2003-06-05 18:17:14 +02:00
|
|
|
|
donne <code>:w!</code> et <code>:q!</code>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Les recherches et remplacements</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Les recherches ne se font pas en ligne de commande à proprement parler, mais
|
|
|
|
|
le comportement de Vim y est le même. Une recherche se fait avec la touche
|
2003-06-05 18:17:14 +02:00
|
|
|
|
<code>/</code>. Vim passe alors dans un mode proche de la ligne de commande,
|
2009-09-20 12:27:14 +02:00
|
|
|
|
et attend qu'on saisisse une expression rationnelle. On valide par entrée,
|
|
|
|
|
et Vim saute à la premire occurence. On navigue alors entre les différentes
|
2003-06-05 18:17:14 +02:00
|
|
|
|
occurences avec <code>n</code> (comme <em>next</em>) et <code>N</code>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Selon la configuration, Vim peut afficher la première occurence au fur et à
|
|
|
|
|
mesure de la saisie de l'expression cherchée. Attention toutefois : quand
|
|
|
|
|
on a trouvé, il faut bien valider, sinon on se retrouve au point de départ.
|
2003-06-05 18:17:14 +02:00
|
|
|
|
</p>
|
|
|
|
|
<!--Toujours selon la configuraiton, -->
|
2003-01-19 20:50:02 +01:00
|
|
|
|
|
|
|
|
|
<div class="metainformation">
|
2009-09-27 22:00:55 +02:00
|
|
|
|
Auteur : Nicolas George. <date value="from git" />
|
2003-06-05 18:17:14 +02:00
|
|
|
|
<br/>
|
|
|
|
|
to <span style="color: blue">B</span><span style="color: red">e</span> continued
|
2003-01-19 20:50:02 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|