<!-- vim:set tw=78: $Date: 2000/08/20 13:28:05 $ -->
<!doctype linuxdoc system>
<article>

<title>HOWTO de l'éditeur ViM couleur (Vi aMélioré, avec coloration syntaxique)
<author>Al Dev (Alavoor Vasudevan) <htmlurl url="mailto:alavoor@yahoo.com"
name="alavoor@yahoo.com">;<newline>
Version française par Arnaud Launay,
<tt><htmlurl url="mailto:asl@launay.org" name="asl@launay.org"></tt>

<date>v14.0, 16 Août 2000
<abstract>
Ce document est un guide pour configurer très rapidement l'éditeur couleur ViM
sur les systèmes Linux ou Unix. Les informations présentées ici augmenteront la
productivité du programmeur puisque l'éditeur ViM supporte la coloration
syntaxique et les fontes grasses qui augmentent la « lisibilité » du code. La
productivité d'un programmeur est accrue de 2 à 3 fois avec un éditeur couleur
comme ViM.
Les informations de ce document s'appliquent à tous les systèmes d'exploitation
sous lesquels Vim fonctionne, c'est-à-dire Windows 95/NT, Apple Mac, et toutes
les versions d'Unix telles que Linux, FreeBSD, Solaris, HPUX, AIX, SCO, Ultrix,
Sinix, BSD, SCO, etc. (ce qui revient à dire, à peu près tous les OS de la
planète !).
</abstract>

<toc>

<sect>Introduction
<p>
L'éditeur ViM signifie « Vi iMproved » (Vi amélioré). Vi est l'éditeur le plus
populaire et le plus puissant du monde Unix. Son nom vient de l'abbréviation
éditeur <it><bf>Vi</bf></it>suel. Un éditeur visuel comme Vi était un grand
progrès par rapport aux éditeurs en ligne comme 'ed' (ou 'ex'). Les éditeurs
'ed' et 'ex' sont toujours disponibles sous Linux : voyez 'man ed' et 'man ex'.
<p>
Un bon éditeur augmentera la productivité du programmeur. Vim supporte la
coloration syntaxique du code ainsi que différentes fontes, normales,
grasses ou italiques. Les éditeurs couleurs comme ViM augmentent la productivité du
programmeur de 2 à 3 fois ! Les programmeurs peuvent lire le code beaucoup plus
rapidement si la syntaxe du code est colorées et mise en évidence.

<sect1>Avant d'installer <label id="avant">
<p>
Avant d'installer ViM, référez vous aux notes relevant de l'OS et aux
informations sur la compilation et l'usage de ViM sur -
<itemize>
<item> Allez ici et regardez les fichiers os_*.txt <url url="http://cvs.vim.org/cgi-bin/cvsweb/vim/runtime/doc">
</itemize>

Si vous n'avez pas le paquetage ViM (RPM, DEB, tar, zip) alors chargez le code
source par ftp sur le site officiel de ViM
<itemize>
<item>La page maison de ViM est sur <url url="http://www.vim.org">
<item>Le site miroir US est sur <url url="http://www.us.vim.org">
<item>Le site FTP est sur <url url="ftp://ftp.vim.org/pub/vim">
<item>Ou utilisez un des miroirs sur <url url ="ftp://ftp.vim.org/pub/vim/MIRRORS">
</itemize>

<sect1> Installer ViM sous RedHat Linux
<p>
Pour utiliser ViM, installez les paquetages rpm suivants sous RedHat -
<code>
	rpm -i vim*.rpm
Ou comme ceci -
	rpm -i vim-enhanced*.rpm
	rpm -i vim-X11*.rpm
	rpm -i vim-common*.rpm
	rpm -i vim-minimal*.rpm
</code>
Vous pouvez voir la liste des fichiers ViM que rpm a installé par
<code>
	rpm -qa | grep ^vim | xargs rpm -ql | less
ou
	rpm -qa | grep ^vim | awk '{print "rpm -ql " $1 }' | /bin/sh | less
</code>

Et regardez la sortie en utilisant j, k, CTRL+f, CTRL+D, CTRL+B, CTRL+U ou les
touches fléchées, page up/down. Voyez aussi 'man less'.

<p>
Notez que les paquetages RPM pour RedHat Linux utilisent une interface Motif.
Si vous avez installé les librairies GTK sur votre système, vous pouvez
envisager de recompiler ViM à partir du source code afin de bénéficier d'une
interface graphique propre. Pour les informations sur la compilation du code de
ViM, voyez « installer ViM sur Unix » plus bas.

<sect1> Installer ViM sous GNU Debian Linux
<p>
Pour installer ViM sous Debian Linux (GNU Linux), identifiez vous en tant que superutilisateur et lorsque vous êtes connecté à Internet tapez -
<code>
apt-get install vim vim-rt
</code>
Cela chargera la dernière version de ViM, l'installera, le configurera, et
supprimera les fichiers .deb chargés. Le premier paquetage listé est
ViM, l'éditeur standard, compilé avec support pour X11, vim-rt est le
vim-runtime, c'est-à-dire les fichiers de syntaxe et d'aide.

<sect1> Installer ViM sous Unix
<p>
Pour les autres versions d'Unix comme Solaris, HPUX, AIX, Sinix, SCO,
récupérez les fichiers sources (voyez <ref id="avant">)
<code>
	zcat vim.tar.gz | tar -xvf -
	cd vim-5.6/src
	./configure --enable-gui=motif
	make
	make install
</code>

<sect1> Installer ViM sous Microsoft Windows 95/NT
<p>
Pour Windows 95/NT, récupérez les fichiers zip et installez-les en cliquant
sur setup. Vous devez charger DEUX fichiers zip -
<itemize>
<item> Fichier contenant le runtime <bf>vim*rt.zip</bf>
<item> Fichier de commande ViM <bf>vim*56.zip</bf> dont la version est la 5.6
</itemize>

Récupérez ces deux fichiers (voir <ref id="avant">)

Décompactez les fichiers zip en utilisant Winzip <url
url="http://www.winzip.com">. Les deux fichiers zip (vim*rt.zip et
vim*56.zip) doivent être décompressés dans le même répertoire, disons
<bf>c:\vim</bf>.

Pour Windows 95/98, ajoutez la variable d'environnement VIM dans autoexec.bat
en ajoutant cette ligne -
<code>
set VIM=c:\vim\vim56
</code>

Pour Windows NT, ajoutez la variable d'environnement dans le dialogue
<bf>Control Panel | System | Environment | System Properties</bf> :
<code>
VIM=c:\vim\vim56
</code>

La variable VIM doit pointer là où vous avez installé le répertoire vim56.
Vous pouvez aussi ajouter l'emplacement de gvim.exe à votre PATH.

Il est probable que vous deviez vous déconnecter et vous réidentifier pour
avoir les bonnes variables. À l'invite MSDOS tapez -
<code>
	set vim
</code>

Et vous devriez voir - VIM=c:\vim\vim56

Créez un raccourci sur votre bureau en copiant/collant de
c:\vim\vim56\gvim.exe. Copiez le fichier gvimrc_example vers $VIM\_gvimrc.
Dans mon cas, il s'agit de c:\vim\vim56\_gvimrc.

<sect1> Installer ViM sous VMS
<p>
<sect2> Charger les fichiers
<p>
Vous aurez besoin des archives Unix et extra pour construire vim.exe pour VMS.
Pour utiliser toute la puissance de ViM vous aurez également besoin des
fichiers runtime. Prenez ces fichiers (voir <ref id="avant">).

Vous pouvez charger des exécutables précompilés sur <url
url="http://www.polarfox.com/vim">.

Les auteurs de ViM VMS sont -
<itemize>
<item>
	<htmlurl url="mailto:
zoltan.arpadffy@essnet.se
		 "name="
zoltan.arpadffy@essnet.se
	">
<item>
	<htmlurl url="mailto:
arpadffy@altavista.net
		 "name="
arpadffy@altavista.net
	">
<item>
	<htmlurl url="mailto:
	cec@gryphon.gsfc.nasa.gov
		 "name="
	cec@gryphon.gsfc.nasa.gov
	">
<item>
	<htmlurl url="mailto:
BNHunsaker@chq.byu.edu
		 "name="
BNHunsaker@chq.byu.edu
	">
<item>
	<htmlurl url="mailto:
sandor.kopanyi@altavista.net
		 "name="
sandor.kopanyi@altavista.net
	">
</itemize>

<sect2> Compiler
<p>
Décompactez les archives Unix et Extra dans un même répertoire. Dans le
sous-répertoire <.SRC> vous devriez trouver le fichier make OS_VMS.MMS. En
éditant ce fichier vous pourrez choisir les versions des caractères, des
interfaces et du débogage. Il y a également des options additionnelles
concernant les supports pour Perl, Python et Tcl.

Vous aurez besoin soit de l'utilitaire DECSET mms ou du clone disponible
gratuitement appellé mmk (VMS n'a pas d'utilitaire make en distribution
standard). Vous pouvez récupérer mmk sur http://www.openvms.digital.com/freeware/MMK/

Si vous avez MMS sur votre système, la commande

>	mms /descrip=os_vms.mms

construira votre version personnalisée de ViM.
La commande équivalente pour mmk est :

>	mmk /descrip=os_vms.mms

<sect2> Déploiement
<p>
ViM utilise une structure de répertoires spéciale pour les fichiers de
documentation et d'utilisation :

<code>
   vim (ou autre)
    |- tmp
    |- vim55
    |----- doc
    |----- syntax
    |- vim56
    |----- doc
    |----- syntax
    vimrc    (fichiers système rc)
    gvimrc
</code>

Utilisez :
<code>
>	define/nolog device:[leading-path-here.vim]       vim
>	define/nolog device:[leading-path-here.vim.vim56] vimruntime
>	define/nolog device:[leading-path-here.tmp]       tmp
</code>
pour que vim.exe puisse trouver ses fichiers de documents, ses types de
fichiers et de syntaxe, et pour spécifier un répertoire où les fichiers
temporaires seront placés. Copiez le sous-répertoire « runtime » de la
distribution vim dans vimruntime.

Note : les variables $VIMRUNTIME et $TMP sont optionnelles. Lisez en plus sur
:help runtime.

<sect2> Usage pratique
<p>
Habituellement vous devrez faire tourner une seule version de ViM sur votre
système, il est donc suffisant de dédier un seul répertoire à ViM.
Copiez toute la structure des répertoires de runtime dans la position de
déploiement. Ajoutez les lignes suivantes à votre LOGIN.COM (dans le
répertoire SYS$LOGIN). Définissez la variable $VIM en tant que :

<code>
>	$ define VIM device: <path>
</code>

Configurez quelques symboles :

<code>
>	$ ! vi lance ViM en mode caractère
>	$ vi*m  :== mcr device:<path>VIM.EXE

>	$ !gvi lance ViM en mode GUI
>	$ gv*im :== spawn/nowait mcr device:<path>VIM.EXE -g
</code>

Créez les fichiers .vimrc et .gvimrc dans votre répertoire personnel
(SYS$LOGIN).

La méthode la plus simple est de renommer les fichiers d'exemples. Vous pouvez
laisser le fichier de menu (MENU.VIM) et les fichiers vimrc et gvimrc dans le
répertoire original $VIM. Ce sera la configuration par défaut pour tous les
utilisateurs, mais ceux-ci pourront apporter leurs propres modifications à la
configuration via les fichiers .vimrc et .gvimrc de leur répertoire personnel.
Ceci devrait marcher sans problème.

Note : Rappellez-vous, les fichiers systèmes rc (défaut pour tous les
utilisateurs) n'ont pas de~«~.~»~final. Ainsi, les fichiers systèmes rc sont :

<code>
>	VIM$:vimrc
>	VIM$:gvimrc
>	VIM$:menu.vim
</code>
et les fichiers utilisateurs personnalisés sont :
<code>
>	sys$login:.vimrc
>	sys$login:.gvimrc
</code>

Vous pouvez vérifier que tout fonctionne et est à la bonne place avec la
commande~:version.

<code>
Exemple de LOGIN.COM :

>	$ define/nolog VIM RF10:[UTIL.VIM]
>	$ vi*m  :== mcr VIM:VIM.EXE
>	$ gv*im :== spawn/nowait mcr VIM:VIM.EXE -g
>	$ set disp/create/node=192.168.5.223/trans=tcpip
</code>

Note : Cette configuration devrait être suffisante si vous travaillez sur un
serveur seul ou dans un environnement clusterisé, mais si vous désirez
utiliser ViM en tant qu'éditeur internoeuds, il suffit de définir le
«~chemin~» complet :

<code>
>	$ define VIM "<server_name>[""user password""]::device:<path>"
>	$ vi*m :== "mcr VIM:VIM.EXE"
</code>

par exemple :

<code>
>	$ define VIM "PLUTO::RF10:[UTIL.VIM]"
>	$ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! si un pass est nécessaire
</code>
Vous pouvez aussi utiliser la variable $VIMRUNTIME pour pointer sur la bonne
version de ViM si vous avez plusieurs versions installées en même temps. Si
$VIMRUNTIME n'est pas défini ViM prendra la valeur de la variable $VIM. Vous
pourrez trouver plus d'informations sur la variable $VIMRUNTIME en tapant
:help runtime en commande ViM.

<sect2> Questions sur le mode GUI
<p>
VMS n'est pas un environnement X window natif, vous ne pouvez donc pas lancer
ViM en mode GUI « juste comme ça ». Mais ce n'est pas trop compliqué d'obtenir
un ViM fonctionnel.

<code>
1) Si vous travaillez sur la console X VMS.
   Lancez ViM avec la commande :

>	$ mc device:<path>VIM.EXE -g

ou tapez :gui en commande à l'invite ViM. Pour plus d'infos tapez :help gui

2) Si vous travaillez sur un autre environnement X window comme Unix ou une
console VMS X distante. Configurez votre affichage sur cet hôte avec :

>	$ set disp/create/node=<addresse IP>/trans=<nom-transport>

et lancez ViM comme au point 1. Vous pourrez trouver plus d'aide dans la
documentation VMS ou tapez: help set disp à l'invite VMS.
   Exemples :

>	$ set disp/create/node=192.168.5.159             ! transport par défaut DECNet
>	$ set disp/create/node=192.168.5.159/trans=tcpip ! réseau TCP/IP
>	$ set disp/create/node=192.168.5.159/trans=local ! affichage sur le même noeud
</code>

Note : Vous ne devez en définir qu'un. Pour plus d'infos tapez $help set disp à
l'invite VMS.

<sect1> Installer ViM sous OS/2
<p>
Lisez les notes de version de ViM sur OS/2, voyez <ref id="avant">.

Pour le moment il n'y a pas de version PM native de la version GUI de ViM ; la
version OS/2 est une application en console. Néanmoins, il y a maintenant une
version Win32s-compatible GUI, qui devrait être utilisable par les
utilisateurs de Warp4 (qui supporte Win32s) dans une session Win-OS/2. Les
notes de ce fichier se réfèrent à la version console native.

Pour utiliser ViM, vous aurez besoin de l'environnement de lancement emx (au
moins la version 0.9b). Elle est généralement disponible en tant que (demandez le à
Archie) :
<code>
    emxrt.zip     emx runtime package
</code>

<sect1> Installer ViM sur Apple Macintosh
<p>
Lisez les notes de version de ViM sur Mac, voyez <ref id="avant">.

L'auteur de ViM sur Mac (de l'ancienne version 3.0) est
<code>
Eric Fischer
5759 N. Guilford Ave
Indianapolis IN 46220 USA
</code>
Écrivez à
	<htmlurl url="mailto:
enf@pobox.com
		"name="
enf@pobox.com
	">

Rapport de Bogue Mac.
Lorsque vous avez à rapporter tout changement spécifique au Mac, bogue ou
option, incluez l'adresse suivante dans le champ « To: » ou « Copy To: ».
	<htmlurl url="mailto:
 dany.stamant@sympatico.ca
	        "name="
 dany.stamant@sympatico.ca
	">

ViM compile sans ajout avec le projet CodeWarrior en utilisant CodeWarrior 9.
Si vous utilisez une version plus récente (CW Pro) vous devrez convertir le
projet avant toute chose.
Pour compiler ViM pour Macs 68k vous devrez ouvrir la ressource « size » dans
ResEdit et activer le bouton « High level events aware » pour avoir un
copier/coller fonctionnel.
Vous devrez augmenter la partition de mémoire à au moins 1024 koctets pour
éviter à ViM de se crasher faute de mémoire suffisante.

<sect> Configurez les fichiers d'initialisation de ViM
<p>
Pour permettre la coloration syntaxique, vous DEVEZ copier le fichier vimrc
dans votre répertoire personnel. Il ajoutera également le menu « Syntax » pour
la commande gvim. Vous pouvez cliquer sur le menu Syntax et sélectionner le
langage approprié, comme C++, Perl, Java, SQL, ESQL, etc.
<CODE>
cd $HOME
cp /usr/doc/vim-common-5.7/gvimrc_example  ~/.gvimrc
cp /usr/doc/vim-common-5.7/vimrc_example  ~/.vimrc
</CODE>
Les commentaires du .vimrc commencent avec les apostrophes (").
Vous pouvez personnaliser vim en éditant le fichier $HOME/.vimrc et en
rajoutant les lignes suivantes :
<CODE>
set guifont=8x13bold
"set guifont=9x15bold
"set guifont=7x14bold
"set guifont=7x13bold
</CODE>
Il est <bf>extrêmement</bf> recommandé que vous mettiez les compteurs
« tabstop » et « shiftwidth » à 4.
Le compteur « tabstop » est le nombre d'espaces que TAB ajoutera lorsque vous
éditerez sous vim. Le compteur « shiftwidth » est le nombre d'espaces qui
décaleront les lignes en tapant les commandes vi ">>" ou "<<". Référez vous
au tutorial de Vim <ref id="Tutoriel Vim"> pour plus de détails.
Pour mettre en place tabstop et shiftwidth :
<CODE>
set tabstop=4
set shiftwidth=4
set nowrapscan
set ignorecase
</CODE>

Pour voir la liste des fontes disponibles sous Linux/Unix voyez la commande
<bf>xlsfonts</bf>. Tapez -
<code>
	bash$ xlsfonts | less
	bash$ xlsfonts | grep -i bold | grep x
	bash$ man xlsfonts
</code>


<sect1> Paramètres du Xdefaults
<p>
Vous pouvez configurer quelques-unes des propriétés de Vim dans le fichier
Xdefaults.

<bf> ATTENTION : </bf><it>Ne mettez pas <bf>Vim*geometry</bf>, il coincerait
les menu gvim, utilisez plutôt <bf>Vim.geometry</bf> à la place.</it>

Éditez votre $HOME/.Xdefaults et ajoutez les lignes suivantes :
<CODE>
! GVim super couleurs.
Vim*useSchemes:		all
Vim*sgiMode:		true
Vim*useEnhancedFSB:	true
Vim.foreground:		Black
!Vim.background:	lightyellow2
Vim*background:		white
! N'utilisez PAS Vim*geometry, il coincerait les menu gvim,
! utilisez Vim.geometry. Un astérisque entre Vim et geometry n'est pas autorisé.
! Vim.geometry: widthxheight
Vim.geometry:		88x40
!Vim*font:		-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15-*5
Vim*menuBackground: yellow
Vim*menuForeground: black
</CODE>
Afin que ces changements soient pris en compte, tapez :
<code>
	xrdb -merge $HOME/.Xdefaults
	man xrdb
</code>

Vous pouvez aussi éditer votre fichier ~/.gvimrc pour changer les couleurs de
fond :
<CODE>
	gvim $HOME/.gvimrc
Les meilleures couleurs de fond sont jaune clair ou blanc.
	highlight Normal guibg=lightyellow
</CODE>

<sect1> Fichier vimrc d'exemple
<p>
Vous pouvez changer des paramètres comme la couleur, les fontes grasses ou
normales dans le fichier gvimrc. Il est <bf>extrêmement</bf> recommandé de
configurer la couleur de fond au jaune clair ou blanc. Les ergonomistes disent
que la meilleure couleur de fond est le jaune clair ou le blanc. Vous pouvez
changer la variable «~guibg~» comme suit :
<code>
	highlight Normal guibg=lightyellow
</code>

Le fichier d'exemple de vim-5.5/runtime/vimrc_example est celui-ci :
<tscreen><verb>
" Un exemple de fichier vimrc.
"
" Mainteneur :	Bram Moolenaar <Bram@vim.org>
" Dernières modifications : 9 Sep 1999
"
" Pour l'utiliser, copiez le dans
"     pour Unix et OS/2 :  ~/.vimrc
"	     pour Amiga :  s:.vimrc
" pour MS-DOS and Win32 :  $VIM\_vimrc

set nocompatible	" Utilise les défauts Vim (bien mieux !)
set bs=2		" autorise l'effacement de tout en mode insertion
set ai			" toujours utiliser l'autoindentation
set backup		" Conserver un fichier de sauvegarde
set viminfo='20,\"50	" Lit/écrit un fichier .viminfo, ne sauve pas plus
			" de 50 lignes de registres
set history=50		" Conserve 50 lignes d'historique des commandes
set ruler		" Montre toujours la position du curseur

" Pour l'interface Win32: retirez l'option 't' de 'guioptions': pas d'entrée menu tearoff
" let &amp;guioptions = substitute(&amp;guioptions, "t", "", "g")

" N'utilise pas le mode Ex, utilise Q pour le formatage
map Q gq

" p en mode Visuel remplace le texte sélectionné par le registre "".
vnoremap p <Esc>:let current_reg = @"<CR>gvdi<C-R>=current_reg<CR><Esc>

" Active la coloration syntaxique lorsque le terminal dispose de couleurs
" Active aussi la coloration de la dernière chaîne recherchée.
if &amp;t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch
endif

" Ne lance la partie suivante que si le support des autocommandes a été inclus
" lors de la compilation
if has("autocmd")

 " Dans les fichiers textes, toujours limiter la longueur du texte à 78
 " caractères
 autocmd BufRead *.txt set tw=78

 augroup cprog
  " Supprime toutes les autocommandes cprog
  au!

  " Lors du début d'édition d'un fichier :
  "   Pour les fichiers C et C++ active le formatage des
  "   commentaires et l'indentation C
  "   Pour les autres fichiers, les désactive.
  "   Ne pas changer l'ordre, il est important que la ligne
  "   avec * arrive avant.
  autocmd FileType *      set formatoptions=tcql nocindent comments&
  autocmd FileType c,cpp  set formatoptions=croql cindent comments=sr:/*,mb:*,el:*/,://
 augroup END

 augroup gzip
  " Supprime toutes les autocommandes gzip
  au!

  " Active l'édition des fichiers gzippés
  " Active le mode binaire avant de lire le fichier
  autocmd BufReadPre,FileReadPre	*.gz,*.bz2 set bin
  autocmd BufReadPost,FileReadPost	*.gz call GZIP_read("gunzip")
  autocmd BufReadPost,FileReadPost	*.bz2 call GZIP_read("bunzip2")
  autocmd BufWritePost,FileWritePost	*.gz call GZIP_write("gzip")
  autocmd BufWritePost,FileWritePost	*.bz2 call GZIP_write("bzip2")
  autocmd FileAppendPre			*.gz call GZIP_appre("gunzip")
  autocmd FileAppendPre			*.bz2 call GZIP_appre("bunzip2")
  autocmd FileAppendPost		*.gz call GZIP_write("gzip")
  autocmd FileAppendPost		*.bz2 call GZIP_write("bzip2")

  " Après la lecture du fichier compressé : décompresse le texte dans le
  " buffer avec "cmd"
  fun! GZIP_read(cmd)
    let ch_save = &amp;ch
    set ch=2
    execute "'[,']!" . a:cmd
    set nobin
    let &amp;ch = ch_save
    execute ":doautocmd BufReadPost " . expand("%:r")
  endfun

  " Après l'écriture du fichier compressé : compresse le fichier écrit avec "cmd"
  fun! GZIP_write(cmd)
    if rename(expand("<afile>"), expand("<afile>:r")) == 0
      execute "!" . a:cmd . " <afile>:r"
    endif
  endfun

  " Avant l'ajout au fichier compressé : décompresser le fichier avec "cmd"
  fun! GZIP_appre(cmd)
    execute "!" . a:cmd . " <afile>"
    call rename(expand("<afile>:r"), expand("<afile>"))
  endfun

 augroup END

 " Ce qui suit est désactivé, car il change la liste de sauts. On ne peut pas utiliser
 " CTRL-O pour revenir en arrière dans les fichiers précédents plus d'une fois.
 if 0
  " Lors de l'édition d'un fichier, saute toujours à la dernière position du curseur.
  " Ceci doit se trouver après les commandes de décompression.
   autocmd BufReadPost * if line("'\"") && line("'\"") <= line("$") | exe "normal `\"" | endif
 endif

endif " has("autocmd")
</verb></tscreen>

<sect1> Fichier gvimrc d'exemple
<p>
L'exemple de gvimrc de vim-5.5/runtime/gvimrc_example ressemble à
celui-ci :
<CODE>
" Un exemple de fichier gvimrc.
" Ces commandes sont exécutées lors du lancement de l'interface graphique.
"
" Mainteneur :	Bram Moolenaar <Bram@vim.org>
" Dernières modifications : 2 Fév 1999
"
" Pour l'utiliser, copiez le dans
"      pour Unix et OS/2 :  ~/.gvimrc
"	      pour Amiga :  s:.gvimrc
"  pour MS-DOS and Win32 :  $VIM\_gvimrc

" Passe les commandes externes par un tuyau au lieu d'un pseudo-tty
"set noguipty

" Active la fonte X11 à utiliser
" set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1

" Rend la ligne de commande de 2 lignes plus grande
set ch=2

" Permet le shift-insert fonctionnel comme dans les Xterm
map <S-Insert> <MiddleMouse>
map! <S-Insert> <MiddleMouse>

" Ne fait ceci que pour Vim de version 5.0 et ultérieures.
if version >= 500

  " J'aime avoir des chaînes éclairées dans les commentaires C
  let c_comment_strings=1

  " Active la coloration syntaxique.
  syntax on

  " Active la coloration de la chaîne recherchée.
  set hlsearch

  " Pour la version Win32, on a "K" qui cherche le keyword dans un fichier d'aide
  "if has("win32")
  "  let winhelpfile='windows.hlp'
  "  map K :execute "!start winhlp32 -k <cword> " . winhelpfile <CR>
  "endif

  " Cache le pointeur de souris lorsque l'on tape
  set mousehide

  " Utilise des couleurs sympathiques
  " Le fond pour le texte normal est en gris clair
  " Le texte sous la dernière ligne est en gris sombre
  " Le curseur est gris
  " Les constantes ne sont pas soulignées mais ont un fond légèrement plus clair
  highlight Normal guibg=grey90
  highlight Cursor guibg=Green guifg=NONE
  highlight NonText guibg=grey80
  highlight Constant gui=NONE guibg=grey95
  highlight Special gui=NONE guibg=grey95

endif
</CODE>

<sect>Fichier d'initialisation de la coloration syntaxique
<p>
<sect1>Méthode automatique
<p>
La section ci-dessous provient d'une session gvim en tapant « :help syntax » -
<code>
bash$ gvim un_test
:help syntax
</code>
Cliquez sur le menu Window=>Close_Others pour fermer les autres fenêtres.
Utilisez ensuite CTRL+] du menu «~Procédures de chargement de syntaxe~» qui
vous emmènera sur la bonne entrée. Utilisez CTRL+T pour revenir en arrière.

Si un type de fichier que vous désirez utiliser n'est pas encore détecté, il y
a deux moyens pour l'ajouter. Il vaut mieux ne pas modifier le fichier
<it>$VIMRUNTIME/filetype.vim</it>. Il sera réécrit lors de l'installation
d'une nouvelle version de ViM.
Crééz un fichier dans $HOME/vim/myfiletypes.vim et ajoutez lui ces lignes -
<code>
" Nom du fichier : $HOME/vim/mestypesdefichiers.vim
" mestypesdefichiers
augroup filetype
	au! BufRead,BufNewFile *.mine   set filetype=mine
	au! BufRead,BufNewFile *.xyz    set filetype=drawing
	au! BufRead,BufNewFile *.prc    set filetype=plsql
augroup END
</code>

Ajoutez ensuite une ligne à vos fichiers $HOME/.vimrc et $HOME/.gvimrc pour
initialiser la variable «~mestypesdefichiers~» au nom de ce fichier.
(<bf>ATTENTION : </bf> Vous DEVEZ mettre ceci dans les deux fichiers vimrc et
gvimrc pour que ceci fonctionne. Exemple :
<code>
<code>
	let myfiletypefile = "~/vim/myfiletypes.vim"
</code>

<bf>NOTE : </bf> Assurez vous que vous initialisez bien «~mestypesdefichiers~»
avant de passer à la détection du type de fichier. Ceci doit intervenir avant
toute commande « :filetype on » ou « :syntax on ».

Votre fichier sera alors parcouru après l'intallation des autocommandes de
type de fichier par défaut. Ceci vous permet de passer outre tous les
paramètres par défaut, en utilisant « :au! » pour supprimer les autocommandes de
type de fichier existant pour le même schéma. Seule l'autocommande pour
parcourir le fichier scripts.vim est donné plus tard. Ceci vous permettra de
vous assurer que les autocommandes dans « mestypesdefichiers » sont utilisées
avant de vérifier le contenu du fichier.

<sect1>Méthode manuelle
<p>
Au lieu d'utiliser un menu « Syntax » vous pouvez lire manuellement le fichier
de syntaxe. Éditez le fichier avec gvim et donnez la commande « so » à : (en mode
d'échappement). Par exemple :
<CODE>
	gvim foo.pc
	:so $VIM/syntax/esqlc.vim
</CODE>
Les fichiers de syntaxe sont dans /usr/share/vim/syntax/*.vim. Vim supporte
plus de 120 fichiers de syntaxe différents pour divers langages comme C++,
PERL, VHDL, JavaScript, etc., et énormément d'autres !

Chaque fichier de syntaxe supporte une ou plusieurs extensions de fichiers par
défaut, par exemple, le fichier de syntaxe JavaScript supporte l'extension
*.js. Si vous utilisez une extension qui crée un conflit avec un autre fichier
de syntaxe par défaut (comme ajouter du JavaScript à un fichier *.html) vous
pourrez alors charger le fichier de syntaxe additionnel avec la commande :so
$VIM/syntax/javascript.vim. Pour éviter d'avoir à le taper, vous pouvez créer
un lien symbolique par :
<code>
	ln -s $VIM/syntax/javascript.vim js
	gvim foo.html  (... this file contains javascript functions and HTML)
	:so js
</code>


<sect>Usage de ViM
<p>
Vous pouvez utiliser ViM sous deux modes, l'un avec interface graphique et
l'autre sans. Pour utiliser l'interface graphique utilisez la commande :
<CODE>
	gvim foo.cpp
</CODE>
Pour utiliser le mode non-graphique utilisez :
<CODE>
	vim foo.cpp
ou le mode ancien
	vi foo.cpp
</CODE>

Il est très recommandé que vous utilisiez toujours gvim à la place de vim, car
le mode GUI avec les couleurs augmentera réellement votre productivité.

Le mode GUI gvim permet ce qui suit :
<itemize>
<item> vous pouvez marquer le texte en utilisant la souris pour faire des
copier/couper/coller ;
<item> vous pouvez utiliser la barre de menu qui a les boutons File, Edit,
Window, Tools, Syntax et Help ;
<item> également dans un futur proche dans gvim - une seconde barre de menu
affichera la liste des fichiers en cours d'édition, et vous pourrez changer
entre les fichiers en cliquant sur leur nom, à moins que vous n'utilisiez les
commandes vi - :e#, :e#1, :e#2, :e#3, :e#4, etc. pour sélectionner les
fichiers.
</itemize>

<sect> Compagnons Vi
<p>
En général ViM est utilisé en conjonction avec d'autres outils puissants comme
<bf>ctags</bf> et <bf>gdb</bf>. <bf>ctags</bf> est très rapide pour la
navigation au milieu de millions de lignes de code « C/C++ » et <bf>gdb</bf> est
pour le déboguage de code « C/C++ ».
Une brève introduction à ces deux commandes indispensables sera donnée dans ce
chapitre.
<p>
<bf>ctags</bf> est la commande la plus puissante pour coder en C, C++, Java,
Perl, scripts shell Korn/Bourne ou Fortran. Les développeurs utilisent
intensivement <bf>ctags</bf> pour naviguer au travers de milliers de
fonctions à l'intérieur de programmes C/C++. Voyez `man ctags' sous Unix.
Il est <bf>très important</bf> que vous appreniez comment utiliser ctags pour
développer des programmes en C, C++, Java, etc. La navigation est la tâche
simple la plus importante lors de développement en C ou C++. L'utilisation de
ctags peut vous aider à rapidement lire le code en sautant de la ligne d'appel
à la fonction appellée, en s'enfonçant dans les appels de fonctions imbriquées,
et en remontant de la fonction la plus imbriquée jusqu'à la fonction
principale.
Vous pouvez aller et revenir de fonction en fonction très rapidement.

Sans NAVIGATION vous serez complètement perdu ! <bf>ctags</bf> est comme le
COMPAS magnétique nécessaire aux programmeurs.

Utilisation de <bf>ctags</bf> :
<code>
	ctags *.cpp
	gvim -t foo_function
	gvim -t main
</code>
Ceci éditera le fichier programme C++ qui contient la fonction foo_function()
et placera directement le curseur sur la première ligne de la fonction
foo_function(). La deuxième commande vous placera sur la ligne contenant la
définition de la fonction main().

À l'intérieur de l'éditeur ViM, vous pouvez sauter à une fonction en tapant :
(double point) tag nom_de_la_fonction comme ci dessous :
<code>
	:tag fonction_exemple
</code>
Ceci placera le curseur sur la première ligne de fonction_exemple().

Si vous voulez sauter dans la fonction à partir de la ligne du fichier
contenant le nom de la fonction, placez le curseur juste avant le nom de la
fonction et tapez <bf>CTRL+]</bf> (tapez la touche de contrôle et le crochet
gauche simultanément).
<code>
	        // code d'exemple
	        switch(id_number) {
	                Case 1:
	                        if ( foo_function( 22, "abcef") == 3 )
	                            ^
	                            |
	                            |
	                            |
	          Placez le curseur ici (juste avant foo_function) et tapez CTRL+]
	          Ceci vous emmènera à la fonction nommée "foo_function".
	          Pour revenir à cette ligne tapez CTRL+t
</code>
Pour revenir à la ligne d'appel tapez <bf>CTRL+t</bf> (la touche de contrôle
et la lettre 't' simultanément). Continuez à appuyer sur <bf>CTRL+t</bf> pour
inverser et revenir à la première ligne où vous avez commencé la navigation.
C'est-à-dire que vous pouvez conserver pressées <bf>CTRL+]</bf> et ensuite taper
<bf>CTRL+t</bf> pour revenir. Vous pouvez refaire ceci aussi souvent que vous
le désirez pour avoir une navigation complète au travers de toutes les
fonctions C ou C++.

<sect1> Ctags pour ESQL
<p>
Puisque ctags ne supporte pas directement le langage  Embedded SQL/C (ESQL),
le script shell suivant peut être utilisé pour créer les marques pour esql.
ESQL/C est un ensemble de commandes SQL de base de donnée à l'intérieur de
programmes « C ».
Le ESQL/C d'Oracle est appellé Pro*C et Sybase, Informix ont ESQL/C et
PostgreSQL a produit « ecpg ».<p>

Sauvez ce fichier sous « sqltags.sh » et tapez chmod a+rx tags_gen.sh.
<code>
#!/bin/sh

# Programme pour créer les ctags pour les fichiers ESQL, C++ et C
ESQL_EXTN=pc
tag_file1=tags_file.1
tag_file2=tags_file.2

which_tag=ctags

rm -f $tag_file1 $tag_file2 tags

aa=`ls *.$ESQL_EXTN`
#echo $aa
for ii in $aa
do
	#echo $ii
	jj=`echo $ii | cut -d'.' -f1`
	#echo $jj

	if [ ! -f $jj.cpp ]; then
	        echo " "
	        echo " "
	        echo "*******************************************************"
	        echo "Les fichiers ESQL *.cpp files n'existent pas..."
	        echo "Vous devez générer les fichiers *.cpp à partir des *.pc"
	        echo "en utilisant le pré-compilateur Oracle Pro*C ou Sybase"
	        echo "ou le pré-compilateur Informix esql/c."
	        echo "Puis relancez cette commande"
	        echo "*******************************************************"
	        echo " "
	        exit
	fi

	rm -f tags
	$which_tag $jj.cpp
	kk=s/$jj\.cpp/$jj\.pc/g

	#echo $kk > sed.tmp
	#sed -f sed.tmp tags >> $tag_file1

	#sed -e's/sample\.cpp/sample\.pc/g' tags >> $tag_file1
	sed -e $kk tags >> $tag_file1
done

# S'occupe des fichiers C++/C - exclut les fichiers ESQL *.cpp
rm -f tags $tag_file2
bb=`ls *.cpp *.c`
aa=`ls *.$ESQL_EXTN`
for mm in $bb
do
	ee=`echo $mm | cut -d'.' -f1`
	file_type="NOT_ESQL"
	# Exclut les fichiers ESQL *.cpp et *.c
	for nn in $aa
	do
	        dd=`echo $nn | cut -d'.' -f1`
	        if [ "$dd" = "$ee" ]; then
	                file_type="ESQL"
	                break
	        fi
	done

	if [ "$file_type" = "ESQL" ]; then
	        continue
	fi

	rm -f tags
	$which_tag $mm
	cat tags >> $tag_file2
done

mv -f $tag_file2 tags
cat  $tag_file1 >> tags
rm -f $tag_file1

# Doit sortir le fichier des marqueurs pour fonctionner correctement...
sort tags > $tag_file1
mv $tag_file1 tags
</code>

<sect1> Ctags pour les programmes JavaScript, les scripts shell Korn, Bourne
<p>
Le script shell donné ci-dessous peut être utilisé pour générer les marques
pour une très large variété de programmes écrits en JavaScript, les scripts
PHP/FI, Korn, C, Bourne et beaucoup d'autres. C'est un module très générique.

Sauvez ce fichier sous tags_gen.sh et tapez chmod a+rx tags_gen.sh.
<code>
#!/bin/sh

tmp_tag=tags_file
tmp_tag2=tags_file2

echo " "
echo " "
echo " "
echo " "
echo " "
echo "Génère les marqueurs pour..."
while :
do
	echo "Entrer l'extension du fichier pour lequel vous voulez générer des marqueurs."
	echo -n "Les extensions de fichiers peuvent être sh, js, ksh, etc... : "
	read ans

	if [ "$ans" == "" ]; then
	        echo " "
	        echo "Mauvaise entrée. Essayez encore !"
	else
	        break
	fi
done

rm -f $tmp_tag

aa=`ls *.$ans`

for ii in $aa
do
	jj=`echo $ii | cut -d'.' -f1`
	#echo $jj
	cp $ii $jj.c
	ctags $jj.c
	echo "s/$jj.c/$ii/g" > $tmp_tag2
	sed -f $tmp_tag2 tags >> $tmp_tag
	\rm -f tags $jj.c
done

sort $tmp_tag > tags

rm -f $tmp_tag $tmp_tag2
</code>

<sect1> Déboguer avec gdb
<p>
Vous utiliserez gdb extensivement avec Vi. Le déboguage est l'un des plus
importants aspects de la programmation en tant que coût majeur du
développement et des tests des projets.
<p>
Pour déboguer des programmes C/C++ vous utiliserez l'outil « gdb ». Voyez
<bf>'man gdb'</bf>. Vous devrez compiler vos programmes avec l'option -g3
comme
<tscreen><verb>
	gcc -g3 foo.c foo_another.c sample.c
</verb></tscreen>

Pour configurer des alias utiles :
<tscreen><verb>
  Configurez l'alias dans votre ~/.bash_profile
	alias gdb='gdb -directory=/home/src -directory=/usr/monnom/src '
  Donnera -
	gdb foo.cpp
	gdb> dir /hom2/another_src
	Ceci ajoutera un chemin à la recherche de fichier
	gdb> break 'some_class::func<TAB><TAB>
  Ce qui complètera le nom de la fonction en vous évitant le temps de
frappe... et sortira comme -
	gdb> break 'some_class::function_foo_some_where(int aa, float bb)'
</verb></tscreen>

Taper la touche TAB deux fois permet le complément de la ligne de commande,
sauvant ainsi beaucoup de temps de frappe. C'est l'une des techniques les plus
importantes pour l'utilisation de gdb.

Pour obtenir de l'aide en ligne -
<tscreen><verb>
	gdb> help
  Donne l'aide en ligne
	gdb> help breakpoints
  Donne plus de détails sur les points d'ancrage.
</verb></tscreen>
Pour placer les points d'ancrage et effectuer du déboguage
<tscreen><verb>
	unixprompt> gdb exe_filename
	gdb> b main
  Ceci mettra un point d'ancrage dans la fonction main()
	gdb> b 123
  Ceci mettra un point d'ancrage à la ligne 123 du fichier courant
	gdb> help breakpoints
    Donne plus de détails sur les points d'ancrage.
</verb></tscreen>

Pour analyser des core dumps :
<tscreen><verb>
	unixprompt> gdb exe_filename  core
	gdb> bt
Donne une trace de retour des fonctions et les numéros de lignes où le
programme a échoué
	gdb> help backtrace
  Donne plus de détails sur la trace de retour.
</verb></tscreen>
<p>
Vous pouvez aussi utiliser une version GUI de gdb appellée xxgdb.
<p>
Outils de perte de mémoire -
<itemize>
<item> Freeware Electric Fence sous linux cd
<item> Commercial tools Purify <url url="http://www.rational.com">
<item> Insure++ <url url="http://www.insure.com">
</itemize>

<sect>Aide de ViM en ligne
<p>
Voyez les pages de manuel en ligne. Au prompt unix, tapez
<bf>'man vim'</bf> et <bf>'man gvim'</bf>.

Ou lors d'une session gvim tapez :help pour obtenir la page d'aide. Voyez
aussi le <ref id="Tutoriel Vim">

<sect>Pages web de ViM et liens ViM
<p>
La page principale de ViM se trouve sur <url url="http://www.vim.org">, et son
site miroir aux US est sur <url url="http://www.us.vim.org">.

La FAQ ViM est sur <url url="http://www.grafnetix.com/~laurent/vim/faq.html">
et sur <url url="http://www.vim.org/faq">.

La page ViM d'Eli se trouve sur <url
url="http://www.netusa.net/~eli/src/vim.html">.

La page des amoureux de Vi sur <url url="http://www.cs.vu.nl/~tmgil/vi.html">.

Le guide de référence sur ViM sur <url
url="http://scisun.sci.ccny.cuny.edu/~olrcc/vim/">.

Les listes de diffusion ViM sont sur <url
url="http://www.findmail.com/listsaver/vimannounce.html"> et <url
url="http://www.vim.org/mail.html">.

Les archives des listes sont conservées sur :
<itemize>
<item> <url url="http://www.egroups.com/group/vim">
<item> <url url="http://www.egroups.com/group/vimdev">
<item> <url url="http://www.egroups.com/group/vimannounce">
</itemize>

Les macros ViM sont sur <url url="http://www.grafnetix.com/~laurent/vim/macros.html">.

<sect> Tutoriel ViM <label id="Tutoriel Vim">

<sect1> Tutoriels ViM sous la main <label id="vimhandson">
<p>
Sur les systèmes Linux, on trouve souvent le tutoriel dans
/usr/doc/vim-common-5.*/tutor, sur les autres systèmes Unix cherchez le
répertoire où ViM est installé et cherchez le répertoire doc.
<code>
	bash$ cd /usr/doc/vim-common*/tutor
	bash$ less README.txt
	bash$ cp tutor $HOME
	bash$ cd $HOME
	bash$ less tutor
</code>

<sect1> Tutoriels Vi sur Internet<label id="vimurls">
<p>
<itemize>
<item> Purdue University <url url="http://ecn.www.ecn.purdue.edu/ECN/Documents/VI/">
<item> Quick Vi tutorial <url url="http://linuxwww.db.erau.edu/LUG/node165.html">
<item> Advanced Vi tutorial <url url="http://www.yggdrasil.com/bible/bible-src/user-alpha-4/guide/node171.html">
<item> Tutorials <url url="http://www.cfm.brown.edu/Unixhelp/vi_.html"
<item> Tutorials <url url="http://www.linuxbox.com/~taylor/4ltrwrd/section3_4.html">
<item> Unix world online vi tutorial <url url="http://www.networkcomputing.com/unixworld/unixhome.html">
<item> Univ of Hawaii tutorial <url url="http://www.eng.hawaii.edu/Tutor/vi.html">
<item> InfoBound  <url url="http://www.infobound.com/vi.html">
<item> Cornell Univ <url url="http://www.tc.cornell.edu/Edu/Tutor/Basics/vi/">
<item> Vi Lovers home page <url url="http://www.cs.vu.nl/~tmgil/vi.html">
<item> Après Sept 2000, sera sur <url url="http://www.thomer.com/thomer/vi/vi.html">
<item> Beginner's Guide to vi <url url="http://www.cs.umr.edu/unixinfo/general/packages/viguide.html">
<item> vi Help file <url url="http://www.vmunix.com/~gabor/vi.html">
<item> ViM FAQ <url url="http://www.math.fu-berlin.de/~guckes/vim/faq/">
</itemize>

Il y a de nombreux tutoriels Vi sur Internet. Sur Yahoo (Lycos, excite ou
Hotbot), entrer « Vi Tutorial » dans le champ de recherche vous renverra de
nombreux pointeurs.

<sect> Tutoriel Vi <label id="vimtut">
<p>
Dans ce tutoriel, nous décrirons quelques commandes et concepts <bf>vi</bf>
avancés, vous pourrez ainsi apprécier la puissance de <bf>vi</bf> et décider
de construire vos connaissances avec les commandes <bf>vi</bf>. Quasiment
toutes les références listent les commandes disponibles, mais beaucoup ne
montrent pas comment ces commandes interagissent ; ce point précis est le thème
principal de ce tutoriel.

<sect1>Commandes du mouvement du curseur
<p>
Les commandes du mouvement du curseur de <bf>vi</bf> vous permettent de
positionner le curseur dans le fichier et/ou à l'écran de manière efficace,
avec un nombre minimal de frappe de touches. Il y a de nombreuses commandes
contrôlant les mouvements du curseur - n'essayez pas de toute les mémoriser en
une fois ! Plus tard, nous verrons que la majeure partie de la puissance de
<bf>vi</bf> vient du mélange entre les commandes de mouvement du curseur et
les autres commandes pour effacer, changer, copier, et filtrer le texte.

Veuillez éditer un gros fichier texte (disons, <bf>wknight</bf>) afin
d'expérimenter chaque commande décrite. Gardez en tête que ces commandes ne
marchent qu'en Mode Commande, et pas en Mode Insertion ; si vous voyez vos
« commandes » dans votre texte, appuyez sur ESC pour retourner en Mode Commande.

<itemize>
<item> <bf>touches fléchées</bf> : Ainsi que nous l'avons vu, les touches
curseur permettent de se déplacer avec un simple caractère vers la gauche, le
bas, le haut et la droite. Les mouvements au-delà du haut du fichier, en
dessous du bas, à droite de la fin de la ligne, ou à gauche du début ne sont
pas autorisés (pas de coupure de ligne).

<p>
<item> <bf>hjkl</bf> : Lorsque <bf>vi</bf> a été écrit (vers 1978), de
nombreux terminaux sur systèmes UNIX n'avaient pas de touches fléchées !
<bf>h, j, k,</bf> et <bf>l</bf> ont été choisies comme commandes pour se
déplacer vers la gauche, le bas, le haut, et la droite, respectivement.
Essayez les ! La plupart des intégristes de <bf>vi</bf> les préfèrent aux
touches fléchées car :
<itemize>
<item><bf>(a)</bf> elles sont à la même place sur tous les claviers, et
<item><bf>(b)</bf> elles se placent agréablement sous les doigts, au contraire
de la plupart des touches fléchées, qui sont arrangées en boîte ou en « T » ou
sous une autre forme non linéaire.
</itemize>

Pourquoi h, j, k, et l ? Eh bien, dans le code des caractères ascii, CTRL-H
est l'effacement (déplacement vers la gauche), CTRL-J le retour chariot
(déplacement vers le bas), et bien entendu, k et l sont proches de h et j, et
comme vous le voyez, ces touches forment une combinaison mnémonique.

<p>
<item> <bf>0</bf> : (« zéro », et pas « oh ») Déplacement au début de la ligne
courante. (Pour essayer ceci et les quelques commandes suivantes, utilisez les
touches du curseur ou <bf>h j k l</bf> pour vous déplacer vers une ligne
indentée contenant quelques caractères « e ». Si vous ne pouvez trouver de ligne
indentée dans votre fichier, créez en une en insérant quelques espaces au
début de la ligne.)

<p>
<item> <bf> ^ </bf> : Déplacement sur le premier caractère non-blanc de la
ligne courante (pour une ligne indentée, 0 et ^ ont des significations
différentes).

<p>
<item> <bf> $ </bf> : Déplacement sur le dernier caractère de la ligne
courante.

<p>
<item> <bf> tC </bf> : Déplacement jusqu'au (mais pas sur) le prochain
caractère C de la ligne courante (tapez 0, puis tapez te. Ceci vous déplacera
vers le premier e de la ligne courante).

<p>
<item> <bf> fC </bf> : Trouve (déplacement sur) le prochain caractère C de la
ligne courante (tapez fe, et le curseur trouvera - c'est-à-dire se mettra sur
- le prochain e de la ligne courante).

<p>
<item> <bf> TC </bf> : Déplacement jusqu'au (mais pas sur) le précédent
caractère C de la ligne courante (tapez $, puis Te).

<p>
<item> <bf> FC </bf> : Trouve (déplacement sur) le précédent caractère C de la
ligne courante (tapez Fe).

<p>
<item> <bf> n| </bf> : Déplacement sur la colonne n de la ligne courante
(tapez 20 | ; les chiffres 2 et 0 ne seront pas affichés lorsque vous les
taperez, mais lorsque vous presserez | le curseur se déplacera en colonne 20).

Essayez quelquez trucs avec t f T F | . Lorsque vous faîtes quelque chose
d'illégal, <bf>vi</bf> émettra un bip.

<p>
<item> <bf> w </bf> : Déplacement au début du prochain « petit » mot (un « petit »
mot consiste en une suite ininterrompue de caractères alphanumétiques ou de
caractères de ponctuation, mais pas un mélange de caractères de ponctuation et
alphanumériques). Essayez de taper w une douzaine de fois -- notez ce qui
arrive aux ponctuations.

<p>
<item> <bf> W </bf> : Déplacement au début du prochain « grand » mot (mélange
alphanumérique et ponctuation). Essayez de taper W une douzaine de fois.

<p>
<item> <bf> b </bf> : Retour au début d'un « petit » mot.

<p>
<item> <bf> B </bf> : Retour au début d'un « grand » mot.

<p>
<item> <bf> e </bf> : Déplacement à la fin d'un « petit » mot.

<p>
<item> <bf> E </bf> : Déplacement à la fin d'un « grand » mot.

<p>
<item> <bf> + Return </bf> : Déplacement sur le premier caractère non-blanc
sur la même ligne (+ et la touche Entrée ont le même effet).

<p>
<item> <bf> - </bf> : Déplacement sur le premier caractère non-blanc de la
ligne précédente.

<p>
<item> <bf> ) </bf> : Déplacement sur la fin d'une phrase (une phrase se
termine soit par une ligne blanche, ou un point ou une marque d'exclamation
suivis par deux caractères d'espace ou la fin de la ligne. Un point ou une
marque d'exclamation suivis par un seul caractère d'espace ne termine pas une
phrase ; ceci est un comportement correct, en accord avec les règles
traditionnelles de la manière dont les phrases doivent apparaître dans les
documents imprimés, mais apparaît souvent comme faux pour ceux qui n'ont
jamais utilisé une classe typographique correcte.)

NdT : Ceci n'est valable qu'en typographie anglaise.  En typographie
française, une phrase se termine par un point (ou une marque d'exclamation)
suivit par une espace.

<p>
<item> <bf> ( </bf> : Déplacement au début d'une phrase.

<p>
<item> <bf> } </bf> : Déplacement à la fin d'un paragraphe (les paragraphes
sont séparés par des lignes blanches, par définition avec <bf>vi</bf>).

<p>
<item> <bf> { </bf> : Déplacement au début d'un paragraphe.

<p>
<item> <bf> H </bf> : Déplacement vers la position première (la ligne du haut)
de l'écran.

<p>
<item> <bf> M </bf> : Déplacement au milieu de la ligne à l'écran.

<p>
<item> <bf> L </bf> : Déplacement sur la dernière ligne de l'écran.

<p>
<item> <bf> nG </bf> : Déplacement sur la ligne n. Si n n'est pas donné,
déplacement sur la dernière ligne du fichier (essayez 15G pour vous déplacer
sur la ligne 15, par exemple. La commande CTRL-G affiche le nom du fichier,
quelques informations sur l'état, et le numéro de la ligne actuelle. Pour vous
déplacer au début du fichier : 1G).

<p>
<item> <bf> CTRL-d </bf> : Déplacement vers le bas d'un demi-écran (voir note).
<item> <bf> CTRL-u </bf> : Déplacement vers le haut d'un demi-écran (voir note).
<item> <bf> CTRL-f </bf> : Déplacement vers le bas d'un écran (voir note).
<item> <bf> CTRL-b </bf> : Déplacement vers le haut d'un écran (voir note).
<item> <bf> Note </bf> : Ces quatres commandes de déplacement ne peuvent être
utilisées avec les commandes d'effacement, de changement, de copie ou de
filtre.

<p>
<item> <bf> /reg_exp </bf> : Déplacement sur la prochaine occurence de
l'expression rationnelle reg_exp.
Lorsque vous tapez /, le curseur se déplace vers le coin en bas à gauche de
l'écran et attend que vous tapiez l'expression rationnelle.
Tapez la touche Entrée pour finir ; <bf>vi</bf> cherchera alors dans la suite
du fichier la prochaine occurence de l'expression rationnelle. Par exemple,
tapez /the puis Entrée. Ceci vous déplacera sur la prochaine apparition de
the, peut-être mise en évidence au milieu d'un mot plus long (other, weather,
etc.). Si vous tapez juste / puis Entrée, <bf>vi</bf> cherchera la prochaine
apparition de la dernière expression rationnelle que vous aviez cherché.

<p>
<item> <bf> n </bf> : A le même effet que de presser / et Entrée ; c-à-d
recherche la prochaine occurence de la dernière expression rationnelle que
vous aviez cherché.

<p>
<item> <bf> ?reg_exp </bf> : Recherche en arrière, et pas en avant. Si la
reg_exp n'est pas donnée, recherche la dernière expression rationnelle entrée.
Les 2 / et ? sont tournants, donc rechercher « plus bas » que le bas ou « plus
haut » que le haut du fichier est légal.

<p>
<item> <bf> N </bf> : Identique à~? et Entrée.
</itemize>

<sect1> Compteurs de répétitions
<p>
La plupart des commandes de mouvements présentées ci-dessus peuvent être
précédées d'un compteur de répétitions ; le mouvement est simplement répété le
nombre de fois donné :

<itemize>
<item> <bf> 3w </bf> : Déplacement en avant de 3 mots.
<item> <bf> 5k </bf> : Déplacement vers le haut de 4 caractères.
<item> <bf> 3fa </bf> : Trouve le 3ème « a » successif de la ligne courante.
<item> <bf> 6+ </bf> : Descend de 6 lignes.
</itemize>
Pour certaines commandes, les « compteurs de répétitions » ont des
significations spéciales :
<itemize>
<item> <bf> 4H </bf> : Déplacement vers la ligne 4 de l'écran (touche home et 3).
<item> <bf> 8L </bf> : Déplacement sur la 8ème ligne à partir du bas de l'écran.
<item> <bf> 3$ </bf> : Déplacement à la fin de la 3ème ligne plus bas.
</itemize>
Pour plusieurs commandes (telles que ^) le compteur de répétition est ignoré ;
pour d'autres (par exemple, / et ?) il est illégal.

<sect1> Effacer du texte
<p>
Nous avons vu que <bf>dd</bf> efface la ligne courante. Ceci peut être utilisé
avec un compteur de répétitions : 3dd efface trois lignes, la ligne courante et
les 2 lignes suivantes.

La commande d peut être utilisée comme un « préfixe » pour la plupart des
commandes de mouvement ci-dessus pour effacer à peu près toute sorte de
parties de texte. Lorsqu'elles sont utilisées avec d, les commandes de
mouvements sont appellées des spécificateurs de cibles. On peut donner un
compteur de répétition à d (lorsque vous essayez ces expériences, rappellez
vous d'appuyer sur u après chaque commande pour annuler l'effacement).

<itemize>
<item> <bf> dw </bf> : Efface le prochain « petit » mot.
<item> <bf> d3w </bf> : Efface les 3 prochains « petits » mots.
<item> <bf> 3dw </bf> : Trois fois, efface le prochain « petit » mot.
<item> <bf> 3d3w </bf> : Trois fois, efface les 3 prochains « petits » mots
(c'est-à-dire, efface les 9 prochains « petits » mots).
<item> <bf> d+ </bf> : Efface la ligne actuelle et la ligne suivante.
<item> <bf> d/the </bf>: Efface à partir du caractère courant jusqu'à, mais
sans inclure, la prochaine apparition de «~the~».
<item> <bf> d$ </bf> : Efface jusqu'à la fin de la ligne.
<item> <bf> d0 </bf> : Efface jusqu'au début de la ligne.
<item> <bf> d30G </bf> : Efface la ligne courante jusqu'à et incluant la ligne 30.
<item> <bf> dG </bf> : Efface la ligne courante jusqu'à et incluant la
dernière ligne.
<item> <bf> d1G </bf> : Efface la ligne courante jusqu'à et incluant la ligne 1.
</itemize>
Pour effacer de simples caractères, utilisez x. x peut être utilisé en
utilisant un compteur répétitif :
<itemize>
<item> <bf> 15x </bf> : Efface le caractère courant et les 14 suivants.
</itemize>
x est simplement une abbréviation de d1 ; c'est-à-dire efface un caractère à
droite.

<sect1> Changer le texte
<p>
La commande c est similaire à d, à part qu'elle change le mode de <bf>vi</bf> en
insertion, autorisant le texte original (non désiré) à être changé en quelque
chose d'autre.

Par exemple, placez le curseur sur le début d'un mot (tapez w pour arriver au
début du prochain mot). Ensuite, tapez cw pour changer ce mot. À l'écran, le
dernier caractère de ce mot en cours de changement sera remplacé par un
symbole <bf>$</bf> indiquant la fin du changement ; tapez un nouveau mot (vous
réécrirez le mot original à l'écran) et tapez la touche ESC lorsque vous aurez
fini. Votre entrée peut être plus longue ou plus courte que le mot en cours de
changement.

Placez le curseur au début d'une ligne contenant au moins trois mots, et taper
c3w pour changer ces trois mots. Essayez c$ pour changer la fin de la ligne
actuelle. Dans tous les cas où le changement affecte uniquement la ligne
courante, la fin du changement est indiquée avec $.

Lorsqu'un changement affecte plus que la ligne courante, <bf>vi</bf> efface le
texte original de l'écran et se place en mode insertion. Par exemple, essayez
c3+ pour changer la ligne courante et les trois suivantes ; <bf>vi</bf>
supprime les quatres lignes originales de l'écran et se place en mode
d'insertion sur une nouvelle ligne blanche.
Comme toujours, tapez la touche ESC lorsque vous aurez fini d'entrer votre
nouveau texte.

Quelques autres commandes de changement :
<itemize>
<item> <bf> cc </bf> : Change la ligne courante.
<item> <bf> 5cc </bf> : Change cinq lignes (courante et quatre suivantes).
<item> <bf> c/the </bf> : Changer du caractère courant jusqu'à, mais sans
inclure, la prochaine occurence de « the ».
<item> <bf> c$ </bf> : Change jusqu'à la fin de la ligne.
<item> <bf> c30G </bf> : Change de la ligne courante jusqu'à la ligne 30
incluse.
<item> <bf> cG </bf> : Changer de la ligne courante jusqu'à et incluant la
dernière ligne.
<item> <bf> c1G </bf> : Changer la ligne courante jusqu'à la ligne 1 incluse.
</itemize>

<sect1> Emmener (copier) du texte

<p>
La commande y emmène une copie du texte dans un buffer ; le texte copié peut
être placé (ou collé) n'importe où dans le fichier en utilisant p ou P.

La forme la plus simple de copie est yy pour copier la ligne courante ; après
yy, essayez p pour mettre une copie de la ligne copiée après le curseur. En
suivant yy, vous pouvez faire autant de copie de la ligne emmenée que vous le
voulez en vous déplaçant dans le fichier et en tapant p.

Pour copier plusieurs lignes, essayez, par exemple, 5yy (copie la ligne
courante et les 4 lignes suivantes). p place une copie des lignes emmenées
après le curseur ; la séquence 5yyp « marche » mais ce n'est probablement pas ce
que vous voudriez faire. La commande P fonctionne comme p, mais place une
copie de la ligne au-dessus du curseur ; essayez la séquence 5yyP.

Autres commandes de copie :
<itemize>
<item> <bf> y3w </bf> : Copie 3 mots.
<item> <bf> y$ </bf> : Copie jusqu'à la fin de la ligne.
<item> <bf> y1G </bf> : Copie de la ligne courante jusqu'à la ligne 1
incluse.
</itemize>

<sect1> Filtrer le texte
<p>
La commande de filtrage <bf>!</bf> demande le nom d'une commande UNIX (qui
doit être un filtre), passe les lignes sélectionnées par ce filtre, en
remplaçant les lignes sélectionnées dans le buffer <bf>vi</bf> avec la sortie
de la commande filtrante. La capacité de <bf>vi</bf> à passer des parties
arbitraires de texte au travers de tout filtre UNIX ajoute une flexibilité
incroyable à <bf>vi</bf>, sans « coût supplémentaire » de taille ou de
performance à <bf>vi</bf> même.

Quelques exemples peuvent aider l'illustration. Créez une ligne dans votre
fichier contenant juste le mot «~who~» et absolument aucun autre texte. Placez
le curseur sur cette ligne, et tapez <bf>!!</bf>. Cette commande est analogue
à dd, cc, ou yy, mais au lieu d'effacer, de changer ou de copier la ligne
courante, elle filtre la ligne courante. Lorsque vous pressez le second !, le
curseur descend vers le coin en bas à gauche de l'écran et un simple ! est
affiché, vous demandant d'entrer le nom d'un filtre. En tant que nom de
filtre, tapez «~sh~» et pressez la touche Entrée. <bf>sh</bf> (le shell Bourne)
est un filtre ! Il lit l'entrée standard, exécute une partie de l'entrée
(c'est-à-dire qu'il exécute des commandes), et envoie sa sortie (la sortie de
ces commandes) à la sortie standard. Filtrer la ligne contenant « who » au
travers de «~sh~» remplace la ligne contenant «~who~» par la liste des
utilisateurs du système courant -- directement dans votre fichier !

Essayez de répéter ce procédé avec <bf>date</bf>. C'est-à-dire, créez une
ligne ne contenant rien d'autre que le mot <bf>date</bf>, puis placez le
curseur sur cette ligne, et tapez <bf>!!sh</bf> et la touche Entrée. La ligne
contenant <bf>date</bf> est remplacée par la sortie de la commande
<bf>date</bf>.

Mettez votre curseur sur la première ligne de la sortie de « who ». Comptez le
nombre de lignes. Supposons, par exmple, que ce nombre soit six. Sélectionnez
alors ces six lignes à filtrer au travers de sort ; tapez <bf>6!!sort</bf> et
la touche Entrée. Les six lignes seront passées à sort, et la sortie de sort
remplacera les six lignes d'origine.

La commande filtre peut uniquement être utilisée sur des lignes complètes,
pas sur des caractères ou des mots.

Quelques autres commandes de filtres (ici, « CR » indique pressez Entrée) :
<itemize>
<item> <bf>!/the CR sort CR</bf> : Sort la ligne courante jusqu'à la ligne
suivante contenant « the » incluse.
<item><bf> !1Ggrep the CR</bf> : Remplace la ligne courante jusqu'à la ligne 1
incluse par les lignes contenant «~the~».
<item><bf> !Gawk '{print $1}' CR  </bf>: De la ligne courante jusqu'à la fin
du fichier, remplace chaque ligne par son premier mot.
</itemize>

<sect1> Marquer des lignes et des caractères
<p>
Vous pouvez marquer des lignes et des caractères pour être
utilisés en tant que cible pour des mouvements, effacement,
changement, copie, et filtration en utilisant la commande mc, où
c est une lettre minuscule.

Par exemple, mettez le curseur au milieu d'un mot et tapez ma.
Ceci marque le caractère sous le curseur sous la marque a.

Maintenant, déplacez le curseur en dehors du caractère marqué
vers une ligne différente (utilisez les flèches curseur, CTRL-u,
ou autre). Pour retourner à la ligne marquée, tapez 'a (c'est-à-dire
apostrophe, puis a). Ceci vous place sur le premier
caractère non-blanc de la ligne contenant la marque a.

Sortez de la ligne encore une fois. Pour retourner au caractère
marqué, tapez `a (apostrophe inverse, puis a). Ceci vous
déplacera sur le caractère marqué par a.

Le marquage est habituellement utilisé avec l'effacement, le
changement, la copie ou la filtration. Par exemple, déplacez le
curseur sur une autre ligne que celle contenant la marque a, et
pressez d'a (d, apostrophe, a). Ceci efface de la ligne courante
jusqu'à la ligne marquée a incluse.

Mettez le curseur au milieu d'un autre mot et tapez mb pour
mettre la marque b. Maintenant, déplacez le curseur hors de ce
mot (mais seulement de quelques lignes, ainsi vous pourrez voir
ce que nous allons faire plus facilement), et pressez d`b (d,
apostrophe inverse, b). Ceci efface le caractère courant jusqu'au
caractère marqué par b inclus.

Comme autre exemple, pour trier la sortie de who, marquez la
première ligne (ma), puis déplacez le curseur vers la dernière
ligne et taper !'asort puis la touche Entrée.

Si vous sautez jusqu'à une marque et que vous décidez de revenir
en arrière, de l'endroit d'où vous avez sauté, vous pouvez taper
'' (reviens à la ligne) ou `` (reviens au caractère).

<sect1> Nommer les tampons
<p>
Lorsque vous effacez, modifiez, ou copier du texte, le texte original est
sauvé (jusqu'au prochain effacement, changement ou copie) dans un tampon non
nommé à partir duquel il peut être mis en utilisant p ou P. En utilisant le
tampon non nommé, seul le plus récent changement du texte peut être récupéré.

Si vous voulez effacer, changer ou copier plusieurs parties de texte et se
souvenir de toutes (jusqu'à un maximum de 26), vous pouvez donner un nom au
tampon avec la commande utilisée. Un nom de tampon est de la forme "c (double
apostrophe, c minuscule).

Par exemple, tapez "ayy pour copier la ligne courante dans le tampon a, puis
déplacez vous sur une autre ligne et tapez "byy pour copier cette ligne dans
le tampon b. Maintenant, déplacez vous n'importe où dans le fichier et tapez
"ap et "bp pour placer des copies du texte sauvé dans les tampons a et b.

Quelques autres commandes de tampon :
<itemize>
<item> <bf> "a6yy </bf> : Copie 6 lignes (courante et 5 suivantes) dans le tampon a.
<item> <bf> "bd1G </bf> : Efface de la ligne courante jusqu'à la ligne 1
incluse, en sauvant les lignes effacées dans le tampon b.
<item> <bf> "cy'c </bf> : Copie de la ligne courante jusqu'à la ligne marquée
c dans le tampon c (les marques et les tampons sont distincts, et peuvent
avoir le même nom sans que <bf>vi</bf> ne s'en préoccupe).
</itemize>

<sect1> Substitutions
<p>
Pour échanger un bloc de texte par un autre dans les lignes de votre fichier,
utilisez la commande :s. Quelques exemples de substitutions :
<itemize>
<item> <bf> :1,$s/the/THE/g </bf> De la ligne 1 à la dernière ligne (ligne
$), remplace le texte « the » par « THE » ; le fais globalement pour toute ligne où se
trouve un « the ».
<item> <bf> :'a,.s/.*/ha ha/ </bf> De la ligne marquée a jusqu'à la ligne
actuelle (ligne .), substitue tout ce qu'il y a sur la ligne par le texte « ha
ha ».
</itemize>

<sect1> Diverses «~commandes double point~»
<p>
Toutes les commandes de double point débutent avec «~:~» ; lorsque
vous tapez ce symbole, le curseur saute vers le coin bas à gauche
de l'écran, et un prompt à deux points est affiché, attendant que
vous finissiez la commande.

Quelques exemples importants :
<itemize>
<item><bf>:w </bf> Écrit le contenu du tampon dans le fichier
sans quitter <bf>vi</bf>.
<item><bf>:w abc </bf> Écrit le contenu du tampon dans le fichier
abc (crée abc s'il n'existe pas, ou réécrit son contenu actuel
s'il existe) sans quitter <bf>vi</bf>.
<item><bf>:1,10w  abc  </bf> Écrit les lignes 1 à 10 dans le
fichier abc.
<item><bf>:'a,$w abc  </bf>Écrit de la ligne marquée a jusqu'à la
dernière ligne dans le fichier abc.
<item><bf>:e abc </bf>Édite le fichier abc, au lieu du fichier
actuel. <bf>vi</bf> affiche un message d'erreur si des
changements ont été faits au fichier actuel et qui n'ont pas été
sauvés avec :w.
<item><bf>:e #  </bf>Édite le fichier précédemment édité (des
commandes successives :e# vont et viennent entre deux fichiers).
<item><bf>:f abc  </bf>Change le nom du fichier pour le tampon
actuel vers abc.
<item><bf>:q </bf>Quitte, à moins qu'il n'y ait des changements
que vous ayez faits.
<item><bf>:q! </bf>Quitte, en omettant tous les changements que
vous pourriez avoir fait.
<item><bf>:r abc </bf>Lit le fichier abc dans le tampon
<bf>vi</bf> actuel, après la ligne sur laquelle se trouve le
curseur (essayez :r croc pour insérer une copie du fichier croc).
<item><bf>:!cmd </bf>Exécute la commande cmd (who, sort, ls, etc.).
</itemize>

<sect1> Utiliser les options
<p>
Diverses options peuvent affecter le «~confort~» de <bf>vi</bf>. Vous pouvez
afficher toutes les diverses options pouvant être utilisées en tapant set all.
Vous pouvez également utiliser «~:set~» pour changer les options.

Par exemple, si vous désirez voir le numéro de ligne pour les lignes du
fichier que vous éditez, utilisez la commande :set number. Pour supprimer
l'affichage du numéro de ligne, utilisez la commande :set nonumber. La plupart
des options peuvent être abrégées ; :set nu affiche le numéro des lignes et
:set nonu le supprime.

Si vous utilisez :set nomagic, la signification spéciale des caractères
d'expression régulière (point, astérisque, crochet, etc.) est supprimée.
Utilisez :set magic pour restaurer ces significations particulières.

Quelques options ont une valeur. Par exemple, :set tabstop=4 affiche les
tabulations en quatre caractères d'espace, plutôt que les huit habituels.

Si vous trouvez que vous désirez toujours certaines options placées de
certaines manières, vous pouvez mettre ces commandes optionnelles dans un
fichier .exrc, ou vous pouvez utiliser la variable d'environnement EXINIT pour
spécifier les options désirées.

Par exemple, si votre shell par défaut est le shell Bourne, cette ligne peut
aller dans votre fichier .profile :
<code>
    EXINIT='set nomagic nu tabstop=4'; export EXINIT
</code>
Si votre shell par défaut est un C shell, cette ligne peut aller dans votre
fichier .login :
<code>
    setenv EXINIT 'set nomagic nu tabstop=4'
</code>

<sect1> Cartographie des touches
<p>
Si vous vous apercevez que vous utilisez encore et encore la même série de
commandes simples, vous pouvez les lier à une touche de commande inutilisée en
utilisant la commande :map. Si votre lien inclut des caractères de contrôle
comme la touche Entrée (ctrl-M en ascii) ou ESC (ctrl-[ en ascii), vous pouvez
les faire précéder de ctrl-v pour supprimer leur signification classique.

Par exemple, cette commande relit ctrl-A pour déplacer le curseur de 55
lignes, puis revenir à la ligne vide la plus récente, changer ensuite  cette
ligne blanche par un saut de page (ctrl-L) et trois lignes blanches. C'est à
dire que chaque ctrl-A paginera la page suivante, sans couper de paragraphes
entre les pages.

Note : Dans cette commande, chaque caractère de contrôle est représenté par ^C,
où C est une lettre majuscule quelconque. Par exemple, ctrl-M est représenté
par ^M. De même, lorsque vous entrez cette commande vous ne verrez pas les
caractères ctrl-v : chaque ctrl-v se voit remplacé par la signification
spéciale du caractère de contrôle suivant, ainsi lorsque vous utiliserez la
séquence ^V^M, tout ce que vous verrez à l'écran est un ^M. Dans cette
commande, ^M est la touche Entrée et ^[ la touche ESC.
<code>
	 :map ^A  55+?^$^V^Mcc^V^L^V^M^V^M^V^M^V^[
</code>

<sect1> Éditer plusieurs fichiers
<p>
Vous pouvez éditer plusieurs fichiers avec <bf>vi</bf> en lui donnant
plusieurs noms de fichiers en arguments de ligne de commande :
<code>
	 vi croc fatherw  wknight
</code>
Trois commandes sont utilisées pour se déplacer entre plusieurs fichiers :
<itemize>
<item><bf> :n  </bf> Déplace dans le prochain fichier de la liste d'arguments
(vous devez sauver les changements avec :w ou <bf>vi</bf> affichera un message
d'erreur).
<item><bf> :N  </bf>Déplace dans le fichier précédent de la liste d'arguments
(vous devez sauver les changements avec :w ou <bf>vi</bf> affichera un
message d'erreur).
<item><bf> :rew </bf>Rembobine et repart du premier fichier de la liste
d'arguments.
</itemize>

Les commandes :n, :N et :rew sont quelques peu étranges, mais elles ont des
bénéfices importants : le contenu des tampons ("a, "b, "c, etc.) sont connus
entre les fichiers, et vous pouvez ainsi utiliser :n et :rew avec p et P pour
copier le texte vers l'un ou l'autre des fichiers. De même, la plus récente
chaîne de recherche des commandes / et ? sont les mêmes suivant les fichiers,
et vous pouvez ainsi faire des recherches répétées sur plusieurs fichiers
assez facilement.

Par exemple, tentez l'expérience suivante :
tout d'abord sortez de <bf>vi</bf>, et exécutez ensuite <bf>vi</bf> avec croc
et wknight en arguments :
<code>
	 $ vi croc wknight
</code>
Dans croc, cherchez

<bf>    /the &lt CR &gt </bf>

Copiez cette ligne dans le tampon a :

<bf>    "ayy </bf>

Maintenant déplacez vous sur le prochain fichier (vous n'avez fait aucun
changement à croc, donc ça marchera) :

<bf>    :n &lt CR &gt </bf>

Cherchez la ligne suivante contenant « the », sans retaper la chaîne de
recherche :

<bf>    n </bf>

Mettez une copie du tampon après la ligne courante dans wknight :

<bf>    "ap </bf>

Descendez de deux lignes, et copiez la ligne courante dans le tampon b :

<bf>    jj"byy </bf>

Sauvez les changements de wknight

<bf>    :w &lt CR &gt </bf>

Maintenant, retournez à croc

<bf>    :rew &lt CR &gt </bf>

Cherchez encore, et mettez une copie du tampon b après la ligne trouvée :

<bf>    n"bp </bf>

Sauvez les changements, et quittez <bf>vi</bf>

<bf>    ZZ </bf>

<sect1> Remarques finales
<p>
Ce tutoriel était prévu pour vous introduire quelques unes des possibilités de
<bf>vi</bf> que vous pouvez également retrouver dans le manuel <bf>vi</bf> de
votre système ou qui ne sont pas mentionnées dans ce manuel (de nombreux
systèmes ont des manuels de qualité très variée).

Vous ne serez pas un expert <bf>vi</bf> après la lecture de ce tutoriel, mais
vous aurez une bonne appréciation des possibilités de <bf>vi</bf>. Seul le
temps et l'effort peuvent vous faire devenir un expert <bf>vi</bf>. Mais
l'efficacité et l'universalité de <bf>vi</bf> rend cet effort payant dans le
long terme.

Vous pouvez avoir décidé que vous détestez <bf>vi</bf>. Très bien ! Mais prenez
garde, <bf>vi</bf> demeure l'éditeur de texte standard sous UNIX - le seul
éditeur sur lequel vous pouvez compter pour être disponible sous tout système
UNIX que vous utiliserez - donc même si vous préférez utiliser quelque chose
d'autre dans la vie courante, vous seriez avisé de connaître le minimum à
propos de <bf>vi</bf> qui est couvert dans ce tutoriel.

<sect> Carte de référence ViM<label id="vimref">
<p>
<sect1> États Vi
<p>
Vi a 3 modes :
<enum>
<item> <bf><it>mode commande</it></bf> - État normal et initial ; les autres
reviennent ici (utilisez <bf>ESC</bf> pour stopper une commande partiellement
tapée).
<item> <bf><it>mode d'entrée</it></bf> - Atteint par différentes commandes
<bf>a i A I o O c C s S R </bf> et terminé par <bf>ESC</bf> ou anomalement par
interruption.
<item> <bf><it>mode ligne</it></bf> - C-à-d attendant une entrée après une
commande <bf>: </bf>, <bf>/ </bf>, <bf>?</bf> ou un <bf>! </bf> (terminé par
<bf>CR</bf>, stoppé par <bf>CTRL-c</bf>). <bf>CTRL</bf> est la touche de
contrôle : <bf>CTRL-c</bf> signifie  « control c ».
</enum>

<sect1> Commandes Shell
<p>
<enum>
<item> <bf>TERM=</bf> <it>code</it> Place le nom de code de votre terminal
dans la variable <bf>TERM</bf>.
<item> <bf>export TERM</bf> Transporte la valeur de <bf>TERM</bf> (le code du
terminal) vers tout programme UNIX dépendant du terminal.
<item> <bf>tput init</bf> Initialise le terminal pour qu'il fonctionne
proprement avec divers programmes UNIX.
<item> <bf>vi </bf> <it>fichier</it> Accède à l'éditeur <bf>vi</bf> afin de
pouvoir éditer le fichier spécifié.
<item> <bf>vi </bf> <it>fichier1 fichier2 fichier3</it> Rentre trois fichiers
dans le tampon <bf>vi</bf> à éditer. Ces fichiers sont <it>fichier1,
fichier2</it>, et <it>fichier3</it>.
<item> <bf>view </bf> <it>fichier</it> Invoque l'éditeur vi sur le
<it>fichier</it> en mode lecture.
<item> <bf>vi -R </bf> <it>fichier</it> Invoque l'éditeur vi sur le
<it>fichier</it> en mode lecture.
<item> <bf>vi -r </bf> <it>fichier</it> Récupère le <it>fichier</it> et les
éditions récentes après le crash du système.
</enum>

<sect1> Activer les options
<p>
<enum>
<item> <bf>:set</bf> <it>option</it> Active l'<it>option</it>.
<item> <bf>:set</bf> <it>option=valeur</it> Assigne la <it>value</it> à l'<it>option</it>.
<item> <bf>:set no</bf> <it>option</it> Désactive l'<it>option</it>.
<item> <bf>:set </bf> Affiche les options activées par l'utilisateur.
<item> <bf>:set all</bf> Affiche la liste de toutes les options, à la fois les options par défaut et celles activées par l'utilisateur.
<item> <bf>:set </bf> <it>option</it>? Affiche les valeurs de l'<it>option</it>.
</enum>

<sect1> Notations utilisées
<p>
Notations :
<enum>
<item> <bf>CTRL-c</bf> <bf>CTRL</bf> est la touche de contrôle : <bf>CTRL-c</bf> signifie « control c » ;
<item> <bf>CR</bf> est le retour chariot (touche Entrée).
</enum>

<sect1> Interrompre, annuler
<p>
<itemize>
<item> <bf>ESC</bf> Arrête l'insertion ou une commande incomplète ;
<item> <bf>CTRL-?</bf> <bf>CTRL</bf> est la touche de contrôle : <bf>CTRL-?</bf> signifie « control ? »  supprime ou interrompt des interruptions ;
<item> <bf>CTRL-l</bf> réaffiche/rafraîchit l'écran si ctrl-? l'a malmené.
</itemize>

<sect1> Manipulation de fichier
<p>
<itemize>
<item> <bf>ZZ</bf> Sauve le fichier et sort de vi.
<item> <bf>:wq</bf> Sauve le fichier et sort de vi.
<item> <bf>:w</bf> Écrit le fichier courant.
<item> <bf>:w!</bf> Force l'écriture du fichier courant, si le fichier est en lecture seule.
<item> <bf>:w<it>nom</it></bf> Écrit dans le fichier <it>nom</it>.
<item> <bf>:q</bf> Sort de vi.
<item> <bf>:q!</bf> Force la sortie de vi (annule les changements).
<item> <bf>:e name</bf> Édite le fichier <it>nom</it>.
<item> <bf>:e!</bf> Réédite, en annulant les changements.
<item> <bf>:e + name</bf> Édite le fichier <it>nom</it>, en partant de la fin.
<item> <bf>:e + n</bf> Édite en partant de la ligne <it>n</it>.
<item> <bf>:e #</bf> Édite un fichier alternatif.
<item> <bf>:n</bf> Édite le fichier suivant de la <it>liste des
arguments</it>.
<item> <bf>:args</bf> Liste les fichiers de la liste actuelle.
<item> <bf>:rew</bf> Rembobine la liste des fichiers et édite le premier.
<item> <bf>:n args</bf> Spécifie une nouvelle liste des arguments.
<item> <bf>:f </bf> Affiche le fichier actuel et la ligne.
<item> <bf>CTRL-G</bf> Synonyme de :f, affiche le fichier actuel et la ligne.
<item> <bf>:ta tag </bf> Pour marquer l'entrée du fichier par <it>tag</it>.
<item> <bf>CTRL-] </bf> :ta, le mot suivant est tag.
</itemize>

<sect1> Mouvement
<p>
<itemize>
<item> <bf>Flèches</bf> Déplace le curseur.
<item> <bf>CTRL-d</bf> Descend d'une demi-page.
<item> <bf>CTRL-u</bf> Monte d'une demi page.
<item> <bf>CTRL-f</bf> Descend d'une page entière.
<item> <bf>CTRL-b</bf> Monte d'une page entière.
<item> <bf>:0</bf> Déplacement au début du fichier.
<item> <bf>:n</bf> Déplacement à la ligne numéro n.
<item> <bf>:$</bf> Déplacement à la fin du fichier.
<item> <bf>0</bf> Déplacement au début de la ligne.
<item> <bf>^</bf> Déplacement au premier caractère non-blanc.
<item> <bf>$</bf> Déplacement au début de la ligne.
<item> <bf>CR</bf> Déplacement au début de la ligne suivante.
<item> <bf>-</bf> Déplacement au début de la ligne précédente.
<item> <bf>%</bf> Trouve le crochet correspondant.
<item> <bf>G </bf> Va à la ligne (défaut à la dernière ligne).
<item> <bf>&rsqb&rsqb </bf> section/fonction suivante.
<item> <bf>&lsqb&lsqb </bf> section/fonction précédente.
</itemize>

<sect1> Positionnement en ligne
<p>
<itemize>
<item> <bf>H </bf> Première ligne de l'écran.
<item> <bf>L </bf> Dernière ligne de l'écran.
<item> <bf>M </bf> Ligne du milieu de l'écran.
<item> <bf>+ </bf> Ligne suivante, sur le premier non-blanc.
<item> <bf>- </bf> Ligne précédente, sur le premier non-blanc.
<item> <bf>CR </bf> Entrée, pareil que +.
<item> <bf>j </bf> Ligne suivante, même colonne.
<item> <bf>k </bf> Ligne précédente, même colonne.
</itemize>

<sect1> Positionnement des caractères
<p>
<itemize>
<item> <bf>0 </bf> Début de la ligne.
<item> <bf>$ </bf> Fin de la ligne.
<item> <bf>h </bf> Avance.
<item> <bf>l </bf> Recule.
<item> <bf>SPACE </bf> Pareil que l.
<item> <bf>fx </bf> Trouve x en avant.
<item> <bf>Fx </bf> Trouve x en arrière.
<item> <bf>; </bf> Répète le dernier f F.
<item> <bf>, </bf> Inverse de ; .
<item> <bf>| </bf> Vers la colonne spécifiée.
<item> <bf>% </bf> Trouve le { ou } correspondant.
</itemize>

<sect1> Mots, phrases, paragraphes
<p>
<itemize>
<item> <bf>w </bf> Mot en avant.
<item> <bf>b </bf> Mot en arrière.
<item> <bf>e </bf> Fin du mot.
<item> <bf>) </bf> Phrase suivante.
<item> <bf>( </bf> Phrase précédente.
<item> <bf>} </bf> Paragraphe suivant.
<item> <bf>{ </bf> Paragraphe précédent.
<item> <bf>W </bf> Mot délimité par du blanc.
<item> <bf>B </bf> Retour d'un mot blanc.
<item> <bf>E </bf> Fin d'un mot blanc.
</itemize>

<sect1> Marquage et retour
<p>
<itemize>
<item> <bf>``</bf> (taper deux fois la touche `) Contexte précédent.
<item> <bf>''</bf> (taper deux fois la touche ') Contexte précédent au premier non-blanc de la ligne.
<item> <bf>mx</bf> Marque la position avec la lettre x.
<item> <bf>`x</bf> (touche ` et lettre x) Va à la marque x.
<item> <bf>'x</bf> Va à la marque x au premier non-blanc de la ligne.
</itemize>

<sect1> Corrections au cours de l'insertion
<p>
<itemize>
<item> <bf>CTRL-h</bf> Efface le dernier caractère.
<item> <bf>CTRL-w</bf> Efface le dernier mot.
<item> <bf>erase </bf> Taper la touche DELETE, pareil que CTRL-h.
<item> <bf>kill </bf> Votre touche kill, efface l'entrée de la ligne.
<item> <bf>\ </bf> Échappement de CTRL-h, efface et kill.
<item> <bf>ESC </bf> Stoppe l'insertion, retourne en commande.
<item> <bf>CTRL-? </bf> Interrompt, termine l'insertion.
<item> <bf>CTRL-d </bf> Retour de tabulation sur un <it>autoindent</it>.
<item> <bf>CTRL-v </bf> Affiche un caractère non affichable.
</itemize>

<sect1> Ajuster l'écran
<p>
<itemize>
<item> <bf>CTRL-l</bf> Efface et redessine.
<item> <bf>CTRL-r</bf> Redessine, élimine les lignes @.
<item> <bf>z-CR</bf> Redessine avec la ligne courante en haut.
<item> <bf>z-</bf> Redessine, avec la ligne courante au bas de la fenêtre.
<item> <bf>z.</bf> Redessine, avec la ligne courante au centre de la fenêtre.
<item> <bf>/pat/z-</bf> Ligne contenant <it>pat</it> en bas.
<item> <bf>tn</bf> Utilise une fenêtre de n lignes.
<item> <bf>CTRL-e</bf> Descend la fenêtre d'une ligne.
<item> <bf>CTRL-y</bf> Remonte la fenêtre d'une ligne.
</itemize>

<sect1> Effacer
<p>
<itemize>
<item> <bf>x</bf> Efface le caractère sous le curseur.
<item> <bf>X</bf> Efface le caractère avant le curseur.
<item> <bf>D</bf> Efface jusqu'à la fin de la ligne.
<item> <bf>d^</bf> Efface jusqu'au début de la ligne.
<item> <bf>dd</bf> Efface la ligne.
<item> <bf>ndd</bf> Efface <it>n</it> lignes en commençant à la ligne
actuelle.
<item> <bf>dnw</bf> Efface <it>n</it> mots en partant du curseur.
</itemize>

<sect1> Insérer, changer
<p>
<itemize>
<item> <bf>i</bf> Passe en mode d'insertion avant le curseur.
<item> <bf>I</bf> Passe en mode d'insertion avant le premier caractère non-blanc.
<item> <bf>a</bf> Passe en mode d'insertion après le curseur.
<item> <bf>A</bf> Passe en mode d'insertion après la fin de la ligne.
<item> <bf>o</bf> Ouvre une nouvelle ligne en dessous de la ligne courante et passe en mode d'insertion.
<item> <bf>O</bf> Ouvre une nouvelle ligne au dessus de la ligne courante et passe en mode d'insertion.
<item> <bf>r</bf> Remplace le caractère en dessous du curseur (ne passe PAS en mode d'insertion).
<item> <bf>R</bf> Entre en mode d'insertion en remplaçant les caractères.
<item> <bf>C</bf> shift-c. Change le reste de la ligne.
<item> <bf>D</bf> shift-d. Efface le reste de la ligne.
<item> <bf>s</bf> Substitue des caractères.
<item> <bf>S</bf> Substitue des lignes.
<item> <bf>J</bf> Joint les lignes.
</itemize>

<sect1> Copier et coller
<p>
Le tampon de copie est rempli par <it>TOUTE</it> commande d'effacement, ou explicitement par <bf>Y</bf> et <bf>yy</bf>.
<itemize>
<item> <bf>Y</bf> Copie la ligne courante dans le tampon.
<item> <bf><it>n</it>yy</bf> Copie <it>n</it> lignes en partant de la ligne actuelle dans le tampon.
<item> <bf>p</bf> Colle le tampon après le curseur (ou sous la ligne
actuelle).
<item> <bf>P</bf> Colle le tampon avant le curseur (ou avant la ligne actuelle).
<item> <bf>"<it>x</it>p </bf> Colle à partir du buffer x.
<item> <bf>"<it>x</it>y </bf> Copie dans le tampon x.
<item> <bf>"<it>x</it>d </bf> Efface dans le tampon x.
</itemize>

<sect1> Opérateurs (utiliser des doubles pour agir sur les lignes complètes)
<p>
<itemize>
<item> <bf>d </bf> Effacer.
<item> <bf>c </bf> Changer.
<item> <bf>< </bf> Déplacement gauche.
<item> <bf>> </bf> Déplacement droit.
<item> <bf>! </bf> Filtrer au travers de la commande.
<item> <bf>= </bf> Indenter pour LISP.
<item> <bf>y </bf> Copier le texte dans le tampon.
</itemize>

<sect1> Chercher et remplacer
<p>
<itemize>
<item> <bf>/<it>texte</it></bf> Cherche en avant pour <it>texte</it>.
<item> <bf>?<it>texte</it></bf> Cherche en arrière pour <it>texte</it>.
<item> <bf>n</bf> Répète la dernière recherche dans la même direction.
<item> <bf>N</bf> Répète la dernière recherche dans la direction inverse.
<item> <bf>/</bf> Répète la dernière recherche en avant.
<item> <bf>?</bf> Répète la dernière recherche en arrière.
<item> <bf>&lsqb addr &rsqb s/from/to/ &lsqb g &rsqb </bf> Cherche une occurence de <it>from</it> et remplace par <bf><it>to</it></bf> dans la ligne actuelle, ou dans le bloc.
<bf><it>addr</it></bf> (deux numéros de lignes séparés par une commande ; 1,$ est le fichier entier) remplace une occurence par ligne, ou toutes les occurences si <bf><it>g</it></bf> est spécifié.
Par exemple, :3,20s/unmot/unautre/g remplacera "unmot" par "unautre" de la ligne 3 à la ligne 20. 'g' est global et signifie que toutes les occurences de "unmot" seront remplacées.
</itemize>

<sect1> Général
<p>
<itemize>
<item> <bf>:sh</bf> Donne un shell (à quitter avec CTRL-d).
<item> <bf>:!<it>commande</it></bf> Lance un shell pour exécuter <it>commande</it>.
<item> <bf>:set number</bf> Active la numérotation des lignes.
<item> <bf>:set nonumber</bf> Désactive la numérotation des lignes.
</itemize>

<sect1> Commandes d'édition de ligne
<p>
<itemize>
<item> <bf>:</bf> Prévient <bf>vi</bf> que les prochaines commandes seront des commandes pour l'éditeur de ligne.
<item> <bf>:sh</bf> Retourne temporairement au shell pour exécuter quelques commandes shell sans quitter <bf>vi</bf>.
<item> <bf>CTRL-d</bf> Sort du shell temporaire et retourne sous <bf>vi</bf> afin de pouvoir éditer la fenêtre actuelle.
<item> <bf>:</bf><it>n</it> Va à la <it>n</it>ème ligne du tampon.
<item> <bf>:</bf><it>x,z</it><bf>w</bf> <it>fichier</it> Écrit les lignes <it>x</it> à <it>z</it> dans un nouveau fichier appellé <it>fichier</it>.
<item> <bf>:$</bf> Déplace le curseur au début de la dernière ligne du tampon.
<item> <bf>:.,$d</bf> Efface toutes les lignes de la ligne actuelle à la dernière ligne.
<item> <bf>:r</bf> <it>fichier</it> Insère le contenu du fichier <it>fichier</it> sous la ligne actuelle du tampon.
<item> <bf>:s</bf><it>/texte/autre_texte/</it> Remplace la première apparition de <it>texte</it> sur la ligne actuelle par <it>autre_texte</it>.
<item> <bf>:s</bf><it>/texte/autre_texte/g</it> Remplace toutes les apparitions de <it>texte</it> sur la ligne actuelle par <it>autre_texte</it>.
<item> <bf>:g</bf><it>/texte/s//autre_texte/g</it> Change toutes les apparitions de <it>texte</it> dans le tampon par <it>autre_texte</it>.
</itemize>

<sect1> Autres commandes
<p>
<itemize>
<item> <bf>u</bf> Annule le dernier changement.
<item> <bf>U</bf> Restaure la ligne actuelle.
<item> <bf>&tilde</bf> Change la casse.
<item> <bf>J</bf> Joint la ligne actuelle et la ligne suivante.
<item> <bf>.</bf> Répète la dernière commande de changement de texte.
<item> <bf>CTRL-g</bf> Montre le nom du fichier et le nombre de lignes.
</itemize>

<sect> URLs connexes
<p>
Les URLs connexes à ViM sont sur :
<itemize>
<item> C et C++ Beautifer <url
url="http://www.metalab.unc.edu/LDP/HOWTO/C-C++Beautifier-HOWTO.html">
<item> Linux goodies <url url="http://www.aldev.8m.com"> ou sur <url
url="http://www.aldev.webjump.com">
</itemize>


<sect>Autres formats de ce document
<p>
Ce document est publié sous 11 formats différents, nommément - DVI,
Postscript, Latex, Adobe Acrobat PDF, LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-text,
pages man Unix et SGML.
<itemize>
<item>
Vous pouvez obtenir ce document howto sous la forme d'une archive tar en html,
dvi, postscript et sgml de :
<url url="ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/other-formats/">

<item>Le format texte plein est sur :
<url url="ftp://metalab.unc.edu/pub/Linux/docs/HOWTO">

<item>Les traductions dans d'autres langages comme français, allemand,
espagnol, chinois, japonais sont sur
<url url="ftp://metalab.unc.edu/pub/Linux/docs/HOWTO">.
Toute aide de votre part pour traduire ce document dans d'autres langages est
la bienvenue.
</itemize>
Ce document est écrit en utilisant un outil nommé « SGML tools » qui peut être
obtenu de :
<url url="http://www.sgmltools.org">.
Pour compiler le source vous obtiendrez les commandes suivantes comme :
<itemize>
<item>sgml2html Vim-howto.sgml     (pour générer un fichier html)
<item>sgml2rtf Vim-howto.sgml     (pour générer un fichier RTF)
<item>sgml2latex Vim-howto.sgml    (pour générer un fichier latex)
</itemize>

Les documents LaTeX peuvent être convertis en fichiers PDF en produisant
simplement une sortie Postscript en utilisant <bf>sgml2latex</bf> (et dvips)
et en utilisant la sortie via la commande Acrobat <bf>distill</bf> (<url
url="http://www.adobe.com">) comme suit :
<code>
bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips -o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &
</code>
Ou vous pouvez utiliser la commande Ghostscript <bf>ps2pdf</bf>. ps2pdf est un
clone pour la majorité des fonctionnalités du produit Adobe's Acrobat
Distiller : il convertit les fichiers PostScript en fichiers Portable Document
Format (PDF).
<bf>ps2pdf</bf> est implémenté sous la forme d'un fichier script de commandes
très petit qui invoque Ghostscript, en sélectionnant un périphérique de sortie
spécial nommé <bf>pdfwrite</bf>. Afin d'utiliser ps2pdf, le périphérique
pdfwrite doit être inclus dans le makefile lors de la compilation Ghostscript ;
voyez la documentation sur la compilation de Ghostscript pour les détails.

Ce document se trouve sur :
<itemize>
<item> <url url="http://metalab.unc.edu/LDP/HOWTO/ViM-HOWTO.html">
</itemize>

Vous pouvez aussi trouver ce document sur les sites miroirs suivants :
<itemize>
<item> <url url="http://www.caldera.com/LDP/HOWTO/ViM-HOWTO.html">
<item> <url url="http://www.WGS.com/LDP/HOWTO/ViM-HOWTO.html">
<item> <url url="http://www.cc.gatech.edu/linux/LDP/HOWTO/ViM-HOWTO.html">
<item> <url url="http://www.redhat.com/linux-info/ldp/HOWTO/ViM-HOWTO.html">

<item>D'autres sites miroirs près de vous (à l'échelle du réseau) peuvent se
trouver sur
<url url="http://metalab.unc.edu/LDP/mirrors.html">,
sélectionnez un site et allez voir le fichier /LDP/HOWTO/Vim-HOWTO.html.
</itemize>

Afin de voir un document au format dvi, utilisez le programme xdvi. Le
programme xdvi se trouve dans le paquetage tetex-xdvi*.rpm de la Redhat Linux
qui peut se trouver dans ControlPanel | Applications | Publishing | TeX.

Pour lire un document dvi utilisez la commande :

<tscreen><verb>
	xdvi -geometry 80x90 howto.dvi
	man xdvi
</verb></tscreen>

Et redimmensionnez la fenêtre avec une souris. Voyez la page man de
xdvi. Pour naviguer utilisez les flèches, les touches page up, down,
ou également les lettres 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' pour
monter, descendre, centrer, page suivante, page précédente, etc. Pour
supprimer le menu expert appuyez sur 'x'.

Vous pouvez lire le fichier postscript avec le programme 'gv' (ghostview) ou
'ghostscript'.
Le programme ghostscript est dans le paquetage ghostscript*.rpm et le
programme gv dans gv*.rpm, qui se trouvent sous ControlPanel | Applications |
Graphics. Le programme gv est beaucoup plus agréable à utiliser que
ghostscript.

Ghostscript et gv sont aussi disponibles sous d'autres
plateformes comme OS/2, Windows 95 et NT. Vous pouvez donc lire ce document
sur toutes ces plateformes.

<itemize>
<item>Prenez ghostscript pour Windows 95, OS/2, et tous les OS sur
<url url="http://www.cs.wisc.edu/~ghost">
</itemize>

Pour lire le document postscript utilisez la commande :

<tscreen><verb>
	gv howto.ps
	ghostscript howto.ps
</verb></tscreen>

Vous pouvez lire le document en html en utilisant Netscape Navigator,
Microsoft Internet explorer, Redhat Baron ou tout autre des 10 navigateurs
web.

Vous pouvez lire la sortie LaTeX ou LyX en utilisant LyX ou vim.

<sect> Notice de Copyright
<p>
Le Copyright est GNU/GPL comme pour le LDP (Linux Documentation project). Le
LDP est un projet GNU/GPL.
Les restrictions additionnelles sont - vous devez conserver le nom de
l'auteur, l'adresse mail et cette notice de Copyright sur toutes les copies.
Si vous effectuez un changement ou une addition à ce document, vous devez
notifier tous les auteurs de ce document.

</article>
