« Vi » : différence entre les versions

Contenu supprimé Contenu ajouté
Gauz (discussion | contributions)
Guillaumito (discussion | contributions)
découpage du livre "vi"
Ligne 1 :
==#[[Vi Découvrir ''vi''|Découvrir ==vi]]
#[[Vi Débuter avec vi|Débuter avec vi]]
 
#[[Vi Aller un peu plus loin|Aller un peu plus loin]]
=== Historique ===
 
L'[[w:fr:éditeur de texte|éditeur]] ''vi'' (prononcez vi aïe) adhère aux principes des applications [[w:fr:Unix|Unix]] :
il remplit une fonction spécifique au mieux et s'intègre au reste du
système, communiquant avec les autres applications pour s'associer leur
capacités. Léger et portable, il peut toujours être présent, simple sur
le système le plus basique ou amélioré sur un système habituel.
 
Bill Joy (Willam N. Joy (1954 -), co-fondateur de [[w:fr:Sun Microsystems|Sun Microsystems]]),
étudiant à [[w:fr:Université de Berkeley|Berkeley]],
planche au cours de l'été 1975 sur des algorithmes dont la taille imposante
(200 lignes) empêche une
correcte implantation dans le cœur du système [[w:fr:Pascal (langage)|Pascal]]. À l'époque,
l'éditeur couramment utilisé était ''ed'' et de nombreuses
améliorations en étaient développées, dont ''em''
que George Coulouris lui procure. ''Em'' avait cependant quelques défauts, comme
de ne pouvoir afficher que des majuscules, et
Joy et Chuck Haley l'adaptent une première fois, le renommant ''ex''.
Joy travaillait sur un terminal proposant une vingtaine de
lignes et sans retour possible, il lui fallait donc développer un éditeur
plein écran mettant en mémoire les pages non affichées. Il fallait en outre
qu'il puisse être utilisé au travers de son modem 300 baud.
En quelques mois de 1976, il développe alors ''vi'', qui
sera distribué en 1978 avec la ''Second Berkeley Software Distribution''
(2BSD). Premier éditeur en plein écran, dont de nombreuses fonctionnalités ont
été inspirées de ''Bravo'', le premier WYSIWYG,
''vi'' est diffusé alors
avec Unix et Pascal. Joy se désinteresse rapidement du maintient et laisse la
suite du développement à Mark Horton.
 
Quelques sources sur les débuts de ''vi'' :
*[http://www.cs.pdx.edu/~kirkenda/joy84.html interview de Bill Joy] ;
*[http://www.oreilly.com/catalog/opensources/book/kirkmck.html Twenty Years of Berkeley ix].
=== Vim ===
 
''Vim'' est une version évoluée et particulièrement répandue de ''vi''.
 
En 1988, Bram Moolenaar commence
le portage de ''vi'' sur son Amiga fraîchement acquis, « Stevie »
est alors peu fonctionnel et particulièrement buggé, mais il se
corrige progressivement et passe de « Vi IMitation » à
« Vi IMproved. » Gardant une grande compatiblité avec ''vi'',
les nouvelles commandes s'ajoutent aux anciennes et permettent à
chaque utilisateur une approche personnalisée du logiciel. Conçu dès
l'origine comme un produit ''open-source'', la plupart des
développement de ''vim'' viennent des programmateurs qui l'utilisent.
[http://www.moolenaar.net/vimstory.txt L'historique de ''vim'' par Moolenaar]
 
Si son utilisation et sa diffusion sont gratuites, son auteur
le diffuse comme ''charityware'' et vous invite à participer
au développement du sud de l'Ouganda et à venir en aide aux orphelins
du SIDA de cette région par des dons à l'[http://iccf-holland.org/ ICCF].
Vous pouvez également aider cette association caritative, en achetant
chez Amazon le livre de Moolenaar sur ''vim'',
des DVD du ''Seigneur des anneaux'' ou d'autres
produits culturels ; en précisant que vous venez de leur part
un pourcentage leur sera reversé : [http://iccf-holland.org/click.html faire un don].
 
=== Deux modes ===
 
''Vi'' suit un principe de fonctionnement particulier qui est un frein
à son apprentissage, mais qui ensuite lui donne tout son intérêt.
Lorsque ''vi'' est en « mode insertion »,
les touches du clavier correspondent au texte écrit dans le fichier,
mais lorsqu'il est en « mode édition », ces mêmes touches correspondent
aux commandes de l'éditeur.
 
 
[[Image:gvim.png|gvim une version graphique de vim]]
 
'''Gvim : exemple d'une fenêtre de ''vi'''''
 
=== Les commandes de base ===
 
{|
|colspan=2| '''Au lancement, ''vi'' est en « mode édition »'''
|-
| <tt>:e ''mon_beau_fichier''</tt>
| édite le fichier ''mon_beau_fichier''
|-
|colspan=2| '''le curseur peut alors se déplacer dans le fichier, avec les flèches ou avec les touches h, j, k et l'''
|-
| <tt>i</tt>
| passe en « mode insertion » avant le curseur
|-
|colspan=2| '''le texte du fichier est alors modifiable'''
|-
| <ESC>
| passe du « mode insertion » au « mode édition »
|-
| <tt>:w</tt>
| enregistre les modifications
|-
| <tt>:q</tt>
| quitte ''vi''
|}
 
=== Quelques liens ===
 
*[http://thomer.com/vi/vi.html ''vi'' lovers page]
*[http://www.vim.org/ la page officielle de ''vim'']
*[http://www.freenix.fr/unix/linux/HOWTO/Vim-HOWTO.html HOWTO de ''vim'']
 
== Débuter avec ''vi'' ==
 
=== Quelques commandes simples et utiles ===
 
{|
| <tt>:u</tt>
| annuler
|-
| <tt>/'''motif'''</tt>
| aller au '''motif''' suivant
|-
| <tt>n</tt>
| continuer la recherche
|-
| <tt>dd</tt>
| « couper » la ligne courante
|-
| <tt>yy</tt>
| « copier » la ligne courante
|-
| <tt>P</tt>
| « coller » avant le curseur ce qui vient d'être copié/coupé
|-
| colspan=2| Attention, ''vi'' est sensible à la casse, il s'agit bien d'un <tt>P</tt> majuscule. Le <tt>p</tt> minuscule colle après le curseur.
|-
| <tt>:s/'''motif1'''/'''motif2'''</tt>
| remplace '''motif1''' par '''motif2''' (1ère occurence sur la ligne du curseur)
|}
 
=== Se déplacer ===
 
{|
| colspan=2| '''déplacer le curseur dans le texte (les flèches sont également utilisables bien sur) :'''
|-
| <tt>h</tt>
| déplace le curseur vers la gauche
|-
| <tt>j</tt>
| déplace le curseur vers la droite
|-
| <tt>k</tt>
| déplace le curseur vers le haut
|-
| <tt>l</tt>
| déplace le curseur vers le bas
|-
| colspan=2| '''pour se déplacer dans la ligne :'''
|-
| <tt>0</tt> (zéro)
| déplace le curseur au début de la ligne (<tt>^</tt> indique le début de ligne pour les commandes)
|-
| <tt>$</tt>
| déplace le curseur en fin de ligne
|-
| <tt>w</tt>
| déplace le curseur d'un mot vers l'avant
|-
| <tt>b</tt>
| déplace le curseur d'un mot vers l'arrière
|-
| colspan=2| '''pour se déplacer écran par écran :'''
|-
| <CTRL> <tt>f</tt>
| un écran vers l'avant
|-
| <CTRL> <tt>b</tt>
| un écran vers l'arrière
|-
| colspan=2| '''se déplacer dans le fichier :'''
|-
| <tt>'''n'''G</tt>
| va à la ligne '''n'''
|-
| <tt>G</tt>
| va à la fin du fichier
|}
 
=== Manipuler les fichiers ===
 
{|
| colspan=2|'''Ouvrir un fichier avec ''vi'''''
|-
| <tt>vi ''mon_beau_fichier''</tt>
| ouvre ''mon_beau_fichier'' en lançant ''vi''
|-
| <tt>:e ''mon_beau_fichier''</tt>
| ouvre ''mon_beau_fichier''
|-
| colspan=2|'''Ouvrir une série de fichiers avec ''vi'''''
|-
| <tt>:n ''fichier1'' ''fichier2''</tt>
| charge les fichiers ''fichier1'' ''fichier2''
|-
| <tt>:n</tt>
| passe au fichier suivant
|-
| <tt>:prev</tt>
| revient au fichier précédent
|-
| colspan=2|'''Ouvrir plusieurs fichiers dans la même fenêtre'''
|-
| <tt>:sp ''fichier2''</tt>
| divise la fenêtre et charge ''fichier2'' dans la deuxième moitié
|-
| <tt>ww</tt>
| passe d'une sous-fenêtre à l'autre
|-
| colspan=2|'''En cas de problème'''
|-
| <tt>:e!</tt>
| recharge le dernier enregistrement du fichier et abandonne les modifications
|-
| <tt>:q!</tt>
| quitte ''vi'' sans enregistrer les modifications
|-
|<tt>vi -r ''mon_beau_fichier''</tt>
| récupère le fichier de sauvegarde temporaire de ''mon_beau_fichier'' (''mon_beau_fichier.swp'')
|-
| colspan=2|'''enregistrer et quitter'''
|-
| <tt>:w ''nouveau_nom''</tt>
| enregistre le fichier sous ''nouveau_nom''
|-
| <tt>:wq</tt> ou <tt>:x</tt> ou <tt>ZZ</tt>
| enregistre le fichier et quitte ''vi''
|}
 
== Aller un peu plus loin ==
 
=== Éditer efficacement ===
 
{|
| colspan=2|'''Passer au « mode insertion »'''
|-
| <tt>i</tt>
| passe au « mode insertion » avant le curseur
|-
| <tt>a</tt>
| passe au « mode insertion » après le curseur
|-
| <tt>I</tt>
| passe au « mode insertion » en début de ligne
|-
| <tt>A</tt>
| passe au « mode insertion » en fin de ligne
|-
| <tt>o</tt>
| passe au « mode insertion » sur une nouvelle ligne au-dessous du curseur
|-
| <tt>O</tt>
| passe au « mode insertion » sur une nouvelle ligne au-dessus du curseur
|-
| colspan=2|'''Remplacement'''
|-
| <tt>r</tt>
| remplace le caractère sous le curseur
|-
| <tt>R</tt>
| passe au « mode insertion » en remplaçant les caractères sous le curseur
|-
| colspan=2|'''Effacer (couper)'''
|-
| <tt>x</tt>
| efface le caractère sous le curseur
|-
| <tt>dd</tt>
| efface la ligne du curseur
|-
| <tt>d$</tt>
| efface du curseur jusqu'à la fin de la ligne
|-
| <tt>dw</tt>
| efface du curseur jusqu'à la fin du mot
|-
| <tt>dt'''c'''</tt>
| efface du curseur jusqu'au caractère '''c''' suivant non-inclus
|-
| <tt>df'''c'''</tt>
| efface du curseur jusqu'au caractère '''c''' suivant inclus
|-
| colspan=2|'''Copier'''
|-
| colspan=2|La syntaxe présentée pour couper est généralement valide pour copier, en remplaçant ''d'' par ''y'', d'une manière générale le curseur indique la position de départ et un motif de déplacement indiquent la fin du texte à copier/couper.
|-
| colspan=2|'''Les deux fonctions ont cependant certaines fonctionnalités spécifiques :'''
|-
| <tt>"'''n'''P</tt>
| colle le texte du '''n'''ième effacement (jusqu'à 9)
|-
| <tt>"'''c'''yy</tt>
| copie la ligne du curseur dans le tampon désigné par le caractère '''c'''
|-
| <tt>"'''c'''P</tt>
| colle le contenu du tampon '''c'''
|}
 
 
Sous ''vi'', une commande peut être lancée plusieurs fois simultanément, ''n'' ''commande'' lance ''n'' fois la commande, par exemple :
*<tt>2yy</tt> copie la ligne du curseur et la ligne suivante ;
*<tt>10x</tt> efface 10 caractères.
 
=== Se déplacer efficacement ===
 
{|
| colspan=2|'''Rechercher'''
|-
| <tt>/'''motif'''</tt>
| recherche '''motif''' vers le bas
|-
| <tt>?'''motif'''</tt>
| recherche '''motif''' vers le haut
|-
|<tt>n</tt>
| répète la recherche
|-
|<tt>N</tt>
| répète la recherche dans l'autre sens
|-
|<tt>/</tt>
| répète la recherche vers le bas
|-
|<tt>?</tt>
| répète la recherche vers le haut
|-
|colspan=2|'''Déplacer le curseur dans le fichier'''
|-
|<tt>e</tt>
| déplace le curseur à la fin du mot (du mot suivant si déjà atteint)
|-
|<tt>(</tt>
| déplace le curseur d'une phrase vers l'arrière
|-
|<tt>)</tt>
| déplace le curseur d'une phrase vers l'avant
|-
|<tt>{</tt>
| déplace le curseur d'un paragraphe vers l'arrière
|-
|<tt>}</tt>
| déplace le curseur d'un paragraphe vers l'avant
|-
|<tt>[[</tt>
| déplace le curseur d'une section vers l'arrière
|-
|<tt>]]</tt>
| déplace le curseur d'une section vers l'arrière
|-
|colspan=2|Remarque : ces motifs de déplacement peuvent être utilisés dans la syntaxe des coupers/copiers
|-
|colspan=2|'''Déplacer le curseur dans la fenêtre de ''vi'''''
|-
|<tt>H</tt>
| déplace le curseur sur la première ligne de l'écran
|-
|<tt>M</tt>
| déplace le curseur au milieu de l'écran
|-
|<tt>L</tt>
| déplace le curseur sur la dernière ligne de l'écran
|-
|<tt>(</tt>
| déplace le curseur d'une phrase vers l'arrière
|-
|<tt>z <ENTRÉE></tt>
| déplace la ligne du curseur en haut de l'écran
|-
|<tt>z.</tt>
| déplace la ligne du curseur au milieu de l'écran
|-
|<tt>z-</tt>
| déplace la ligne du curseur en bas de l'écran
|-
|colspan=2|'''Marquage'''
|-
|<tt>m'''c'''</tt>
| marque la position du curseur du caractère '''c'''
|-
|<tt><nowiki>'</nowiki>'''c'''</tt>
| déplace le curseur jusqu'à la marque '''c'''
|-
|<tt><nowiki>''</nowiki></tt>
| déplace le curseur jusqu'à la marque précédente
|}
Récupérée de « https://fr.wikibooks.org/wiki/Vi »