*change.txt* Pour Vim version 6.2. MANUEL de RÉFÉRENCE VIM - par Bram Moolenaar Ce fichier décrit les commandes pour effacer ou changer du texte. Dans ce contexte, « changer » du texte signifie le couper et le remplacer par un autre texte, en utilisant une commande. Toutes ces commandes peuvent être annulées. Les commandes non-Ex peuvent être répétées avec la commande ".". 1. Effacer du texte |deleting| 2. Effacer et insérer |delete-insert| 3. Changements simples |simple-change| *changing* 4. Changements complexes |complex-change| 5. Copier et déplacer du texte |copy-move| 6. Mettre en forme du texte |formatting| Pour insérer du texte, voir |insert.txt|. ============================================================================== 1. Effacer du texte *deleting* *E470* ["x] ou ** *x* *dl* ["x]x Coupe [quant] caractères sous et après le curseur [dans le registre x] (pas par lignes). Identique à "dl". La touche n'accepte pas d'argument [quant] : à la place, elle supprime le dernier caractère entré du quantificateur. Voir |:fixdel| si la touche ne se comporte pas comme souhaité. Voir |'whichwrap'| pour supprimer une coupure de ligne (fusionner). {Vi ne supporte pas } *X* *dh* ["x]X Coupe [quant] caractères avant le curseur [dans le registre x] (pas par lignes). Identique à "dh". Voir aussi |'whichwrap'|. *d* ["x]d{mouv} Coupe le texte couvert par {mouv} [dans le registre x]. Voir ci-dessous pour les exceptions. ["Delete"] *dd* ["x]dd Coupe [quant] lignes [dans le registre x] (par lignes). *D* ["x]D Coupe les caractères sous le curseur jusqu'à la fin de la ligne et de [quant] - 1 lignes supplémentaires [dans le registre x]. Synonyme de "d$". (Ne fonctionne pas par lignes.) {Visuel}["x]x ou *v_x* {Visuel}["x]d ou *v_d* *v_* {Visuel}["x] Coupe le texte en surbrillance [dans le registre x] (sur {Visuel}, voir |Visual-mode|). {absent de Vi} {Visuel}["x]CTRL-H ou *v_CTRL-H* *v_* {Visuel}["x] En mode Sélection : coupe le texte en surbrillance [dans le registre x]. {Visuel}["x]X ou *v_X* *v_D* *v_b_D* {Visuel}["x]D Coupe les lignes en surbrillance [dans le registre x] (sur {Visuel}, voir |Visual-mode|). En mode Visuel-Bloc, "D" coupe le texte en surbrillance plus tout le texte jusqu'à la fin de la ligne. {absent de Vi} *:d* *:de* *:del* *:delete* :[plage]d[elete] [x] Coupe les lignes de [plage] (défaut : ligne courante) [dans le registre x]. :[plage]d[elete] [x] {quant} Coupe {quant} lignes, en commençant à [plage] (défaut : ligne courante |cmdline-ranges|) [dans le registre x]. Toutes ces commandes coupent du texte. Vous pouvez les répéter avec la commande "." (sauf pour ":d"), ainsi que les annuler. Utilisez le mode Visuel pour couper des blocs de texte. Voir |registers| pour trouver des explications sur les registres. La commande "d{mouv}" présente une exception : si le mouvement n'est pas par lignes, que le début et la fin du mouvement ne sont pas sur la même ligne, et qu'il n'y a que des lignes blanches avant le début et après la fin du mouvement, la coupure devient par lignes. Cela signifie que sera également supprimée la ligne de blancs que vous aurez peut-être voulu laisser. Si vous essayez de couper une région vide de texte (p. ex., "d0" dans la première colonne), vous obtiendrez une erreur si 'cpoptions' contient le drapeau 'E'. *J* J Fusionne [quant] lignes, deux au minimum. Supprime l'indentation et insère jusqu'à deux espaces (voir ci-dessous). ["Join"] *v_J* {Visuel}J Fusionne les lignes en surbrillance, deux au minimum. Supprime l'indentation et insère jusqu'à deux espaces (voir ci-dessous). {absent de Vi} *gJ* gJ Fusionne [quant] lignes, deux au minimum. N'insère ni ne supprime aucun espace. {absent de Vi} *v_gJ* {Visuel}gJ Fusionne les lignes en surbrillance, deux au minimum. N'insère ni ne supprime aucun espace. {absent de Vi} *:j* *:join* :[plage]j[oin][!] Fusionne les lignes de [plage]. Comme "J", sauf qu'avec [!] la fusion n'insère ni ne supprime aucun espace. Si une [plage] a les mêmes valeurs de début et de fin, cette commande ne produit aucun effet. Le comportement par défaut est de fusionner la ligne courante avec celle du dessous. {Vi : pas de [!]} :[plage]j[oin][!] {quant} Fusionne {quant} lignes, en commençant à [plage] (défaut : ligne courante |cmdline-ranges|). Comme "J", sauf qu'avec [!] la fusion n'insère ni ne supprime aucun espace. {Vi : pas de [!]} Toutes ces commande suppriment le (fin-de-ligne) entre deux lignes. Cela a pour effet de faire fusionner plusieurs lignes en une seule. Vous pouvez répéter ces commandes (sauf ":j") et les annuler. Ces commandes, sauf "gJ", insèrent une espace à la place de , à moins qu'il n'y ait un espace blanc final avant, ou que la ligne suivante débute par un ')'. Ces commandes, sauf "gJ", suppriment tout espace blanc débutant la ligne suivante. Si l'option 'joinspaces' est activée, ces commandes insèrent deux espaces après un '.', '!' ou '?' (mais si 'cpoptions' contient le drapeau 'j', elles insèrent deux espaces après un '.' uniquement). Les drapeaux 'B' et 'M' de 'formatoptions' modifient le comportement pour insérer des espaces avant et après un caractère multi-octets |fo-table|. ============================================================================== 2. Effacer et insérer *delete-insert* *replacing* *R* R Entre en mode Remplacement : chaque caractère que vous tapez remplace un caractère existant, en débutant par le caractère sous le curseur. Répète le texte entré [quant] - 1 fois. Voir |Replace-mode| pour plus d'informations. *gR* gR Entre en mode Remplacement Virtuel : chaque caractère que vous tapez remplace des caractères existants à l'écran. Ainsi, peut remplacer plusieurs caractères en une fois. Répète le texte entré [quant] - 1 fois. Voir |Virtual-Replace-mode| pour plus d'informations. {uniquement si compilé avec la fonctionnalité |+vreplace|} *c* ["x]c{mouv} Coupe le texte couvert par {mouv} [dans le registre x] et débute l'insertion. Si 'cpoptions' contient le drapeau 'E' et qu'il n'y a pas de texte à couper (p. ex., avec "cTx" quand le curseur est juste après un "x"), une erreur se produit et le mode Insertion n'est pas lancé (c'est compatible Vi). Si 'cpoptions' ne contient pas le drapeau 'E', la commande "c" lance toujours le mode Insertion, même s'il n'y a pas de texte à couper. ["Change"] *cc* ["x]cc Coupe [quant] lignes [dans le registre x] et débute l'insertion (par lignes). Si 'autoindent' est activé, préserve l'indentation de la première ligne. *C* ["x]C Coupe depuis la position du curseur jusqu'à la fin de la ligne, et [quant] - 1 lignes supplémentaires [dans le registre x], puis débute l'insertion. Synonyme de "c$" (pas par lignes). *s* ["x]s Coupe [quant] caractères [dans le registre x] et débute l'insertion. Synonyme de "cl" (pas par lignes). ["Substitute"] *S* ["x]S Coupe [quant] lignes [dans le registre x] et débute l'insertion. Synonyme de "cc" (par lignes). {Visuel}["x]c ou *v_c* *v_s* {Visuel}["x]s Coupe le texte en surbrillance [dans le registre x] et débute l'insertion (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *v_r* {Visuel}["x]r{car} Remplace tous les caractères sélectionnés par {car}. *v_C* {Visuel}["x]C Coupe les lignes en surbrillance [dans le registre x] et débute l'insertion. Fonctionne différemment en mode Visuel-bloc |v_b_C|. {absent de Vi} *v_S* {Visuel}["x]S Coupe les lignes en surbrillance [dans le registre x] et débute l'insertion (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *v_R* {Visuel}["x]R Fonctionne actuellement comme "{Visuel}["x]S". Cette commande pourrait fonctionner différemment dans une version ultérieure. {absent de Vi} NOTES : - Vous pouvez quitter les modes Insertion et Remplacement avec . - Consultez la section « Insertion et remplacement de texte » |mode-ins-repl| pour les autres caractères spéciaux dans ces modes. - L'utilisation de [quant] prend effet après que Vim a quitté le mode Insertion ou Remplacement. - Lorsque l'option 'cpoptions' contient '$' et que le changement est à l'intérieur d'une ligne, Vim continue de montrer le texte à couper et pose un '$' sur le dernier caractère à couper. Voir |registers| pour plus d'informations sur les registres. Le mode Remplacement est similaire au mode Insertion, sauf que chaque caractère que vous entrez efface un caractère existant. Si vous atteignez la fin d'une ligne, Vim y ajoutera tous les caractères supplémentaires (comme en mode Insertion). En mode Remplacement, un retour arrière restaurera le texte original (s'il y en avait un). (Voir la section « Insertion et remplacement de texte » |mode-ins-repl|.) *cw* *cW* Cas particulier : "cw" et "cW" fonctionnent comme "ce" et "cE" si le curseur est sur un non-blanc. Cela est dû au fait que Vim interprète "cw" comme "Change Word" [« changer le mot »], et qu'un mot n'inclut pas l'espace blanc suivant. {Vi : "cw" sur un blanc suivi d'autres blancs change uniquement le premier blanc. C'est certainement un bogue, car "dw" supprime tous les blancs. Utilisez le drapeau 'w' de 'cpoptions' si vous voulez quand même conserver ce comportement} Si vous souhaitez que "cw" inclue l'espace final après un mot, utilisez ce mappage : > :map cw dwi < *:c* *:ch* *:change* :{plage}c[hange] Remplace les lignes de {plage} par un autre texte. Entrez une ligne contenant uniquement "." pour cesser le remplacement. Sans {plage}, cette commande change uniquement la ligne courante. ============================================================================== 3. Changements simples *simple-change* *r* r{car} Remplace le caractère sous le curseur par {car}. Si {car} est un ou , une coupure de ligne remplace le caractère. Pour remplacer par un vrai , utilisez "CTRL-V ". "CTRL-V " remplace par un . {Vi : "CTRL-V " remplace toujours par une coupure de ligne, et il n'est pas possible de remplacer du texte par un } Si [quant] est précisé, Vim remplace [quant] caractères par [quant] {car}s. Si {car} est un ou , Vim insère de toute façon un seul : "5r" remplace cinq caractères par une seule coupure de ligne. Si {car} est un ou , Vim gère l'auto-indentation. Cela fonctionne comme si on coupait les caractères qui sont remplacés puis faisait "i". {car} peut être entré comme un digramme |digraph-arg|. Les mappages |:lmap| s'appliquent à {car}. La commande CTRL-^ en mode Insertion peut être utilisée pour activer ou désactiver ce comportement |i_CTRL-^|. Voir |utf-8-char-arg| pour utiliser des caractères de composition lorsque 'encoding' vaut "unicode". *gr* gr{car} Remplace les caractères virtuels sous le curseur par {car}. Cela remplace l'état visible à l'écran, pas l'état dans le fichier. Voir |gR| et |Virtual-Replace-mode| pour plus d'informations. Comme pour |r|, un quantificateur peut être précisé. {car} peut être entré comme avec |r|. {uniquement si compilé avec la fonctionnalité |+vreplace|} *digraph-arg* L'argument pour les commandes du mode Normal comme |r| et |t| est un caractère unique. Lorsque 'cpoptions' ne contient pas le drapeau 'D', ce caractère peut également être entré comme un digramme |digraphs|. Tapez d'abord CTRL-K, suivi des deux caractères du digramme. {uniquement si compilé avec la fonctionnalité |+digraphs|} *case* Les commandes suivantes changent la casse des lettres. Votre région linguistique courante (voir |locale|) est utilisée. Voir aussi |:language|. La valeur de LC_CTYPE est ici prise en compte. *~* ~ 'tildeop' désactivé : inverse la casse du caractère sous le curseur et déplace le curseur au caractère suivant. Si [quant] est donné, applique le changement à plusieurs caractères. {Vi : pas de quantificateur} ~{mouv} 'tildeop' activé : inverse la casse du texte couvert par la {mouv}. {Vi : le tilde ne peut pas être utilisé comme un opérateur} *g~* g~{mouv} Inverse la casse du texte couvert par la {mouv}. {absent de Vi} g~g~ ou *g~g~* *g~~* g~~ Inverse la casse de la ligne courante. {absent de Vi} *v_~* {Visuel}~ Inverse la casse du texte en surbrillance (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *v_U* {Visuel}U Passe le texte en surbrillance en majuscules (sur {Visuel}, voir |Visual-mode|). {absent de Vi} ["Uppercase"] *gU* *uppercase* gU{mouv} Passe le texte couvert par {mouv} en majuscules. {absent de Vi} Exemple : > :map! gUiw`]a < Cela fonctionne en mode Insertion : pressez CTRL-F pour passer le mot avant le curseur en majuscules. Pratique pour taper des mots en minuscules et les passer en majuscules. gUgU ou *gUgU* *gUU* gUU Passe la ligne courante en majuscules. {absent de Vi} *v_u* {Visuel}u Passe le texte en surbrillance en minuscules (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *gu* *lowercase* gu{mouv} Passe le texte couvert par {mouv} en minuscules. {absent de Vi} gugu ou *gugu* *guu* guu Passe la ligne courante en minuscules. {absent de Vi} *g?* *rot13* g?{mouv} Code le texte couvert par {mouv} avec Rot13. {absent de Vi} *v_g?* {Visuel}g? Code le texte en surbrillance avec Rot13 (sur {Visuel}, voir |Visual-mode|). {absent de Vi} g?g? ou *g?g?* *g??* g?? Code la ligne courante avec Rot13. {absent de Vi} ADDITIONNER ET SOUSTRAIRE *CTRL-A* CTRL-A Ajoute [quant] au nombre ou caractère alphabétique sous ou après le curseur. {absent de Vi} *CTRL-X* CTRL-X Soustrait [quant] du nombre ou caractère alphabétique sous ou après le curseur. {absent de Vi} Les commandes CTRL-A et CTRL-X fonctionnent sur des nombres décimaux (signés), sur des nombres octaux ou hexadécimaux non-signés, et sur des caractères alphabétiques. Cela dépend de l'option 'nrformats'. - Si 'nrformats' contient "alpha", Vim modifiera le caractère alphabétique sous ou après le curseur. C'est utile pour dresser une liste avec numérotation alphabétique. - Si 'nrformats' contient "hex", Vim considère les nombres débutant par "0x" ou '0X' comme hexadécimaux. La casse de la lettre la plus à droite dans le nombre détermine la casse du nombre hexadécimal résultant. S'il n'y a pas de lettre dans le nombre courant, Vim utilise la précédente casse détectée. - Si 'nrformats' contient "octal", Vim considère les nombres débutant par "0" comme octaux. Les autres nombres sont décimaux et peuvent être précédés par un signe moins. Si le curseur est sur un nombre, les commandes s'appliquent à ce nombre ; sinon, Vim utilise le nombre à la droite du curseur. Pour les nombres débutant par des zéros (cela inclut les nombres octaux et hexadécimaux), Vim essaiera de préserver le nombre de caractères lorsque ce sera possible. CTRL-A sur "0077" donnera "0100", CTRL-X sur "0x100" donnera "0x0ff". NOTE : Si 'nrformats' contient "octal", il est impossible d'avoir des nombres décimaux débutant par des zéros car ils seraient indistinguables des nombres octaux. La commande CTRL-A est très utile dans une macro. Exemple : suivez le schéma suivant pour créer une liste numérotée. 1. Créer la première entrée de la liste, en s'assurant qu'elle débute bien par un nombre. 2. qa - débuter l'enregistrement dans le registre 'a' 3. Y - copier l'entrée 4. p - coller la copie de l'entrée sous la première 5. CTRL-A - incrémenter la numérotation 6. q - cesser l'enregistrement 7. @a - répéter la copie, coller et incrémenter fois DÉCALER DES LIGNES À GAUCHE OU À DROITE *shift-left-right* *<* <{mouv} Décale les lignes couvertes par {mouv} de 'shiftwidth' à gauche. *<<* << Décale [quant] lignes de 'shiftwidth' à gauche. *v_<* {Visuel}[quant]< Décale les lignes en surbrillance de [quant] 'shiftwidth' à gauche (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *>* >{mouv} Décale les lignes couvertes par {mouv} de 'shiftwidth' à droite. *>>* >> Décale [quant] lignes de 'shiftwidth' à droite. *v_>* {Visuel}[quant]> Décale les lignes en surbrillance de [quant] 'shiftwidth' à droite (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *:<* :[plage]< Décale les lignes de [plage] de 'shiftwidth' à gauche. Indiquez plusieurs '<' pour décaler de plusieurs 'shiftwidth'. :[plage]< {quant} Décale {quant} lignes de 'shiftwidth' à gauche, en commençant à [plage] (défaut : ligne courante |cmdline-ranges|). Indiquez plusieurs '<' pour décaler de plusieurs 'shiftwidth'. :[plage]le[ft] [indent] Aligne à gauche les lignes de [plage]. Fixe l'indentation de ces lignes à [indent] (défaut : 0). {absent de Vi} *:>* :[plage]> Décale les lignes de [plage] de 'shiftwidth' à droite. Indiquez plusieurs '<' pour décaler de plusieurs 'shiftwidth'. :[plage]> {quant} Décale {quant} lignes de 'shiftwidth' à droite, en commençant à [plage] (défaut : ligne courante |cmdline-ranges|). Indiquez plusieurs '<' pour décaler de plusieurs 'shiftwidth'. Les commandes ">" et "<" sont commodes pour modifier l'indentation à l'intérieur des programmes. Utilisez l'option 'shiftwidth' pour fixer la taille de l'espace blanc que ces commandes insèrent ou suppriment. Normalement, l'option 'shiftwidth' vaut 8, mais vous pouvez la fixer, par exemple, à 3 pour obtenir de petites indentations. Le décalage à gauche cesse lorsqu'il n'y a plus d'indentation. Le décalage à droite n'affecte pas les lignes vides. Si l'option 'shiftround' est activée, l'indentation utilisée sera un multiple de 'shiftwidth'. Si l'option 'smartindent' est activée, ou que 'cindent' est activé et que 'cinkeys' contient '#', le décalage à droite n'affectera pas les lignes débutant par '#' (qui sont censées être des instructions pour le préprocesseur C et doivent rester dans la colonne 1). Si l'option 'expandtab' est désactivée (ce qui est le cas par défaut), Vim utilise les ulations autant que possible dans l'indentation. Vous pouvez utiliser ">><<" pour remplacer une indentation composée d'espaces par la même indentation composée de ulations (plus quelques espaces si nécessaire). Si l'option 'expandtab' est activée, Vim utilise uniquement des espaces. Vous pouvez alors utiliser ">><<" pour remplacer les ulations dans une indentation par des espaces (ou utiliser ":retab!"). Pour décaler une ligne de plusieurs 'shiftwidth', utilisez le mode Visuel ou les commandes ":". Par exemple : > Vjj4> décale 3 lignes de 4 indentations à droite :<<< décale la ligne courante de 3 indentations à gauche :>> 5 décale 5 lignes de 2 indentations à droite :5>> décale la ligne 5 de 2 indentations à droite ============================================================================== 4. Changements complexes *complex-change* *!* *filter* !{mouv}{filtre} Filtre les lignes de texte couvertes par {mouv} avec le programme externe {filtre}. *!!* !!{filtre} Filtre [quant] lignes avec le programme externe {filtre}. *v_!* {Visuel}!{filtre} Filtre les lignes en surbrillance avec le programme externe {filtre} (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *:range!* :{plage}![!]{filtre} [!][arg] Filtre les lignes de {plage} avec le programme externe {filtre}. Vim remplace les points d'exclamation optionnels par le dernier argument donné et ajoute l'[arg] optionnel. Vim enregistre la sortie de la commande de filtre dans un fichier temporaire, puis lit le fichier dans le tampon. Vim utilise l'option 'shellredir' pour rediriger la sortie du filtre vers le fichier temporaire. *=* ={mouv} Filtre les lignes couvertes par {mouv} avec le programme externe donné par l'option 'equalprg'. Si l'option 'equalprg' est vide (ce qui est le cas par défaut), la fonction interne de mise en forme est utilisée |C-indenting|. Mais si 'indentexpr' est non-vide, il sera utilisé à la place |indent-expression|. *==* == Filtre [quant] lignes comme avec "={mouv}". *v_=* {Visuel}= Filtre les lignes en surbrillance comme avec "={mouv}". {absent de Vi} Un filtre est un programme qui accepte du texte sur son entrée standard, le modifie d'une certaine façon et le renvoie sur sa sortie standard. Vous pouvez utiliser les commandes ci-dessus pour envoyer du texte à un filtre. Les programmes `sort` (qui trie les lignes par ordre alphabétique) et `indent` (qui met en forme des sources C) sont deux exemples de filtres communs (vous devrez utiliser une version de `indent` qui fonctionne comme un filtre, ce qui n'est pas le cas de toutes). L'option 'shell' définit le shell utilisé par Vim pour exécuter la commande de filtre (voir aussi l'option 'shelltype'). Les commandes de filtres peuvent être répétées avec ".". Vim ne reconnaîtra pas de commentaire (débutant par '"') après une commande ":!". *:s* *:su* *:substitute* :[plage]s[ubstitute]/{motif}/{chaine}/[&][c][e][g][p][r][i][I] [quant] Pour chaque ligne de [plage], remplace une correspondance de {motif} par {chaine}. Pour le {motif}, voir |pattern|. {chaine} peut être une chaîne littérale, ou contenir des caractères spéciaux. Voir |sub-replace-special|. Si [plage] et [quant] sont omis, remplace dans la ligne courante uniquement. Si [quant] est donné, remplace dans [quant] lignes, en commençant par la dernière ligne de [plage]. Si [plage] est omis, commence à la ligne courante. Voir aussi |cmdline-ranges|. Voir |:s_flags| pour les drapeaux. :[plage]s[ubstitute] [c][e][g][p][r][i][I] [quant] :[plage]&[&][c][e][g][p][r][i][I] [quant] *:&* Répète le dernier ":substitute" avec le même motif de recherche et la même chaîne de substitution, mais des drapeaux différents. Vous pouvez ajouter des drapeaux supplémentaires (voir |:s_flags|). NOTE : Après ":substitute", le drapeau '&' ne peut pas être utilisé car '&' sert de séparateur de motif. L'espace entre ":substitute" et les drapeaux 'c', 'g' et 'r' n'est pas nécessaire, mais il est plus prudent de le garder dans les scripts afin d'éviter toute confusion. *:~* :[plage]~[&][c][e][g][p][r][i][I] [quant] Répète la dernière substitution avec la même chaîne de substitution mais avec le dernier motif de recherche utilisé. Identique à ":&r". Voir |:s_flags| pour les drapeaux. *&* & Synonyme de ":s//~/" (répète la dernière substitution). NOTE : Les drapeaux ne sont pas mémorisés, cette commande pourrait donc en fait fonctionner différemment. Vous pouvez utiliser ":&&" pour conserver les drapeaux. *g&* g& Synonyme de ":%s//~/&" (répète la dernière substitution sur toutes les lignes avec les mêmes drapeaux). {absent de Vi} ["Global substitute"] *:snomagic* :[plage]sno[magic] ... Comme ":substitute", mais utilise toujours 'nomagic'. {absent de Vi} *:smagic* :[plage]sm[agic] ... Comme ":substitute", mais utilise toujours 'magic'. {absent de Vi} *:s_flags* Les drapeaux utilisables dans une commande de substitution : [&] Doit venir en premier : conserve les drapeaux de la précédente commande de substitution. Exemples : > :&& :s/ceci/cela/& < NOTE : ":s" et ":&" ne mémorisent pas les drapeaux. {absent de Vi} [c] Confirme chaque substitution. Vim met en surbrillance la chaîne correspondante (avec |hl-IncSearch|). Vous pouvez taper : *:s_c* 'y' pour remplacer cette correspondance ["Yes"] 'l' pour remplacer cette correspondance puis quitter ["Last"] 'n' pour sauter cette correspondance pour quitter la substitution 'a' pour remplacer cette correspondance et toutes celles qui suivent {absent de Vi} ["All"] 'q' pour quitter la substitution {absent de Vi} CTRL-E pour faire défiler le texte vers le haut {absent de Vi} {uniquement si compilé avec la fonctionnalité |+insert_expand|} CTRL-Y pour faire défiler le texte vers le bas {absent de Vi} {uniquement si compilé avec la fonctionnalité |+insert_expand|} Si l'option 'edcompatible' est activée, Vim mémorise le drapeau 'c' et l'utilise à chaque fois, mais le désactive si vous donnez un nouveau motif de recherche. {Vi : la surbrillance des correspondances et les réponses autres que 'y' ou 'n' sont absentes} [e] Lorsque le motif de recherche n'est pas trouvé, n'affiche pas de message d'erreur, et en particulier, termine un mappage normalement. C'est surtout utile afin d'éviter qu'une erreur "No match" [« Pas de correspondance »] n'interrompe un mappage. Cela ne supprime cependant pas le messages d'erreurs suivants : Regular expressions can't be delimited by letters ~ \ should be followed by /, ? or & ~ No previous substitute regular expression ~ Trailing characters ~ Interrupted ~ {absent de Vi} [g] Remplace toutes les occurrences dans la ligne. Sans cet argument, le remplacement opère uniquement sur la première occurrence dans chaque ligne. Si l'option 'edcompatible' est activée, Vim mémorise ce drapeau et l'utilise à chaque fois, mais le désactive si vous donnez un nouveau motif de recherche. Si l'option 'gdefault' est activée, ce drapeau est actif par défaut et l'argument [g] le rendra inactif. ["Global"] [i] Ignore la casse du motif. Les options 'ignorecase' et 'smartcase' ne sont pas utilisées. {absent de Vi} [I] Respecte la casse du motif. Les options 'ignorecase' et 'smartcase' ne sont pas utilisées. {absent de Vi} [p] Affiche la ligne contenant la dernière substitution. ["Print"] {absent de Vi} [r] Utile uniquement avec ":&" ou ":s" sans autres arguments. ":&r" est identique à ":~" : lorsque le motif de recherche est vide, le dernier motif de recherche utilisé est pris au lieu du motif de recherche de la dernière commande de substitution ou ":global". Si la dernière commande de recherche était une substitution ou un ":global", il ne se produit rien ; si c'était une commande comme "/", le motif de cette commande est utilisé. Pour ":s" avec un argument, cela se produit déjà : > :s/bleu/rouge/ /vert :s//rouge/ ou :~ ou :&r < Les dernières commandes remplaceront "vert" par "rouge". > :s/bleu/rouge/ /vert :& < La dernière commande remplacera "bleu" par "rouge". {absent de Vi} NOTE : Il n'y a pas de drapeau pour changer la « magicité » du motif : une commande différente est utilisée à la place. La raison en est que les drapeaux ne peuvent être trouvés qu'après avoir passé le motif, et pour qu'on puisse le passer, il faut connaître sa « magicité ». On tournerait en rond ! Si le {motif} de la commande de substitution est vide, la commande utilise le motif de la dernière commande de substitution ou ":global". Avec le drapeau [r], la commande utilise le motif de la dernière commande de substitution, ":global", ou de recherche. Pour des raisons de compatibilité avec Vi, deux exceptions sont admises : "\/{chaine}/" et "\?{chaine}?" fonctionnent comme "//{chaine}/r". "\&{chaine}&" fonctionne comme "//{chaine}/". *E146* À la place du '/' qui encadre le motif de recherche et la chaîne de remplacement, vous pouvez utiliser n'importe quel autre caractère sauf un alphanumérique, '\', '"' ou '|'. C'est utile si vous souhaitez inclure un '/' dans le motif de recherche ou dans la chaîne de remplacement. Exemple : > :s+/+//+ Pour la définition d'un motif, voir |pattern|. *sub-replace-special* Lorsque la {chaine} débute par "\=", elle est évaluée en tant qu'expression. La signification spéciale des caractères mentionnés ci-dessous ne s'applique pas alors, sauf pour "", "\" et "\\". Ainsi, dans l'expression, vous devrez utiliser deux contre-obliques pour en obtenir une, placer une contre-oblique avant un que vous voulez insérer et utiliser un sans contre-oblique si vous souhaitez couper la ligne. Le motif correspondant entier peut être spécifié par "submatch(0)" ; le motif correspondant dans la première paire de (), par "submatch(1)" ; et ainsi de suite pour les sous-correspondances suivantes dans (). ATTENTION : Le caractère de séparation ne doit pas apparaître dans l'expression ! Utilisez plutôt un caractère comme "@" ou ":". Il n'y a pas de problème si le résultat de l'expression contient le caractère de séparation. Exemple : > :s@\n@\="\r" . expand("$HOME") . "\r"@ Ceci remplace une fin-de-ligne par une nouvelle ligne contenant la valeur de $HOME. Certains caractères ont une signification spéciale pour la {chaine} : 'magic' 'nomagic' ACTION ~ & \& remplacé par le motif correspondant entier *s/\&* \& & remplacé par '&' \0 remplacé par le motif correspondant entier *\0* *s/\0* \1 remplacé par le motif correspondant dans la *s/\1* 1ère paire de () \2 remplacé par le motif correspondant dans la *s/\2* 2e paire de () ... ... *s/\3* \9 remplacé par le motif correspondant dans la *s/\9* 9e paire de () ~ \~ remplacé par la {chaine} de la substitution *s~* précédente \~ ~ remplacé par '~' *s/\~* \u le caractère suivant est mis en majuscule *s/\u* ["Uppercase"] \U les caractères suivants sont mis en majuscules, *s/\U* jusqu'à \E \l le caractère suivant est mis en minuscule *s/\l* ["Lowercase"] \L les caractères suivants sont mis en minuscules, *s/\L* jusqu'à \E \e fin de \u, \U, \l et \L (NOTE : ne correspond *s/\e* pas à !) ["End"] \E fin de \u, \U, \l et \L *s/\E* coupe la ligne en deux à cet endroit (entrez *s* avec "CTRL-V ") \r idem *s/\r* \ insère un retour chariot (CTRL-M) (entrez *s/\* avec "CTRL-V ") \n insère un ( dans le fichier) *s/\n* (ne coupe PAS la ligne) \b insère un retour arrière *s/\b* ["Backspace"] \t insère une tabulation *s/\t* \\ insère une contre-oblique simple ('\') *s/\\* \x où x désigne n'importe quel caractère non mentionné ci-dessus : réservé pour une utilisation future Exemples : > :s/a\|b/xxx\0xxx/g remplace "a b" par "xxxaxxx xxxbxxx" :s/\([abc]\)\([efg]\)/\2\1/g remplace "af fa bg" par "fa fa gb" :s/abcde/abc^Mde/ remplace "abcde" par "abc", "de" (2 lignes) :s/$/\^M/ remplace "abcde" par "abcde^M" NOTE : Dans les versions précédentes, CTRL-V fonctionnait d'une manière spéciale. Comme ce comportement n'était pas compatible Vi, il a été supprimé. Utilisez une contre-oblique à la place. COMMANDE TEXTE RÉSULTAT ~ :s/aa/a^Ma/ aa aa :s/aa/a\^Ma/ aa a^Ma :s/aa/a\\^Ma/ aa a\a (Tapez "CTRL-V " pour obtenir un ^M ici.) La numérotation de "\1", "\2" etc. est faite selon l'ordre d'apparition des "\(" dans le motif (de gauche à droite). Lorsqu'un groupe entre parenthèses a plusieurs correspondances, c'est la dernière qui sera utilisé pour "\1", "\2", etc. Exemple : > :s/\(\(a[a-d] \)*\)/\2/ remplace "aa ab x" par "ab x" Si vous utilisez des "\(" en association avec des "\|", comme dans "\([ab]\)\|\([cd]\)", suivant que le premier ou le second motif entre parenthèses ne correspondra pas, alors "\1" ou "\2" sera vide. Exemple : > :s/\([ab]\)\|\([cd]\)/\1x/g remplace "a b c d" par "ax bx x x" < *:pro* *:promptfind* :promptf[ind] [chaine] Ouvre un dialogue de recherche. Si [chaine] est donné, il est utilisé comme chaîne de recherche initiale. {uniquement pour les IHM graphiques Win32, Motif et GTK+} *:promptr* *:promptrepl* :promptr[epl] [chaine] Ouvre un dialogue de recherche/substitution. Si [chaine] est donné, il est utilisé comme chaîne de recherche initiale. {uniquement pour les IHM graphiques Win32, Motif et GTK+} *:ret* *:retab* :[plage]ret[ab][!] [nv_tabstop] Remplace toutes les séquences d'espaces blancs contenant un avec de nouvelles chaînes d'espaces blancs utilisant la valeur de 'tabstop' donnée. Si vous ne spécifiez pas de nouvelle valeur de 'tabstop', ou que vous spécifiez zéro, la valeur courante est utilisée. Cette valeur courante est toujours utilisée pour déterminer la largeur des tabulations existantes. Avec [!], Vim remplace également les chaînes composées exclusivement d'espaces normaux par des tabulations appropriées. Si 'expandtab' est activé, Vim remplace toutes les tabulations par le nombre d'espaces approprié. Cette commande fixe 'tabstop' à la nouvelle valeur saisie, et si elle s'exécute sur le fichier entier, ce qui est le cas par défaut, elle ne devrait produire aucun changement visible. ATTENTION : Cette commande modifiera tous les caractères à l'intérieur des chaînes dans un programme C. Utilisez "\t" pour éviter cela (c'est une bonne habitude, de toute façon). ":retab!" peut également changer une séquence d'espaces en caractères , ce qui pourra corrompre une instruction "printf()". {absent de Vi} {uniquement si compilé avec la fonctionnalité |+ex_extra|} *retab-example* Voici un exemple pour utiliser ":retab" avec des autocommandes afin d'écrire un fichier avec 'tabstop' valant 8 mais de l'éditer avec 'tabstop' valant 4. ATTENTION : Les espaces blancs à l'intérieur des chaînes pourront être affectés ! Voir aussi 'softtabstop'. > :au BufReadPost *.xyz retab! 4 :au BufWritePre *.xyz retab! 8 :au BufWritePost *.xyz retab! 4 :au BufNewFile *.xyz set ts=4 ============================================================================== 5. Copier et déplacer du texte *copy-move* *quote* "{a-zA-Z0-9.%#:-"} Utilise le registre {a-zA-Z0-9.%#:-"} pour le prochain couper-copier-coller (les caractères majuscules servent à ajouter avec les commandes couper et copier ; les caractères {.%#:} fonctionnent uniquement avec un collage). *:reg* *:registers* :reg[isters] Affiche le contenu de tous les registres numérotés et nommés. {absent de Vi} :reg[isters] {arg} Affiche le contenu de tous les registres numérotés et nommés mentionnés dans {arg}. Par exemple > :dis 1a < affiche le contenu des registres '1' et 'a'. Les espaces sont admis dans {arg}. {absent de Vi} *:di* *:display* :di[splay] [arg] Comme ":registers". {absent de Vi} *y* *yank* ["x]y{mouv} Copie le texte couvert par {mouv} [dans le registre x]. S'il n'y a aucun caractère à copier (p. ex., "y0" dans la colonne 1), renvoie une erreur si 'cpoptions' contient le drapeau 'E'. ["Yank"] *yy* ["x]yy Copie [quant] lignes [dans le registre x] (par lignes). *Y* ["x]Y Copie [quant] lignes [dans le registre x] (synonyme de "yy", par lignes). Si vous préférez que "Y" fonctionne depuis le curseur jusqu'à la fin de la ligne (ce qui est plus logique, mais pas compatible Vi), utilisez : > :map Y y$ < *v_y* {Visuel}["x]y Copie le texte en surbrillance [dans le registre x] (sur {Visuel}, voir |Visuel-mode|). {absent de Vi} *v_Y* {Visuel}["x]Y Copie les lignes en surbrillance [dans le registre x] (sur {Visuel}, voir |Visual-mode|). {absent de Vi} *:y* *:yank* :[plage]y[ank] [x] Copie les lignes de [plage] [dans le registre x]. :[plage]y[ank] [x] {quant} Copie {quant} lignes, en commençant par le dernier numéro de ligne dans [plage] (défaut : ligne courante |cmdline-ranges|) [dans le registre x]. *p* *put* *E353* ["x]p Colle le texte [du registre x] après le curseur [quant] fois. {Vi : pas de quantificateur} ["Put"] *P* ["x]P Colle le texte [du registre x] avant le curseur [quant] fois. {Vi : pas de quantificateur} ** ["x] Colle le texte d'un registre avant le curseur [quant] fois. Utilise le registre "*, à moins qu'un autre ne soit spécifié. L'utilisation de la souris fonctionnera uniquement si 'mouse' contient 'n' ou 'a'. Si votre souris dispose d'une molette et que vous collez souvent du texte accidentellement, vous pouvez utiliser ces mappages pour désactiver le collage avec le bouton du milieu : > :map :imap < {absent de Vi} *gp* ["x]gp Comme "p", mais déplace le curseur juste après le nouveau texte. {absent de Vi} *gP* ["x]gP Comme "P", mais déplace le curseur juste après le nouveau texte. {absent de Vi} *:pu* *:put* :[ligne]pu[t] [x] Colle le texte [du registre x] après [ligne] (défaut : ligne courante). Fonctionne toujours par lignes, ainsi cette commande peut être utilisée pour coller un bloc copié comme de nouvelles lignes. Le registre peut aussi être '=', suivi par une expression optionnelle. L'expression se poursuit jusqu'à la fin de la commande. Vous devrez masquer '|' et '"' avec un caractère d'échappement afin d'éviter qu'ils ne terminent la commande. Exemple : > :put ='path' . \",/test\" < S'il n'y a pas d'expression après '=', Vim utilise l'expression précédente. Vous pouvez la voir avec ":dis =". :[ligne]pu[t]! [x] Colle le texte [du registre x] avant [ligne] (défaut : ligne courante). ["x]]p ou *]p* *]* ["x]] Comme "p", mais ajuste l'indentation à la ligne courante. L'utilisation de la souris fonctionnera uniquement si 'mouse' contient 'n' ou 'a'. {absent de Vi} ["x][P ou *[P* ["x]]P ou *]P* ["x][p ou *[p* *[* ["x][ Comme "P", mais ajuste l'indentation à la ligne courante. L'utilisation de la souris fonctionnera uniquement si 'mouse' contient 'n' ou 'a'. {absent de Vi} Vous pouvez utiliser ces commandes pour copier du texte d'un endroit vers un autre. Pour cela, placez d'abord le texte dans un registre avec une commande copier, couper ou changer, puis insérez le contenu du registre avec une commande coller. Vous pouvez également utiliser ces commandes pour déplacer du texte d'un fichier vers un autre, Vim conservant tous les registres lors d'un changement de tampon (la commande CTRL-^ permet de passer rapidement d'une fichier à l'autre). *linewise-register* *characterwise-register* Vous pouvez répéter les commandes de collage avec "." (excepté ":put") et les annuler. Si la commande utilisée pour placer le texte dans le registre était par lignes, Vim insérera le texte en dessous ("p") ou au-dessus ("P") de la ligne courante. Sinon Vim insérera le texte après ("p") ou avant ("P") le curseur. Avec la commande ":put", Vim insérera toujours le texte sur la ligne suivante. Vous pouvez permuter deux caractères avec la séquence de commandes "xp". Vous pouvez permuter deux lignes avec la séquence de commandes "ddp". Vous pouvez permuter deux mots avec la séquence de commandes "deep" (placez auparavant le curseur sur l'espace blanc précédent le premier mot). Vous pouvez utiliser les commandes "']" ou "`]" après la commande de collage pour déplacer le curseur à la fin du texte inséré, ou bien "'[" ou "`[" pour déplacer le curseur au début. *put-Visual-mode* *v_p* *v_P* Si vous utilisez une commande de collage comme |p| ou |P| en mode Visuel, Vim essaiera de remplacer le texte sélectionné par le contenu du registre. Cela fonctionne plus ou moins bien selon le type de sélection et le type de texte dans le registre. Avec une sélection par blocs, cela dépend en outre de la taille du bloc et du positionnement des coins sur un caractère existant. (Détail technique : cela fonctionne en fait en collant d'abord le registre après la sélection, puis en coupant la sélection.) *blockwise-register* Si vous utilisez une commande par blocs en mode Visuel pour placer le texte dans le registre, le bloc de texte sera inséré avant ("P") ou après ("p") la colonne du curseur dans les lignes courante et suivantes. Vim fait débuter tout le bloc de texte dans la même colonne. Ainsi, le texte inséré a la même apparence que lorsqu'il avait été copié ou coupé (Vim peut pour cela remplacer des par des espaces). Cependant, si la largeur du bloc n'est pas un multiple de la largeur d'une tabulation et que le texte après le bloc inséré contient des tabulations, ce texte pourra être mal aligné. NOTE : Après une commande de copie, Vim laisse le curseur sur le premier caractère copié qui est le plus proche du début du tampon. Cela signifie que "yl" ne déplace pas le curseur, mais que "yh" le déplace d'un caractère vers la gauche. Remarque : Dans Vi, la commande "y" suivie par un mouvement vers l'arrière ne déplace parfois pas le curseur sur le premier caractère copié, car le rafraîchissement a été sauté. Dans Vim, elle déplace toujours sur le premier caractère, conformément aux spécifications Posix. LES TYPES DE REGISTRES *registers* *E354* Il existe neuf types de registres : 1. Le registre sans nom "" ; 2. Les 10 registres numérotés de "0 à "9 ; 3. Le registre de petit coupage "- ; 4. Les 26 registres nommés de "a à "z ou de "A à "Z ; 5. Les 4 registres en lecture seule ":, "., "% et "# ; 6. Le registre d'expression "= ; 7. Les registres de sélection et de dépôt "*, "+ et "~ ; 8. Le registre trou noir "_ ; 9. Le registre du dernier motif de recherche "/. 1. Le registre sans nom "" *quote_quote* *quotequote* -------------------------- Vim mémorise dans ce registre le texte coupé par les commandes "d", "c", "s", "x", ou copié par la commande "y", si aucun registre spécifique n'a été utilisé (p. ex. "xdd). Le registre "_ fait exception : "_dd ne mémorise le texte coupé dans aucun registre. Vim utilise le contenu de ce registre pour toute commande de collage ("p" ou "P") qui ne spécifie aucun registre. De plus, vous pouvez y accéder par le nom "" (deux doubles-apostrophes). Si vous essayez d'écrire dans le registre "", cela écrira dans le registre "0. {Vi : le contenu du registre est perdu lors d'un changement de fichier ; le nom "" est absent} *quote_number* *quote0* *quote1* 2. Les registres numérotés de "0 à "9 *quote2* *quote3* *quote4* *quote9* ------------------------------------- Vim mémorise dans ces registres le texte des commandes couper/copier. Le registre "0 contient le texte de la commande de copie la plus récente, sauf si cette commande a spécifié un autre registre avec ["x]. Le registre "1 contient le texte coupé par la commande de coupage ou de changement la plus récente, sauf si cette commande a spécifié un autre registre ou que le texte fait moins d'une ligne (le registre de petit coupage est alors utilisé). Une exception est faite pour ces commandes : |%|, |(|, |)|, |`|, |/|, |?|, |n|, |N|, |{| et |}|. Le registre "1 est toujours utilisé alors (cela est compatible Vi). Le registre "- sera tout de même utilisé si le coupage est à l'intérieur d'une ligne. Après tout nouveau coupage ou changement, Vim décale le précédent contenu du registre "1 à "2, de "2 à "3, et ainsi de suite. (Le précédent contenu du registre "9 est donc perdu.) {Vi : le contenu des registres numérotés est perdu lors d'un changement de fichier ; le registre "0 n'existe pas} 3. Le registre de petit coupage "- *quote_-* *quote-* ---------------------------------- Ce registre contient le texte de la dernière commande qui a coupé moins d'une ligne, sauf si cette commande a spécifié un registre avec ["x]. {absent de Vi} 4. Les registres nommés de "a à "z ou "A à "Z *quote_alpha* *quotea* --------------------------------------------- Vim mémorise dans ces registres uniquement si vous le lui ordonnez. Utilisez les minuscules pour remplacer le contenu précédent ou les majuscules pour ajouter au contenu précédent. 5. Les registres en lecture seule ":, "., "% et "# -------------------------------------------------- Vous pouvez les utiliser avec les commandes "p", "P" et ":put" et avec CTRL-R. {absent de Vi} *quote_.* *quote.* *E29* ". Contient le dernier texte inséré (le même qui est inséré avec les commandes du mode Insertion CTRL-A et CTRL-@). NOTE : Pour CTRL-R à la ligne de commande, cela fonctionne un peu différemment, comme une insertion de texte au lieu d'un collage ('textwidth' et d'autres options affectent ce qui est inséré). *quote_%* *quote%* "% Contient le nom du fichier courant. *quote_#* *quote#* "# Contient le nom du fichier alternatif. *quote_:* *quote:* *E30* ": Contient la dernière ligne de commande exécutée. Exemple : Utilisez "@:" pour répéter la précédente ligne de commande. La ligne de commande est mémorisée dans ce registre si au moins un caractère en a été tapé. Ainsi, il reste inchangé si la commande provient entièrement d'un mappage. {uniquement si compilé avec la fonctionnalité |+cmdline_hist|} 6. Le registre d'expression "= *quote_=* *quote=* ------------------------------ Ce n'est pas vraiment un registre qui mémorise du texte, mais c'est un moyen pour utiliser une expression dans les commandes qui appellent un registre. Le registre d'expression est en lecture seule ; vous ne pouvez pas écrire dedans. Après le '=', le curseur se déplace sur la ligne de commande, où vous pouvez entrer une expression (voir |expression|). Toutes les commandes d'édition normales de la ligne de commande sont disponibles, avec un historique spécial pour les expressions. Lorsque vous terminez la ligne de commande en tapant , Vim évalue le résultat de l'expression. Si vous la terminez avec , Vim abandonne l'expression. Si vous n'entrez pas d'expression, Vim utilise l'expression précédente (comme avec la commande "/"). Si le registre "= est utilisé pour la commande "p", la chaîne est coupée aux caractères . Si la chaîne se termine par , le registre est considéré par lignes. {absent de Vi} 7. Les registres de sélection et de dépôt "*, "+ et "~ ------------------------------------------------------ Utilisez ces registres pour mémoriser une sélection dans l'IHM graphique. Voir |quotestar| et |quoteplus|. Lorsque le presse-papiers n'est pas disponible ou ne fonctionne pas, le registre sans nom est utilisé à la place. {absent de Vi} NOTE : Il existe une différence entre les registres "* et "+ uniquement pour les systèmes X11. Pour un détail de ces différences, voir |x11-selection|. Sous MS-Windows, les registres "* et "+ sont en fait synonymes et se rapportent au presse-papiers de l'IHM graphique |gui-clipboard|. *quote_~* *quote~* ** Le registre en lecture seule "~ mémorise le texte déposé lors de la dernière opération de glisser-déposer. Lorsque quelque chose est déposé dans Vim, le registre "~ est automatiquement rempli et la pseudo-touche is sent for notification. XXX Vous pouvez remapper cette touche si vous le souhaitez ; par défaut (dans tous les modes), elle insère le contenu du registre "~ à l'emplacement du curseur. {absent de Vi} {uniquement si compilé avec la fonctionnalité |+dnd|, actuellement uniquement dans l'IHM graphique GTK+} NOTE : Le registre "~ n'est utilisé que lorsque du texte brut est déposé dans Vim. Le glisser-déposer de listes URI XXX est géré en interne. 8. Le registre trou noir "_ *quote_* --------------------------- Si vous écrivez dans ce registre, rien ne se produit. Vous pouvez l'utiliser pour couper du texte sans affecter les registres normaux. Si vous essayez de lire depuis ce registre, rien ne sera retourné. {absent de Vi} 9. Le registre du dernier motif de recherche "/ *quote_/* *quote/* ----------------------------------------------- Contient le motif de recherche le plus récent. Utilisé pour "n" et 'hlsearch'. Vous pouvez écrire dedans avec ":let" et le modifier pour que 'hlsearch' mette un motif en surbrillance sans que vous ne fassiez de recherche. Vous ne pouvez pas copier ni couper du texte dans ce registre. {absent de Vi} *@/* Vous pouvez écrire dans un registre avec une commande ":let". |:let-@| Exemple : > :let @/ = "zorglub" Si vous utilisez une commande de collage sans spécifier de registre, Vim utilise le dernier registre enregistré (c'est aussi le contenu du registre sans nom). Si vous êtes embrouillé, utilisez la commande ":dis" pour vérifier ce que Vim collera (cette commande affiche tous les registres nommés et numérotés ; le registre sans nom est représenté par '""'). Les trois commandes suivantes fonctionnent toujours sur des lignes entières. *:co* *:copy* :[plage]co[py] {adresse} Copie les lignes de [plage] en dessous de la ligne donnée par {adresse}. *:t* :t Synonyme de ":copy". ["Transfer"] *:m* *:mo* *:move* *E134* :[plage]m[ove] {adresse} Déplace les lignes de [plage] en dessous de la ligne donnée par {adresse}. ============================================================================== 6. Mettre en forme du texte *formatting* *:ce* *:center* :[plage]ce[nter] [largeur] Centre les lignes de [plage] entre [largeur] colonnes (défaut : 'textwidth' ou 80 si 'textwidth' vaut 0). {absent de Vi} {uniquement si compilé avec la fonctionnalité |+ex_extra|} *:ri* *:right* :[plage]ri[ght] [largeur] Aligne à droite les lignes de [plage] sur [largeur] colonnes (défaut : 'textwidth' ou 80 si 'textwidth' vaut 0). {absent de Vi} {uniquement si compilé avec la fonctionnalité |+ex_extra|} *:le* *:left* :[plage]le[ft] [indent] Aligne à gauche les lignes de [plage]. Fixe l'indentation dans la ligne à [indent] (défaut : 0). {absent de Vi} {uniquement si compilé avec la fonctionnalité |+ex_extra|} *gq* gq{mouv} Met en forme les lignes couvertes par {mouv}. L'option 'textwidth' contrôle la longueur de chaque ligne mise mise en forme (voir ci-dessous). Si l'option 'textwidth' vaut 0, la longueur de la ligne mise en forme correspond à la largeur de l'écran (avec une largeur maximale de 79). L'option 'formatoptions' définit le type de mise en forme |fo-table|. NOTE : La commande "Q" était auparavant utilisée au lieu de cette commande. Si vous souhaitez continuer à utiliser "Q" pour la mise en forme, essayez ce mappage : > :nnoremap Q gq < {absent de Vi} gqgq ou *gqgq* *gqq* gqq Met en forme la ligne courante. {absent de Vi} *v_gq* {Visuel}gq Met en forme le texte en surbrillance (sur {Visuel}, voir |Visual-mode|). {absent de Vi} Exemple : pour mettre en forme le paragraphe courant, utilisez : > gqap La commande "gq" laisse le curseur sur la ligne où le mouvement l'avait trouvé. Cela vous permet de répéter des mises en forme avec ".". Cela fonctionne bien pour "gqj" (met en forme les lignes courante et suivante) et "gq}" (met en forme jusqu'à la fin du paragraphe). NOTE : Si 'formatprg' est fixé, "gq" laisse le curseur sur la première ligne mise en forme (comme avec une commande de filtre). Si l'option 'autoindent' est activée, Vim utilise l'indentation de la première ligne pour les lignes suivantes. La mise en forme n'affecte pas les lignes vides (mais elle modifiera les lignes contenant uniquement des espaces blancs !). L'option 'joinspaces' est utilisée lorsque des lignes fusionnent ensemble. Vous pouvez fixer l'option 'formatprg' au nom du programme externe que Vim devra utiliser pour effectuer de la mise en forme de texte. Les options 'textwidth' et autres n'ont pas d'effet sur la mise en forme du programme externe. *right-justify* Il n'existe pas de commande dans Vim pour justifier du texte à droite. Vous pouvez utiliser une commande externe, comme `par` (p. ex., ":!}par" pour mettre en forme jusqu'à la fin du paragraphe), ou fixer 'formatprg' à "par". *format-comments* Vim peut mettre en forme des commentaires de façon spéciale. Vim reconnaît un commentaire par une chaîne spécifique qui débute la ligne (les espaces blancs sont ignorés). Trois types de commentaires peuvent être utilisés : - une chaîne de commentaire qui se répète au début de chaque ligne (p. ex., les commentaires d'un script shell, qui débutent par "#") ; - une chaîne de commentaire qui apparaît uniquement sur la première ligne, par sur les lignes suivantes (p. ex., une liste à tirets, comme ici) ; - un commentaire en trois parties, qui comprend une chaîne de début, une chaîne de fin et éventuellement des lignes entre. Les chaînes pour le début, le milieu et la fin sont différentes. Ce type de commentaire compte notamment ceux de style C : /* ~ * Ceci est un commentaire C ~ */ ~ L'option 'comments' est une liste de parties séparées par des virgules. Chaque partie définit un type de chaîne de commentaire. Une partie est de forme : XXX partie/champ ? {drapeaux}:{chaine} {chaine} est le texte littéral qui doit apparaître. {drapeaux} : n Commentaire encadré XXX ?. Un encadrement par plusieurs parties est possible : si 'comments' vaut "n:),n:>", une ligne débutant par "> ) >" est un commentaire. ["Nest"] b Un blanc (, ou ) est requis après la {chaine}. f Seule la première ligne contient une chaîne de commentaire. Ne pas répéter ce commentaire sur la ligne suivante, mais préserver l'indentation (pour une liste à tirets, p. ex.). ["First"] s Début d'un commentaire en trois parties. ["Start"] m Milieu d'un commentaire en trois parties. e Fin d'un commentaire en trois parties. ["End"] l Aligne à gauche le milieu avec le début ou la fin (cas par défaut). Reconnu uniquement en association avec 's' ou 'e'. ["Left"] r Aligne à droite le milieu avec le début ou la fin. Reconnu uniquement en association avec 's' ou 'e'. ["Right"] O Ne pas utiliser cette partie pour la commande "O". x Permet de finir les commentaires en trois parties en tapant juste le dernier caractère de la chaîne de fin comme premier caractère d'une nouvelle ligne où la chaîne de milieu a déjà été insérée automatiquement. Voir plus bas pour plus de détails. {chiffres} En association avec 's' ou 'e' : ajoute une indentation supplémentaire pour la partie du milieu. Cela peut être utilisé pour aligner la partie du milieu à gauche avec le début ou la fin, puis ajouter un décalage. -{chiffres} Comme {chiffres}, mais réduit l'indentation. Cela fonctionne uniquement s'il y a une indentation pour les parties du début ou de la fin qui peut être supprimée. Si une chaîne ne contient aucun des drapeaux 'f', 's', 'm' ou 'e', Vim considère que la chaîne de commentaire se répète au début de chaque ligne. Le champ {drapeaux} peut être vide. Tout espace blanc dans le texte avant ou après la {chaine} fait partie de la {chaine} (n'incluez pas d'espace initial ou final à moins que ceux-ci fassent partie de la chaîne de commentaire.) Si une chaîne de commentaire est incluse dans une autre, spécifiez le tout avant la partie. Par exemple, pour inclure à la fois "-" et "->", utilisez : > :set comments=f:->,f:- Un commentaire en trois parties doit toujours être donné par "début,milieu,fin", sans autres parties intercalées. Par exemple > sr:/*,mb:*,ex:*/ pour des commentaires C. Afin d'éviter que "*ptr" ne soit reconnu comme un commentaire, la chaîne du milieu inclut le drapeau 'b'. Pour des commentaires en trois parties, Vim fouille le texte après les chaînes de début et de milieu à la recherche de la chaîne de fin. Si Vim trouve la chaîne de fin, alors le commentaire ne se poursuit pas sur la ligne suivante. Les commentaires en trois parties doivent posséder une chaîne de milieu, car sans cela Vim ne pourrait pas reconnaître les lignes du milieu. Remarquez l'utilisation du drapeau 'x' dans la définition du commentaire en trois parties ci-dessus. Si vous frappez dans un commentaire C, Vim insérera la chaîne de milieu de commentaire sur la nouvelle ligne, p. ex. " * ". Pour fermer ce commentaire, vous aurez juste à saisir "/" avant d'avoir tapé quoi que ce soit d'autre sur la nouvelle ligne. Cela remplacera la chaîne de milieu de commentaire par celle de fin de commentaire, produisant " */". Il n'est pas nécessaire de tapez d'abord. Exemples : "b:*" Inclut les lignes débutant par "*", sauf si "*" est suivi par un non-blanc. Cela évite de reconnaître des références à des pointeurs (p. ex. "*str") comme des commentaires. "n:>" Inclut une ligne débutant par ">", ">>", ">>>", etc. "fb:-" Permet de mettre en forme une liste débutant par "- ". Par défaut, "b:#" est inclus. Cela signifie qu'une ligne qui débute par "#include" n'est pas reconnue comme une ligne de commentaire ; mais une ligne qui débute par "# define" l'est. Il s'agit d'un compromis. Souvent l'alignement peut être changé d'un alignement à gauche en un alignement à droite avec un caractère additionnel. Par exemple, pour les commentaires Javadoc, ceci peut être utilisé (insérez une contre-oblique avant l'espace lors de l'utilisation de ":set") : > s1:/*,mb:*,ex:*/ NOTE : Un décalage ('1') est précisé après le début du commentaire ('s'), de telle sorte que la partie du milieu est d'abord alignée sur le début, puis qu'un décalage d'un caractère est ajouté. Cela permet d'aligner à gauche le début et le milieu de cette construction : /** ~ * commentaire ~ */ ~ {uniquement si compilé avec la fonctionnalité |+comments|} *fo-table* Vous pouvez utiliser l'option 'formatoptions' pour définir la façon dont Vim mettra en forme votre texte. 'formatoptions' est une chaîne qui peut contenir n'importe lequel des drapeaux ci-dessous. La valeur par défaut est "tcq". Vous pouvez séparer les drapeaux par des virgules pour une meilleure lisibilité. DRAPEAU SIGNIFICATION POUR 'formatoptions' ~ ------------------------------------------------------------ t Coupure automatique du texte selon 'textwidth' (ne s'applique pas aux commentaires). c Coupure automatique du texte selon 'textwidth', en insérant la chaîne de commentaire courante. r Insertion automatique de la chaîne de commentaire courante après la saisie de en mode Insertion. o Insertion automatique de la chaîne de commentaire courante après la saisie de "o" ou "O" en mode Normal. q Autorise la mise en forme des commentaires avec "gq". NOTE : La mise en forme ne modifiera pas les lignes blanches ou les lignes contenant uniquement la chaîne de commentaire. Un nouveau paragraphe débute après de telles lignes, ou lorsque la chaîne de commentaire change. w Un espace blanc final indique qu'un paragraphe continue sur la ligne suivante. Une ligne qui se termine par un caractère non-blanc marque la fin d'un paragraphe. ["White"] a Mise en forme automatique des paragraphes. Chaque fois que du texte est inséré ou supprimé, le paragraphe sera remis en forme. Voir |auto-format|. n Lors de la mise en forme de texte, reconnaît les listes numérotées. L'indentation du texte après le numéro est utilisé pour la ligne suivante. Le numéro peut être optionnellement suivit par '.', ':', ')', ']' ou '}'. NOTE : 'autoindent' doit aussi être activé. Ne fonctionne pas bien si utilisé avec '2'. Exemple : 1. Le premier item ~ se finit ici ~ 2. Le deuxième item ~ 2 Lors de la mise en forme de texte, utilise l'indentation de la deuxième ligne d'un paragraphe pour le reste du paragraphe, au lieu de l'indentation de la première ligne. Cela permet de gérer des paragraphes composés en alinéa. NOTE : 'autoindent' doit aussi être activé. Exemple : première ligne d'un paragraphe ~ deuxième ligne du même paragraphe ~ troisième ligne. ~ v Coupure automatique compatible Vi en mode Insertion : coupe une ligne uniquement sur un blanc que vous avez entré à la suite de la commande d'insertion courante. NOTE : Cela n'est pas compatible Vi à 100 %. Vi comporte des « effets indésirables » ou des bogues dans ce domaine. Il utilise la colonne d'écran au lieu de la colonne de ligne. b Comme 'v', mais ne coupe une ligne que si vous entrez un blanc sur ou avant la marge de coupure. Si une ligne était plus longue que 'textwidth' lorsque l'insertion a débuté, ou que vous n'avez pas entré de blanc pendant l'insertion avant d'atteindre 'textwidth', Vim ne procédera pas à la coupure automatique. l Les lignes longues ne sont pas coupées en mode Insertion : si une ligne était plus longue que 'textwidth' lorsque la commande d'insertion courante a débuté, Vim ne la mettra pas en forme pas. m Autorise la coupure automatique après des caractères multi-octets supérieurs à 255. Utile pour des textes asiatiques où chaque caractère est un mot en soi. M Lors de la fusion de lignes, n'insère pas d'espaces avant ou après un caractère multi-octets. Recouvre le drapeau 'B'. B Lors de la fusion de lignes, n'insère pas d'espaces entre deux caractères multi-octets. Recouvert par le drapeau 'M'. ["Between"] 1 Ne coupe pas une ligne après un mot d'une seule lettre ; la coupe avant si possible. ------------------------------------------------------------ Avec 't' et 'c', vous pouvez spécifier quand Vim doit gérer la coupure automatique des lignes : VALEUR ACTION ~ "" pas de mise en forme automatique (utilisez "gq" pour cela) "t" mise en forme automatique du texte, mais pas des commentaires "c" mise en forme automatique des commentaires, mais pas du texte (bien pour le code C) "tc" mise en forme automatique du texte et des commentaires NOTE : Si 'textwidth' vaut 0, Vim n'effectuera de toute façon aucune mise en forme (mais insérera la chaîne de commentaire selon l'option 'comments'). NOTE : Si 'paste' est activé, Vim n'effectuera aucune mise en forme. NOTE : 'textwidth' peut être non-nul même si Vim n'effectue aucune coupure automatique de ligne ; 'textwidth' est aussi utilisé avec la commande "gq". Si l'option 'comments' contient "/*", "*" et/ou "*/", alors ces commentaires en trois parties sont traités par Vim d'une façon un peu plus intelligente. L'ouverture d'une nouvelle ligne avant ou après "/*" ou "*/" (si 'r' ou 'o' sont présents dans 'formatoptions') modifie automatiquement le début de chaque ligne pour qu'il soit correct. La même chose se produit lors de la mise en forme et de la coupure automatique de ligne. L'ouverture d'une ligne après une ligne débutant par "/*" ou "*", et contenant "*/", n'entraînera pas l'insertion d'une chaîne de commentaire, et l'indentation de la nouvelle ligne sera celle de la ligne contenant le début du commentaire. Par exemple : /* ~ * Un joli commentaire. ~ */ ~ L'indentation de cette ligne est la même que celle du début du ~ commentaire ci-dessus. ~ Toutes ces possibilités devraient être vraiment agréables, particulièrement en conjonction avec des autommandes pour fixer différents paramètres pour différents types de fichiers. Quelques exemples : - pour du code C (mettre en forme uniquement les commentaires) : > :set fo=croq - pour un message électronique (tout mettre en forme, ne pas débuter de commentaire après une commande "o") : > :set fo=tcrq MISE EN FORME AUTOMATIQUE *auto-format* Lorsque le drapeau 'a' est inclus dans 'formatoptions', le paragraphe courant est automatiquement mise en forme lors d'une insertion ou suppression de texte. C'est particulièrement commode pour éditer des paragraphes de texte. Quelques conseils pour bien utiliser cette fonctionnalité : - Les paragraphes doivent être bien définis. Le plus simple est que chaque paragraphe soit séparé du suivant par une ligne blanche. Quand il n'y a pas de ligne blanche, il est possible d'utiliser le drapeau 'w' et d'ajouter un espace à la fin de chaque ligne, excepté la dernière de chaque paragraphe. - Vous pouvez fixer 'formatoptions' pour un certain type de fichier |filetype| ou pour un fichier particulier |modeline|. - Fixez 'formatoptions' à "aw2tcq" pour que l'indentation du texte ressemble à celle-ci : Blabla schtroumpf-bouchon rosa rosa rosam rosae etc. Blabla tire-bouschtroumpf rosae rosae rosas rosarum etc. Et voici quelques avertissements : - Si pour certaines parties du texte les paragraphes ne sont pas bien définis, le texte sera remis en forme malgré cela quand un changement sera effectué. Pour l'éviter : > :set fo-=a - Si vous utilisez le drapeau 'w' (un espace blanc final signifie que le paragraphe se poursuit) et que vous supprimiez la dernière ligne d'un paragraphe avec |dd|, ce paragraphe sera fusionné avec le suivant. - Un texte changé est mémorisé pour l'annulation. La mise en forme est considérée comme un changement. Ainsi, chaque action de mise en forme est mémorisée pour pouvoir être annulée. Cela peut consommer beaucoup de mémoire. - La mise en forme d'un paragraphe long et/ou avec une indentation complexe peut être lente. vim:tw=78:ts=8:ft=help:norl: