*intro.txt* Pour Vim version 6.1. Dernière modification : 13 oct 2002 MANUEL de RÉFÉRENCE VIM - par Bram Moolenaar Introduction à Vim *ref* *reference* 1. Introduction |intro| 2. Vim sur Internet |internet| 3. Contributeurs |credits| 4. Notations employées |notation| 5. Introduction aux modes |vim-modes-intro| 6. Passer d'un mode à un autre |mode-switching| 7. Contenu d'une fenêtre |window-contents| 8. Définitions |definitions| ============================================================================== 1. Introduction *intro* VIM est mis pour "Vi IMproved" [« VI aMélioré »] ; ce fut d'abord pour "Vi IMitation", mais tant d'améliorations ont été apportées qu'un changement de nom a paru approprié. Vim est un éditeur de texte qui reconnaît presque toutes les commandes du programme Unix "vi", et en apporte de (nombreuses) nouvelles. Il se révèle particulièrement puissant dans l'édition de programmes et autres fichiers texte. Toutes les commandes sont entrées par le clavier. Cela a l'avantage de vous permettre de garder les mains dessus, et les yeux sur l'écran. Pour ceux qui le souhaitent, il existe un support de la souris ainsi qu'une version GUI (interface graphique) pourvue de menus et d'ascenseurs (cf. |gui.txt|). Vous trouverez un sommaire de ce manuel dans le fichier "help.txt", |help.txt|. On peut y accéder à partir de Vim grâce aux touches ou , ou par la commande |:help| (saisir simplement ":help", sans barres ni apostrophes). L'option 'helpfile' peut contenir le nom du fichier d'aide, au cas où il ne serait pas situé à son emplacement par défaut. Vous pouvez sauter vers chaque sujet comme avec des marqueurs : CTRL-] pour se rendre au sujet sous le curseur, et CTRL-T pour revenir en arrière. À travers ce manuel, les différences entre Vi et Vim sont mentionnées entre accolades : par exemple, {Vi n'a pas d'aide en ligne}. Se reporter à |vi_diff.txt| pour un aperçu exhaustif des différences entre Vim et Vi. Ce manuel couvre les implantations de Vim sur différentes machines. Il peut y avoir de légères différences d'un ordinateur (ou terminal) à un autre. En plus des remarques soulevées dans la suite de ce fichier, il existe un document séparé pour chaque système supporté (cf. |sys-file-list|). Ce manuel est une référence pour toutes les commandes et options de Vim. Ce n'est pas une introduction au maniement de Vi ou Vim, certains passages se révélant ardus. Pour les débutants, il existe un |tutor|iel pour s'initier par la pratique. Pour apprendre à utiliser Vim, lisez le Manuel de l'utilisateur |usr_toc.txt|. Il y a de nombreux livres sur Vi qui consacrent une section aux débutants. En voici deux que je recommande : "Vim - Vi Improved" par Steve Oualline Il s'agit du premier livre entièrement dédié à Vim. Il conviendra parfaitement aux débutants. Les commandes les plus utilisées sont décrites avec des illustrations et des exemples ; celles moins fréquentes sont également détaillées, et les fonctionnalités les plus pointues sont résumées. Il comporte en outre un vaste index et une référence rapide. Des parties de ce livre ont été incluses dans le Manuel de l'utilisateur |frombook|. Publié chez New Riders Publishing. ISBN : 0735710015. Pour plus d'informations, vous pouvez consulter : http://vim.iccf-holland.org http://www.vim.org/iccf/click5.html "Learning the Vi editor" par Linda Lamb et Arnold Robbins C'est un livre sur Vi qui consacre un chapitre à Vim (dans sa sixième édition). Les premiers pas dans Vi sont très bien détaillés. Les commandes spécifiques à Vim sont seulement mentionnées brièvement. Une traduction allemande est disponible. [N.D.T. : Pas de traduction française, hélas !] Publié chez O'Reilly. ISBN : 1-56592-426-6. ============================================================================== 2. Vim sur Internet *internet* [N.D.T. : Dans toute cette section, et sauf indication contraire explicite, les sites, forums, listes de diffusion et adresses électroniques sont à usage anglophone exclusivement.] SUR LA TOILE *www* *faq* *FAQ* *distribution* *download* Le site de Vim apporte les informations les plus récentes. On y trouve aussi des liens vers la dernière version de Vim disponible. La FAQ est une « Foire Aux Questions », à consulter en cas de problèmes. Page d'accueil de Vim : http://vim.sf.net/ Pages de Sven sur Vim : http://www.vim.org/ Dernières nouvelles : http://www.vim.org/news.html FAQ de Vim : http://www.vim.org/faq/ Téléchargement : ftp://ftp.vim.org/pub/vim/MIRRORS SUR LES FORUMS *news* *usenet* Il existe un forum de discussion où il est question de Vim : comp.editors Voir "http://www.vim.org/usenet.html". Ce groupe sert aussi pour les autres éditeurs, donc si vous y postez, n'oubliez pas de mentionner que cela concerne Vim. SUR LES LISTES DE DIFFUSION *mail-list* *maillist* Il existe plusieurs listes de diffusion traitant de Vim : Discussions sur l'utilisation des versions existantes : mappages utiles, questions, réponses, où trouver une version spécifique, etc. *vim-dev* *vimdev* Discussions sur les changements à apporter : nouvelles fonctionnalités, portages, rustines, versions béta-test, etc. *vim-announce* Annonces des nouvelles moutures de Vim, mais aussi des versions béta-test et des portages vers differents systèmes. *vim-multibyte* Discussions sur l'utilisation et les améliorations à apporter pour l'édition de texte multi-octets avec Vim. *vim-mac* Discussions sur l'utilisation et les améliorations à apporter à la version Macintosh de Vim. Consultez "http://www.vim.org/mail.html". NOTES : - Vous ne pouvez poster dans ces listes que si vous y êtes abonné ! - Vous devez envoyer vos messages du même endroit d'où vous vous êtes abonné (et ce afin de se prémunir du pollupostage). - La taille des messages est limitée à 40000 caractères. *subscribe-maillist* Si vous désirez vous abonner, envoyez un message à : Assurez-vous que le champ "From:" de votre courrier est correct. Ensuite, le serveur contacté vous donnera toute l'aide nécessaire pour l'abonnement. Vous pouvez récupérer les anciens messages à partir du logiciel de liste de diffusion XXX, ainsi qu'un index des messages. Interrogez vim-help pour les instructions. Les archives sont conservées sur : *maillist-archive* http://groups.yahoo.com/group/vim http://groups.yahoo.com/group/vimdev http://groups.yahoo.com/group/vimannounce http://groups.yahoo.com/group/vim-multibyte http://groups.yahoo.com/group/vim-mac Une autre archive sur "http://www.somelist.com", dans la section "Éditeurs" (le site est en français, les messages en anglais). Listes de diffusion supplémentaires : *french-maillist* Liste sur Vim en français ! Abonnez-vous en envoyant un message à : Ou allez sur "http://groups.yahoo.com/group/vim-fr". RAPPORT DE BOGUE *bugs* *bug-reports* *bugreport.vim* Envoyez vos rapports de bogues à : Vim bugs . Il ne s'agit pas d'une liste de diffusion, mais le message est redirigé vers le mainteneur de Vim. Soyez concis S.V.P. ; le temps passé à répondre au courriel ampute d'autant celui consacré à la poursuite du développement de Vim. Donnez toujours un exemple reproductible, et tâcher d'isoler quels agents ou paramètres sont responsables du problème. Essayez sur différentes machines si possible et... envoyez-moi des rustines si vous pouvez ! En cas de doute, lancez : > :so $VIMRUNTIME/bugreport.vim Ceci créera un fichier "bugreport.txt" dans le répertoire courant, regroupant de nombreuses informations sur votre environnement. Vérifiez qu'il ne contienne aucune donnée confidentielle avant de l'envoyer ! *debug-vim* Lorsque Vim plante dans un des fichiers de test, et que vous utilisez le compilateur gcc, voilà ce que vous pouvez faire pour isoler l'endroit exact du plantage : 1. Compilez Vim avec l'option "-g" (il y a une ligne dans le Makefile pour cela, que vous pouvez décommentez). 2. Exécutez ces commandes (en remplaçant "11" par le test ayant échoué) : > cd testdir gdb ../vim run -u unix.vim -U NONE -s dotest.in test11.in 3. Repérez l'endroit du plantage (gdb devrait émettre un message). 4. Obtenir une trace de la pile avec gdb par cette commande : > where < Vous pouvez tester différents endroits dans la trace de la pile avec : > frame 3 < Remplacez "3" par un des nombres dans la trace de la pile. *year-2000* *Y2K* Comme Vim n'utilise pas de date en interne pour l'édition, aucun problème lié au bogue de l'an 2000 n'est à craindre. Vim utilise les dates sous forme de secondes écoulées depuis le 1er janvier 1970 : elles servent au contrôle de l'horodatage du fichier édité et du fichier d'échange, ce qui n'est pas critique et devrait seulement produire quelques messages. Il y aura peut-être un problème en l'an 2038, lorsque les secondes dépasseront les capacités d'un entier 32 bits. Cela dépend du compilateur, des bibliothèques et du système d'exploitation. En particulier, time_t et la fonction ctime() sont utilisés. Et time_t est enregistré sur quatre octets dans le fichier d'échange. Mais cela sert uniquement à afficher une date/heure pour le recouvrement, et n'affecte pas l'édition normale. La fonction Vim strftime() utilise directement la fonction système strftime(). localtime() utilise la fonction système time(). getftime() utilise le temps retourné par la fonction système stat(). Si les bibliothèques de votre système supportent le passage à l'an 2000, alors Vim aussi. L'utilisateur peut créer des scripts Vim qui utilisent des commandes externes. Ces commandes pourraient alors introduire des problèmes liés à l'an 2000, mais elles ne font pas vraiment partie de Vim. ============================================================================== 3. Contributeurs *credits* *author* La plus grande partie de Vim a été écrite par Bram Moolenaar . La documentation dérive partiellement de quelques manuels sur Vi, écrits par : W. N. Joy Alan P. W. Hewett Mark Horton L'éditeur Vim est basé sur "Stevie", et inclut (des idées) d'autres logiciels, issus du labeur de tous ceux ci-mentionnés. D'autres personnes ont apporté de l'aide en m'envoyant rustines, suggestions, ou leur appréciation personnelle sur Vim. Vim ne serait pas devenu ce qu'il est aujourd'hui sans l'aide de ces gens ! Ron Aaron changements pour la GUI Win32 Zoltan Arpadffy travail sur le portage VMS Tony Andrews Stevie Gert van Antwerpen changements pour DJGPP sur MS-DOS Berkeley DB(3) idées pour la mise en oeuvre des fichiers d'échange Keith Bostic Nvi Walter Briscoe mises à jour des Makefile, diverses rustines Ralf Brown bibliothèque SPAWNO pour MS-DOS Robert Colon nombreuses remarques utiles Marcin Dalecki portage de la GUI GTK+, icônes de la barre d'outils, gettext() Kayhan Demirel envoi de nouvelles de l'Ouganda Chris & John Downey Xvi (idées pour le multi-fenêtrage) Henk Elbers premier portage VMS Eric Fischer portage Mac, 'cindent', et autres améliorations Benji Fisher réponses à de nombreuses questions d'utilisateurs Bill Foster portage de la GUI Athena Loic Grenie Xvi (idées pour le multi-fenêtrage) Sven Guckes maintenance des pages WWW sur Vim Darren Hiebert programme "Exuberant ctags" Bruce Hunsaker améliorations au portage VMS Andy Kahn support cscope, portage de la GUI GTK+ Oezguer Kesim maintenance des listes de diffusion sur Vim Axel Kielhorn travail sur le portage Macintosh Steve Kirkendall Elvis Roger Knobbe portage Windows NT original Sergey Laskavy aide pour Vim en provenance de Moscou Felix von Leitner maintenance des listes de diffusion sur Vim David Leonard portage des extensions Python pour Unix Avner Lottem édition de droite à gauche Flemming Madsen client/serveur X11, diverses rustines et fonctionnalités MicroSoft don d'une copie de DevStudio pour compiler Vim Paul Moore extensions de l'interface Python, nombreuses rustines Katsuhito Nagano travail sur les versions muti-octets Sung-Hyun Nam travail sur les versions muti-octets Vince Negri améliorations pour Win32 (GUI et console) Steve Oualline auteur du premier livre sur Vim |frombook| George V. Reilly portage Win32, bases de la GUI Win32 Stephen Riehm chasseur de bogues Stefan Roemer diverses rustines, aide aux utilisateurs Ralf Schandl portage IBM OS/390 Olaf Seibert versions DICE et BeBox, amélioration des exprat Mortaza Shiran rustines farsi Peter da Silva termlib Paul Slootman portage OS/2 Henry Spencer expressions rationnelles Dany St-Amant portage Macintosh Tim Thompson Stevie G. R. (Fred) Walter Stevie Sven Verdoolaege interface Perl Mike Williams impression PostScript Robert Webb complètement de la ligne de commande, versions GUI, nombreuses rustines Ingo Wilken interface Tcl Juergen Weigert version Lattice, améliorations AUX, portages UNIX et MS-DOS, autoconf Stefan 'Sec' Zehl maintenance de vim.org Je souhaite également remercier tous ceux qui m'ont envoyé des rapports de bogues et suggestions. La liste est trop longue pour les mentionner tous ici. Mais Vim n'eût jamais été le même sans leurs idées : ils le font vivre ! Cette documentation contient plusieurs références à d'autres versions de Vi : *Vi* Vi « L'original ». Sans plus de détails, c'est la version de Vi qui apparaît dans Sun OS 4.x. ":version" retourne "Version 3.7, 6/7/85". D'autres versions sont parfois mentionnées. Existe seulement sous Unix. Le code source n'est disponible qu'avec une licence. Pour plus d'informations sur Vi, consultez : http://vi-editor.org *Posix* Posix Dérive de l'"IEEE standard 1003.2, Part 2: Shell and utilities". Communément appelé "Posix". C'est une description textuelle du comportement auquel Vi est supposé obéir. La version utilisée est une pré-version de début 1996, ainsi toutes les remarques sont « censées se plier à » Posix. Des détails peuvent cependant s'en écarter... *Nvi* Nvi Le « Nouveau » ["New"] Vi. Clone de Vi distribué avec BSD 4.4 et FreeBSD. Très bonne compatibilité avec le Vi original, avec quelques extensions. La version utilisée est 1.79. ":version" retourne "Version 1.79 (10/23/96)". Il n'y a pas eu de version sortie ces dernières années, bien qu'une version 1.81 soit en développement. Le code source est librement disponible. *Elvis* Elvis Un autre clone de Vi, réalisé par Steve Kirkendall. Très compact, mais pas aussi flexible que Vim. La version utilisée est la 2.1. Son développement se poursuit. Le code source est librement disponible. ============================================================================== 4. Notations employées *notation* Si la coloration syntaxique est active pour lire la documentation, le texte non littéral est souvent mis en surbrillance avec le groupe Special. Ceci concerne les éléments entre [], {} et <>, et du type CTRL-X. NOTE : Vim utilise tous les caractères disponibles dans les commandes. Parfois, [], {} et <> feront partie de ce que vous tapez, mais parfois pas, le contexte devrait écarter toute ambiguïté. [] Les caractères entre crochets sont optionnels. *count* *[count]* [quant] « Quantificateur » : un nombre optionnel qui peut précéder une commande afin d'en multiplier ou itérer les effets. Si aucun nombre n'est donné, c'est 1 qui est utilisé par défaut, sauf indication contraire. Notez que dans ce manuel, [quant] n'apparaît pas dans la description, mais dans l'explication d'une commande, afin de faciliter une recherche rapide. Si l'option 'showcmd' est fixée, l'entrée (partielle) d'un quantificateur est affichée au bas de l'écran. Saisir en efface le dernier chiffre (|N|). *[quotex]* ["x] Désigne un registre optionnel où le texte est mémorisé. Voir |registers|. Le x est un caractère unique compris entre 'a' et 'z' ou 'A' et 'Z' ou '"', et dans certains cas (commandes de collage) entre '0' et '9', '%', '#', ou autres. Les lettres majuscules et minuscules désignent le même registre, mais l'emploi des miniscules écrase le contenu précédent du registre, tandis que celui des majuscules ajoute le nouveau texte à la suite du précédent. Sans cet argument '"x' (ou avec '""'), le texte est mémorisé dans le registre sans nom. *{}* {} Les accolades dénotent des arguments obligatoires d'une commande, qui peuvent prendre plusieurs valeurs possibles. On trouvera également notées ainsi les différences entre Vim et Vi (la distiction s'effectuant clairement dans chaque contexte.) *{char1-char2}* {car1-car2} Un caractère unique dans la plage de car1 à car2. Par exemple, {a-z} désigne une lettre minuscule. Plusieurs plages peuvent être concaténées (par exemple, {a-zA-Z0-9} désigne un caractère alphanumérique). *{motion}* {motion} Une commande qui déplace le curseur. Elles sont détaillées dans |motion.txt|. Exemples : w au début du mot suivant 4j quatre lignes plus bas /Le à la prochaine occurrence de "Le" Cette notation est utilisée après un opérateur (cf. |operator|) pour couvrir le texte sur lequel la commande doit opérer. - Si la {motion} inclut un quantificateur et l'opérateur aussi, ces deux nombres sont multipliés. Par exemple, "2d3w" coupe six mots. - La {motion} peut également être un clic de la souris. Cependant, celle-ci n'est pas supportée par tous les terminaux. - La commande ":omap" permet de définir des mappages pour quand un opérateur est en suspens. - Les commandes Ex peuvent être utilisées pour déplacer le curseur. C'est utile pour appeler une fonction qui effectue une motion complexe. La motion sera toujours exclusive par caractères, indépendamment de la commande ":" utilisée. Cela implique qu'il sera impossible d'inclure le dernier caractère d'une ligne sans la coupure de ligne (à moins que 'virtualedit' ne soit fixé). Si la commande Ex change du texte avant la position d'où l'opérateur avait débuté, ou fait sauter vers un autre tampon, le résultat est imprévisible. Il est possible de changer du texte situé plus bas. Il est possible de sauter vers un autre tampon si le tampon courant n'est pas déchargé. *{Visual}* {Visuel} Une zone de texte sélectionné. Elle débute à l'appel des commandes "v", "V", ou CTRL-V, puis n'importe quelle commande déplaçant le curseur peut être utilisée pour changer la fin de la zone de sélection. Utile avant un opérateur |operator| pour mettre en surbrillance le texte sur lequel la commande doit opérer. Voir |Visual-Mode|. ** Un caractère spécial du tableau ci-dessous, éventuellement avec un modificateur, ou un caractère ASCII avec modificateur. *'character'* 'c' Un caractère ASCII unique. *CTRL-{char}* CTRL-{car} La séquence clavier CTRL-{car} (tapez {car} en maintenant la touche CTRL enfoncée). La casse de {car} est indifférente, de sorte que CTRL-A et CTRL-a sont équivalents. (Mais comme sur certains terminaux, la saisie de Maj produira un code différent, il est déconseillé de l'utiliser.) *'option'* 'option' Une option (ou paramètre) dont on peut fixer la valeur est donnée entre apostrophes. Voir |options|. *quotecommandquote* "commande" Une référence à une commande qu'on peut entrer au clavier est donnée entre double apostrophes. *key-notation* *key-codes* *keycodes* Ces noms et notations pour les touches du clavier sont utilisés dans la documentation. Ils sont également employables avec la commande ":map". NOTATION SIGNIFICATION ÉQUIVALENT VALEUR DÉCIMALE ~ ----------------------------------------------------------------------------- nul CTRL-@ 0 (représenté par 10) ** retour arrière CTRL-H 8 *backspace* tabulation CTRL-I 9 *tab* *Tab* *linefeed* saut-de-ligne CTRL-J 10 (utilisé pour ) saut-de-page CTRL-L 12 *formfeed* retour chariot CTRL-M 13 *carriage-return* comme ** entrée, comme ** échappe CTRL-[ 27 *escape* ** espace 32 *space* inférieur-à < 60 ** contre-oblique \ 92 *backslash* ** barre verticale | 124 ** suppr 127 introduction séquence ALT-Esc 155 ** de contrôle (CSI) CSI saisie dans la GUI ** fin-de-ligne (défini par , ** ou , selon les systèmes et 'fileformat') flèche-haut *cursor-up* *cursor_up* flèche-bas *cursor-down* *cursor_down* flèche-gauche *cursor-left* *cursor_left* flèche-droite *cursor-right* *cursor_right* maj-flèche-haut maj-flèche-bas maj-flèche-gauche maj-flèche-droite contrôle-flèche-gauche contrôle-flèche-droite - touches fonction de 1 à 12 *function_key* *function-key* - maj-fonction de 1 à 12 ** touche aide touche annul touche inser début *home* fin *end* page-préc *page_up* *page-up* page-suiv *page_down* *page-down* PAVÉ NUMÉRIQUE : pavé début (en haut à gauche) *keypad-home* pavé fin (en bas à gauche) *keypad-end* pavé page-préc (en haut à droite) *keypad-page-up* pavé page-suiv (en bas à droite) *keypad-page-down* pavé + *keypad-plus* pavé - *keypad-minus* pavé * *keypad-multiply* pavé / *keypad-divide* pavé entrée *keypad-enter* pavé point décimal *keypad-point* - pavé 0 à 9 *keypad-0* *keypad-9* MODIFICATEURS : maj-touche *shift* * contrôle-touche *control* *ctrl* * alt-touche ou méta-touche *meta* *alt* * comme * commande-touche (Mac uniquement) * touche représentée par l'entrée termcap "xx" ----------------------------------------------------------------------------- NOTE : Les combinaisons Maj + touches fléchées, ainsi que les touches et , ne sont disponibles que sur un petit nombre de terminaux. Sur Amiga, Maj + F10 produit un code (CSI) qui est également utilisé par des séquences claviers. Il sera reconnu uniquement après la saisie d'une touche supplémentaire. NOTE : Il existe deux codes pour la touche de suppression (Suppr). 127 est la valeur ASCII décimale de cette touche, qui sera toujours reconnue. Certaines touches de suppression envoient une autre valeur, auquel cas cette valeur est obtenue par l'entrée termcap "kD". Les deux valeurs ont le même effet. Voir aussi |:fixdel|. NOTE : Les touches du pavé numérique sont utilisées de la même façon que les touches « normales » correspondantes. Par exemple, produit le même effet que . Si une touche du pavé envoie le même code que son équivalent « normal », elle sera reconnue elle-même comme « normale », c'est-à-dire n'appartenant pas au pavé numérique. Par exemple, si envoie le même code que , lorsque sera pressé, Vim croiera que a été pressé. Dans ce cas, le mappage de ne marchera pas. *<>* Les exemples sont souvent donnés avec la notation <>. Elle sert parfois juste à les rendre plus clairs, mais peut souvent être saisie littéralement, comme par exemple avec la commande ":map". Les règles sont : 1. Tous les caractères sont saisis directement, sauf contre-oblique et '<'. 2. Une contre-oblique est représentée par "\\" (contre-oblique double), ou "". 3. Un '<' est représenté par "\<" ou "". Lorsqu'aucune confusion n'est possible, un '<' peut être saisi directement. 4. "" représente la touche spéciale précisée. Le détail de cette notation est explicité dans le tableau ci-dessus. Exemples : touche Échappe CTRL-G touche fléchée haut Contrôle - clic gauche de la souris Maj - F11 Alt - a ('a' avec le 8-ième bit positionné) Alt - A ('A' avec le 8-ième bit positionné) entrée "kd" de termcap (touche fléchée bas) Si vous désirez utilisez la notation <> dans Vim, assurez-vous que le drapeau '<' soit exclu de 'cpoptions' (ce qui est le cas par défaut lorsque 'compatible' n'est pas fixé). > :set cpo-=< La notation <> utilise comme caractère d'échappement. Une contre-oblique ('\') fonctionnera aussi, mais uniquement lorsque 'cpoptions' n'inclut pas le drapeau 'B'. Exemples pour mapper CTRL-H au six caractères "" : > :imap \ :imap Home> La première ligne marche uniquement lorsque le drapeau 'B' est exclu de 'cpoptions'. La seconde marchera toujours. Pour obtenir un "" littéral dans un mappage : > :map lt> Pour les commandes de mappages, abréviations et menus, vous pouvez soit copier-coller ces exemples et les réemployer directement, soit les taper littéralement, y compris les caractères '<' et '>'. Mais cela ne fonctionnera PAS pour les autres commandes, comme ":set" et ":autocmd" ! ============================================================================== 5. Introduction aux modes *vim-modes-intro* *vim-modes* Vim distingue six modes de BASE : *Normal* *Normal-mode* *command-mode* Mode Normal En mode Normal, on peut entrer toutes les commandes normales de l'éditeur. Au lancement, vous vous trouvez dans ce mode (sauf si l'option 'insertmode' est fixée, cf. ci-dessous). Également appelé mode Commande. Mode Visuel Comme en mode Normal, mais les commandes de déplacement délimitent une zone Visuel. Quand une commande ne servant pas au déplacement est saisie, elle est exécutée pour cette seule zone. Voir |Visual-mode|. Si l'option 'showmode' est fixée "-- VISUAL --" est affiché au bas de la fenêtre. Mode Sélection Ce mode se rapproche du mode selection de MS-Windows. Saisir un caractère imprimable coupe la sélection et lance le mode Insertion. Voir |Select-mode|. Si l'option 'showmode' est fixée "-- SELECT --" est affiché au bas de la fenêtre. Mode Insertion En mode Insertion, le texte saisi est inséré dans le tampon courant. Voir |Insert-mode|. Si l'option 'showmode' est fixée "-- INSERT --" est affiché au bas de la fenêtre. Mode Ligne-de-commande En mode Ligne-de-commande (souvent abrégé en Lignecmd), Mode Lignecmd on peut entrer une ligne de texte au bas de la fenêtre. Elle sert pour les commandes Ex ":", les commandes de recherche de motifs "?" et "/", et les commandes de filtre "!". Voir |Cmdline-mode|. Mode Ex Comme en mode Ligne-de-commande, mais reste en mode Ex après l'exécution d'une commande. Édition de la ligne de commande très rudimentaire. Voir |Ex-mode|. Il y a aussi cinq modes SUPPLÉMENTAIRES ; ce sont des variantes des premiers : *Operator-pending* *Operator-pending-mode* Mode Opérateur-en-cours Comme en mode Normal, mais après que la saisie d'un opérateur a débuté, et que Vim est en attente d'une {motion} précisant la plage sur laquelle il doit agir. Mode Remplacement Le mode Remplacement est un comportement particulier du mode Insertion. On peut tout y faire comme en mode Insertion, mais pour chaque caractère saisi, un caractère du texte existant est supprimé. Voir |Replace-mode|. Si l'option 'showmode' est fixée "-- REPLACE --" est affiché au bas de la fenêtre. Mode Insertion Normal On y entre en saisissant CTRL-O en mode Insertion. Identique au mode Normal, mais après l'exécution d'une commande, Vim revient en mode Insertion. Si l'option 'showmode' est fixée "-- (insert) --" est affiché au bas de la fenêtre. Mode Insertion Visuel On y entre en lançant une sélection Visuel en mode Insertion, p. ex., en tapant CTRL-O puis "v", "V" ou CTRL-V. À la fin de la sélection Visuel, Vim revient en mode Insertion. Si 'showmode' est fixé "-- (insert) VISUAL --" est affiché au bas de la fenêtre. Mode Insertion Sélection On y entre en lançant le mode Sélection en mode Insertion, p. ex. en faisant glisser la souris ou avec . À la fin du mode Sélection, Vim revient en mode Insertion. Si 'showmode' est fixé "-- (insert) SELECT --" est affiché au bas de la fenêtre. ============================================================================== 6. Passer d'un mode à un autre *mode-switching* Si pour n'importe quelle raison vous ignorez dans quel mode vous vous trouvez, vous pouvez toujours retourner en mode Normal en tapant deux fois . Cela ne fonctionne pas en mode Ex, utilisez alors ":visual". Vous saurez que vous êtes revenu en mode Normal lorsque vous aurez vu l'écran flasher ou entendu un bip après avoir tapé . Cependant, si vous pressez après avoir utilisé CTRL-O en mode Insertion, vous aurez un bip mais resterez en mode Insertion (pour en sortir, tapez à nouveau). *i_esc* ... AU MODE ~ Normal Visuel Sélection Insertion Remplacement Lignecmd Ex ~ DU MODE ... ~ Normal v V ^V *4 *1 R : / ? ! Q Visuel *2 ^G c C -- : -- Sélection *5 ^O ^G *6 -- -- -- Insertion -- -- -- -- Remplacement -- -- -- -- Lignecmd *3 -- -- :start -- -- Ex :vi -- -- -- -- -- -- Impossible *1 On peut passer du mode Normal au mode Insertion par une des commandes "i", "I", "a", "A", "o", "O", "c", "C", "s" or S". *2 On passe du mode Visuel au mode Normal en donnant une commande ne servant pas au déplacement, et qui s'exécutera, ou en tapant , "v", "V" ou CTRL-V (voir |v_v|), qui stoppent le mode Visuel sans effet de bord. *3 On peut passer du mode Ligne-de-commande au mode Normal en : - tapant ou , qui exécutent la commande saisie ; - effaçant toute la ligne (p. ex. avec CTRL-U) et en tapant un final ; - tapant CTRL-C ou , qui quittent le mode Ligne-de-commande sans exécuter la commande. Dans le dernier cas, peut être le caractère défini par l'option 'wildchar', auquel cas il activera le complètement en mode Lignecmd. Pour passer outre, saisir à nouveau. {Vi : exécute la ligne de commande. C'est désagréable la plupart du temps, c'est pourquoi Vim ne réagit pas ainsi. Mais quand est utilisé dans un mappage, la ligne de commande est exécutée. Si vous souhaitez imiter le comportement de Vi quand vous tapez , utilisez ":cmap ^V ^V^M"} *4 On passe du mode Normal au mode Sélection en : - sélectionnant du texte avec la souris, si 'selectmode' contient "mouse" ; - entrant un caractère de commande non-imprimable pour déplacer le curseur pendant que la touche Maj est pressée, si 'selectmode' contient "key" ; - utilisant "v", "V" ou CTRL-V, si 'selectmode' contient "cmd" ; - utilisant "gh", "gH" ou "g CTRL-H" |g_CTRL-H|. *5 On passe du mode Sélection mode au mode Normal en entrant un caractère de commande non-imprimable pour déplacer le curseur pendant que la touche Maj est pressée. *6 On passe du mode Sélection au mode Insertion en tapant un caractère imprimable. La sélection est ainsi coupée et le caractère inséré. Si l'option 'insertmode' est fixée, l'édition débutera en mode Insertion. *CTRL-\_CTRL-N* *i_CTRL-\_CTRL-N* *c_CTRL-\_CTRL-N* *v_CTRL-\_CTRL-N* De plus, la commande "CTRL-\ CTRL-N" ou peut servir à retourner en mode Normal depuis n'importe quel autre mode. Ceci peut être utile pour s'assurer que Vim est bien en mode Normal, sans émettre de bip comme avec . *CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G* La commande "CTRL-\ CTRL-G" ou peut servir à passer en mode Insertion quand 'insertmode' est fixé. Sinon, elle fera revenir en mode Normal. Ceci peut être utile pour s'assurer que Vim est bien dans le mode indiqué par 'insertmode', si l'on ignore le mode courant. *Q* *mode-Ex* *Ex-mode* *Ex* *EX* Q Passe en mode Ex. C'est à peu près comme taper des commandes ":" les unes après les autres, excepté que : - il n'y a pas à ressaisir ":" ; - l'écran n'est pas redessiné après chaque commande ; - les commandes d'édition du mode Lignecmd sont inopérantes ; - les mappages et abréviations sont inaccessibles. En fait, vous éditez les lignes avec les commandes d'édition de ligne « standard » ( ou pour effacer, CTRL-U pour supprimer toute la ligne). Vim entrera par défaut dans ce mode si "ex" est invoqué à la ligne de commande. Utilisez la commande ":vi" |:visual| pour quitter le mode Ex. NOTE : Dans les anciennes versions de Vim, "Q" formatait du texte. Maintenant, cela est fait avec |gq|. *gQ* gQ Passe en mode Ex, mais se comporte comme si on tapait des commandes ":" à la suite. Les commandes d'édition, de complètement, etc. du mode Lignecmd sont disponibles. Utilisez la commande ":vi" |:visual| pour quitter le mode Ex. {absent de Vi} ============================================================================== 7. Contenu d'une fenêtre *window-contents* En mode Normal et Insertion/Remplacement, l'écran de la fenêtre affichera le contenu du tampon : "What You See Is What You Get" [« Vous voyez ce que vous obtenez »]. Il y a deux exceptions : - Lorsque l'option 'cpotions' contient '$' et que la modification est confinée à une seule ligne, le texte n'est pas directement supprimé mais un '$' est placé au dernier caractère modifié. - Lors de l'insertion du texte dans une fenêtre, les autres fenêtres affichant le même texte ne seront mises à jour que lorsque l'insertion sera finie. {Vi : l'écran n'est pas toujours mis à jour pour les terminaux lents.} Les lignes plus longues que la largeur de la fenêtre seront enroulées, à moins que l'option 'wrap' ne soit désactivée (voir ci-dessous). L'option 'linebreak' peut être fixée pour permettre d'enrouler une ligne à un caractère d'espace. S'il reste de la place après la dernière ligne du tampon, Vim affichera '~' dans la première colonne des dernières lignes du tampon, comme ceci : > pénultième ligne dernière ligne ~ ~ Ainsi, les lignes débutant par '~' indiquent que la fin du tampon est atteinte. Si la dernière ligne d'une fenêtre en dépasse, Vim indiquera ceci par un '@' dans la première colonne des dernières lignes de la fenêtre, comme ceci : > première ligne deuxième ligne @ @ Ainsi, les lignes '@' indiquent une ligne qui ne rentre pas dans le restant de la fenêtre. Lorsque le drapeau "lastline" est présent dans l'option 'display', le caractère '@' ne sera pas visible sur côté gauche de la fenêtre. Si la dernière ligne dépasse de l'écran, seule la partie qui coïncide sera affichée, et ses trois derniers caractères seront remplacés par '@@@', comme ceci : > première ligne deuxième ligne une ligne très longue q ui dépasse de la fen@@@ Il existe une situation spéciale dans le cas où une seule ligne est trop longue pour rentrer dans l'écran : Vim affichera seulement une partie de la ligne, autour de la position du curseur. Aucun caractère spécial ne sera employé, afin que vous puissiez éditer n'importe quelle partie de cette ligne. {Vi renvoie une erreur interne pour les lignes qui dépassent une fenêtre} Le drapeau '@' dans l'option 'highlight' peut être utilisé pour mettre en surbrillance les caractères '@' et '~', afin de les distinguer des caractères du texte d'un tampon. L'option 'showbreak' contient la chaîne à afficher au début des lignes enroulées. *wrap-off* Si l'option 'wrap' est désactivée, les lignes longues ne seront pas enroulées. Seule la partie qui coïncide avec l'écran sera affichée. Si le curseur est déplacé sur une partie invisible de la ligne, l'écran défilera horizontalement. L'avantage de cette méthode est que les colonnes sont disposées telles qu'elles sont, et que les lignes dépassant de l'écran peuvent être éditées normalement. L'inconvénient est que vous ne pouvez embrasser le contenu de vos lignes en une seule fois. L'option 'sidescroll' peut être fixée au nombre minimal de colonnes à faire défiler. {Vi n'a pas d'option 'wrap'} Tous les caractères ASCII normaux sont rendus directement sur l'écran. est remplacé par le nombre d'espaces qu'il recouvre. Les autres caractères non-imprimables sont rendus par "^{car}", où {car} est le caractère non-imprimable majoré de 64. Ainsi, le caractère 7 (bip) sera rendu par "^G". Les caractères entre 127 et 160 sont eux rendus par "~{car}", où {car} est le caractère minoré de 64. Ces caractères occupant plus d'une colonne physique sur l'écran, le curseur peut être placé uniquement sur la première position. Si vous fixez l'option 'number', chaque ligne se verra précédée de son numéro. Astuce : Si vous ne voulez pas voir se mêler les lignes enroulées et les numéros de lignes, fixez l'option 'showbreak' à huit espaces, comme ceci : > :set showbreak=\ \ \ \ \ \ \ \ Si vous fixez l'option 'list', le caractère ne sera pas rendu par des espaces, mais par "^I". Un '$' sera placé en fin de ligne, de telle sorte que vous puissiez repérer des espaces superflus. En mode Ligne-de-commande, seule la ligne de commande elle-même est rendue correctement. Le contenu du tampon est redessiné dès le retour en mode Normal. La dernière ligne de la fenêtre est utilisée pour les messages d'état et autres. Les messages d'état ne seront affichés que si une option est fixée : MESSAGE D'ÉTAT OPTION DÉFAUT DÉFAUT UNIX ~ mode courant 'showmode' fixé fixé caractères de commande 'showcmd' fixé désactivé position du curseur 'ruler' désactivé désactivé Le mode courant est "-- INSERT --" ou "-- REPLACE --", voir |'showmode'|. Les caractères de commande sont ceux saisis mais non encore exécutés. {Vi ne montre pas les caractères de commande ni la position du curseur.} Si votre terminal est lent, vous pouvez désactiver ces paramètres pour accélérer l'édition : > :set nosc noru nosm En cas d'erreur, un message d'erreur sera affiché pendant une seconde au moins (en vidéo inverse). {Vi : les messages d'erreur risquent d'être effacés par d'autres messages avant que vous n'ayez pu les lire} Certaines commandes affichent le nombre de lignes modifiées. On peut préciser à partir de quel seuil ce message devra s'afficher grâce à l'option 'report' (défaut : 2). Sur Amiga, Vim s'exécutera dans une fenêtre CLI. La barre de titre affichera « Vim », suivi du nom complet du fichier courant. Lors du redimensionnement de la fenêtre, Vim la redessinera automatiquement. Vous pouvez la rendre aussi petite que vous le désirez, mais si vous exagérez, toutes les lignes dépasseront de l'écran ! Gardez au moins 40 colonnes de largeur pour pouvoir lire la plupart des messages sur la dernière ligne. Sur la plupart des systèmes Unix, le redimensionnement de la fenêtre est détecté et correctement supporté par Vim. {Vi ne le supporte pas} ============================================================================== 8. Définitions *definitions* écran Tout l'espace que Vim utilise pour son travail. Cela peut être la fenêtre d'un émulateur de terminal. Également appelé la « fenêtre Vim ». fenêtre Une vue d'un tampon. Un écran contient une ou plusieurs fenêtres, qui peuvent être séparées entre elles et avec la ligne de commande en-dessous par des lignes d'état. +---------------------------------+ écran | fenêtre 1 | fenêtre 2 | | | | | | | |= ligne d'état =|= ligne d'état =| | fenêtre 3 | | | | | |========== ligne d'état =========| | ligne de commande | +---------------------------------+ La ligne de commande est également utilisée pour les messages. Elle décale l'écran vers le haut quand elle n'a pas assez de place. Il existe quatre terminologies différentes pour les lignes : lignes de tampon Les lignes dans le tampon. Ce sont les lignes telles qu'elles sont lues/écrites dans un fichier. Elles peuvent faire des milliers de caractères. lignes logiques Les lignes de tampon dont sont ôtés les replis. Les lignes de tampon dans un repli fermé comptent pour une seule ligne logique : "+-- 99 lines folded". Elles peuvent faire des milliers de caractères. lignes de fenêtre Les lignes affichées dans une fenêtre : une plage de lignes logiques en comptant les enroulements, les césures, etc. Elles ne peuvent pas faire plus que ce que la largeur de la fenêtre permet, ce qui dépasse étant enroulé ou tronqué. lignes d'écran Les lignes d'écran utilisées par Vim : comprend les lignes de fenêtre de toutes les fenêtres, en ajoutant les lignes d'état et la ligne de commande. Elles ne peuvent pas faire plus que ce que la largeur de l'écran permet. Lorsque la ligne de commande manque de place, elle est enroulée et les lignes d'écran défilent vers le haut. LIGNES DE TAMPON LIGNES LOGIQUES LIGNES DE FENÊTRE LIGNES D'ÉCRAN ~ 1. un 1. un 1. +-- repli 1. +-- repli 2. deux 2. +-- repli 2. cinq 2. cinq 3. trois 3. cinq 3. six 3. six 4. quatre 4. six 4. sept 4. sept 5. cinq 5. sept 5. = ligne d'état = 6. six 6. aaa 7. sept 7. bbb 8. ccc ccc c 1. aaa 1. aaa 1. aaa 9. cc 2. bbb 2. bbb 2. bbb 10. ddd 3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~ 4. ddd 4. ddd 4. cc 12. = ligne d'état = 5. ddd 13. (ligne de commande) 6. ~ vim:tw=78:ts=8:ft=help:norl: