Outils pour utilisateurs

Outils du site


issue55:c_c

Last month, I wrote a brief introduction to Gvim/Vim, which I hope to expand upon in this article. I recently received an email from a reader asking me if it was worth learning your way around Vim or not. The relevant points in the email were: a) If you use Windows during the work day, is there even a point to learning how to use Vim? b) If you don't program much (or at all), is Vim going to be helpful? I sent back quite a long email, but it ultimately boiled down to: a) Gvim/Vim have a client for Windows, so you're more than welcome to use it there too. b) I find that Vim offers a set of features that makes repetitive tasks extremely easy to accomplish. This is most prominent in coding (i.e. headers, function calls, methods, formatting, refactoring, etc.), but if you do any kind of task where you find yourself repeatedly making the same change to a certain word or to large chunks of text at a time, Vim will definitely make your life a little easier. As such, I will be covering Macros, search/replace, find, and a basic introduction to regular expressions this month.

Le mois dernier, j'ai écrit une brève introduction à gVim/Vim, que j'espère étoffer dans cet article. Récemment, j'ai reçu un courriel d'un lecteur me demandant si cela valait le coût d'apprendre à connaître Vim ou pas. Les points pertinents du courriel étaient : a) Si vous utilisez Windows quotidiennement au bureau, y a-t-il quand même une raison d'apprendre à utiliser Vim ? b) Si vous ne programmez pas beaucoup (ou pas du tout), est-ce que Vim pourra vous venir en aide ? J'ai renvoyé un assez long courriel, mais, en résumé j'ai finalement dit : a) gVim/Vim ont un client Windows et, si le cœur vous en dit, vous pouvez donc l'utiliser là aussi. b) Je trouve que Vim propose un ensemble de fonctionnalités qui rendent les tâches répétitives extrêmement facile. C'est plus évident si vous faites du codage (c'est-à-dire des en-têtes, des appels de fonction, des méthodes, du formatage, de la refactorisation, etc.), mais si vous faites n'importe quelle sorte de tâche où vous vous trouvez à maintes reprises en train de faire la même modification au même mot ou à de gros blocs de texte à la fois, Vim rendra certainement votre vie un peu plus facile. Ainsi, ce mois-ci, je vais parler de macros, rechercher/remplacer, trouver, et je vais faire une présentation de base des expressions régulières.

Before I begin, please take the following to heart: Use Vim. By that I mean simply do your day-to-day tasks in Vim for a week or so, and once you notice yourself repeating a task, do a quick search online to find out how to automate the task (or, at the very least, reduce the number of key strokes). It may slow you down at the start, but it will ultimately cut down on the time you need. The reason I say to search online is simply because, in my experience, finding the answers to questions on your own tends to improve the ability to recall the solution, as opposed to getting the information fed to you from someone. Now, to the article… Vim offers a lot of features, not all of which will apply to you. As such, I recommend skipping over any parts you don't expect to need or use, in order to reduce the amount of information you need to take in. For all the following shortcuts, anything in “<>” are variables that you must decide, and anything in “[]” is a physical key on the keyboard you must press. Also, unless otherwise specified, all commands and key presses are entered in the default mode of Vim (the “blank” one).

Avant de commencer, vous êtes prié de tenir compte de ce qui suit : Servez-vous de Vim.

En disant cela, je vous demande simplement de faire vos tâches quotidiennes avec Vim pendant environ une semaine et, quand vous remarquerez que vous répétez une tâche, faites une rapide recherche en ligne pour apprendre comment l'automatiser (ou, à tout le moins, réduire le nombre de touches frappées). Au début, cela pourra vous ralentir, mais, in fine, il va réduire le temps dont vous avez besoin. Je vous demande de faire une recherche en ligne simplement parce que, d'après mon expérience, trouver les réponses à vos questions par vous-même, au lieu de laisser quelqu'un d'autre vous les donner sur un plateau, peut vous aider à vous souvenir de la solution.

Et maintenant, l'article…

Vim propose beaucoup de fonctionnalités et toutes ne s'appliqueront pas à votre cas. Ainsi, je vous recommande de sauter les trucs qui ne semblent pas répondre à vos besoins, le cas échéant, pour réduire la quantité d'informations à assimiler. Pour tous les raccourcis suivants, tout ce qu'il y a entre « <> » sont des variables dont vous devez décider vous-même, et tout ce qu'il y a entre des « [] » est une touche sur le clavier sur laquelle il faudrait appuyer. Enfin, sauf indication contraire, toutes les commandes et les frappes sont à entrer dans le mode par défaut de Vim (celui qui est « vierge »).

Macros: Vim offers the ability to create Macros on-the-fly. This means you can record a set of commands in Vim so that you can easily repeat them. The basic method is: [q]<letter><commands>[q] The [q] key begins the capture of a Macro, which gets saved to the letter you supply. Once you have entered [q]<letter> you can then begin using any of Vim's commands to make the necessary edits to your text. Once finished, hit the q key again (outside of any mode). An example case could be: [q][b] <series of commands> [q] This will bind the macro to the “b” key. The way to then execute a command is to enter “@<letter>”, which in this case would be: @b As is the case with any command in Vim, you can repeat the command by appending a number before it. If you then typed “55@b” instead, it would then execute the “b” macro 55 times. Typing “@@” will also re-run the last macro. If you want to learn more about Macros, I recommend the article on the Vim Wiki: http://vim.wikia.com/wiki/Macros

Macros :

Vim vous donne la possibilité de créer des macros à la volée. Cela veut dire que vous pouvez enregistrer un ensemble de commandes dans Vim afin de pouvoir les répéter facilement. La méthode de base est la suivante :

[q]<lettre><commandes>[q]

La touche [q] démarre la capture d'une macro qui est sauvegardée à la lettre que vous choisissez. Une fois [q]<lettre> entré, vous pouvez alors commencer à utiliser n'importe lesquelles des commandes de Vim pour faire les modifications nécessaires dans votre texte. Une fois terminé, tapez sur la touche q à nouveau (en dehors de tout mode). Un exemple pourrait être :

[q][b] <série de commandes> [q]

Cela liera la macro à la touche « b ». Pour exécuter cette série de commandes, vous devez tapez « @<lettre> », ce qui dans ce cas serait :

@b

Comme pour toute commande dans Vim, vous pouvez la répéter en la faisant précéder d'un numéro. Si vous avez tapé « 55@b » à la place, la macro « b » serait executée 55 fois. Si vous tapez « @@ » la dernière macro s'exécutera à nouveau. Si vous voulez en apprendre davantage au sujet des macros, je recommande l'article sur le Wiki de Vim : http://vim.wikia.com/wiki/Macros.

Search: In Vim (and programs similar to Vim, like more, less, mutt, etc.), you can search the text using the following format: /<term> The slash tells the program the following is a search term (and in Vim the entire term including the slash is displayed on the bottom of the window). It will then move to the first occurrence of the word. You can move through the results using [n] to move to the next one and [shift]+[n] (henceforth referred to as [N]) to move to the previous one. and Replace: By default Vim supports regular expressions. This is extremely useful when replacing something (called “substitution” in Vim), because you can match the maximum number of results possible. First we'll cover normal search and replace behaviour: :%s/<term>/<replacement>/ This will find the first occurrence of <term> and replace it with <replacement>. If you want to make this change to all occurrences, you'll need to change the command to this: :%s/<term>/<replacement>/g So if you wanted to replace all occurrences of “vim” with “Vim”, your command would read: :%s/vim/Vim/g

Rechercher :

Dans Vim (et dans des programmes similaires, comme more, less, mutt, etc.), vous pouvez rechercher quelque chose dans le texte avec ceci :

/<terme>

La barre oblique dit au programme que ce qui suit est un terme à rechercher (et dans Vim, le terme entier, y compris la barre oblique, s'affiche en bas de la fenêtre). Il va alors bouger à la première occurrence du mot. Vous pouvez naviguer dans les résultats avec [n] pour bouger jusqu'à la prochaine et [maj]+[n] (que je vais dorénavant appeler [N] pour revenir à la précédente.

et Remplacer :

Par défaut, Vim prend en charge les expressions régulières. C'est extrêmement utile quand vous remplacez quelque chose (dans Vim, cela s'appelle une « substitution »), parce que vous pouvez confronter le nombre maximum de résultats possible. Tout d'abord, nous allons parler du comportement normal de rechercher et remplacer :

:%s/<terme>/<remplaçant>/

Cela trouvera la première occurrence de <terme> et le remplacera avec <remplaçant>. Si vous voulez faire ce changement partout, vous devrez modifier la commande à ceci :

:%s/<terme>/<remplaçant>/g

Ainsi, si vous vouliez remplacer tous les « vim » par « Vim », voici votre commande :

:%s/vim/Vim/g

Regular expressions: With regular expressions, you could replace all occurrences of “vim, VIM, vIm, viM” with “Vim” using the following command: :%s/[vV][iI][mM]/Vim/g As most of you can probably imagine, anything written in “[]” results in either possibility (or range of possibilities) being matched (henceforth called a set). You may ask yourself “why not put it all in one set?”. If you do it (go ahead and try it), you'll notice that it replaces each letter with the word “Vim” instead of replacing the entire word. This is because the square brackets denote a character/position in a word. If you tell it to replace all the letters, without specifying the location within a word (which is done by splitting it into separate sets of square brackets), it will simply replace each letter.

Expressions régulières :

En utilisant les expressions régulières, vous pourriez remplacer toutes les occurrences de « vim, VIM, vIm viM » par « Vim » avec la commande suivante :

:%s/[vV][iI][mM]/Vim/g

Comme la plupart d'entre vous pouvez sans doute imaginer, tout ce qui est écrit entre des crochets « [] » donne soit la possibilité (ou une plage de possibilités) de trouver une ou des correspondante(s) (que j'appellerai désormais un ensemble). Vous êtes peut-être en train de vous demander « Pourquoi ne pas mettre le tout dans un seul ensemble ? ». Si vous le faites (allez-y, essayez-le), vous remarquerez que cela remplace chaque lettre par le mot « Vim » au lieu de remplacer le mot entier. Cela est dû au fait que les crochets signifient un caractère/position dans un mot. Si vous lui dites de remplacer toutes les lettres, sans spécifier leur position dans le mot (ce qui se fait avec l'utilisation d'ensembles distincts de crochets), il va tout simplement remplacer chaque lettre.

So, if you want to match all upper, lower, and numerical cases, you could use [A-Za-z0-9]. The way it works is that anything next to each other is taken as a new series, and anything on the opposite ends of a hyphen is a range. So your 3 ranges are: A-Z (capital letters), a-z (lower case letters), and 0-9 (numbers). If you want to match every single word that begins with the capital letter “T”, you could use T[a-z]*. The asterisk tells Vim that the last set can be repeated indefinitely. Since we didn't include space in the set, it will then stop at the end of a word.

Ainsi, si vous voulez faire correspondre tous les caractères majuscules, minuscules et numériques, vous pourriez utiliser [A-Za-z0-9]. Autrement dit, n'importe quoi à côté d'autre chose est compris comme une nouvelle série et tout ce qui se trouve séparé par un tiret est une plage. Et donc vos trois plages sont : A-Z (les majuscules), a-z (les minuscules) et 0-9 (les nombres). Si vous vouliez trouver tous les mots qui commencent par un « T » majuscule, vous pourriez utiliser T[a-z]*. L'astérisque dit à Vim que le dernier ensemble peut se répéter indéfiniment. Puisque l'espace n'était pas compris dans l'ensemble, cela s'arrêtera à la fin d'un mot.

A great number of options opens up to you in this way. You can run a search for all numbers between 1000 and 9999 with [1-9][0-9]\{3\}. In this case, the braces contain a limiter (i.e. number of repetitions of the search term before it). You can also supply it as a range. For example [1-9][0-9]\{2,3\} will search for any number between 100 and 9999. You need to escape the braces with the backslash so that Vim will not include them as part of the search term. This is just a brief overview of a few regular expressions. They can become a lot more complicated as they become more advanced. If you want to learn more, I highly recommend this Tutorial: http://www.regular-expressions.info/tutorial.html. There are also a number of blog articles on how to wrap your head around creating expressions to do what you want. I hope you've found this article to be interesting. I plan to continue along this path next month, with an overview of Pentadactyl (a Vim-like interface for Firefox). If you have any questions, comments, or suggestions, feel free to email me at lswest34@gmail.com. If you do email me, please include “FCM” or “C&C” (or, as a regular expression: [fFcC][cC&][mMcC]) in the subject header.

De cette façon, un grand nombre d'options s'ouvrent à vous. Vous pouvez rechercher tous les nombres entre 1 000 et 9 999 avec [1-9][0-9]\{3\}. Ici, les accolades contiennent un limiteur (c'est-à-dire le nombre de répétitions du terme recherché le précédant). Vous pouvez aussi le fournir comme plage. Par exemple [1-9][0-9]\{2,3\} recherchera tous les nombres entre 100 et 9 999. Vous avez besoin de sortir des accolades avec la barre oblique inversée pour faire en sorte que Vim ne les inclue pas comme partie du terme rechercher.

Ceci n'est qu'une brève vue d'ensemble de quelques expressions régulières. Elles peuvent devenir bien plus compliquées. Si vous voulez en apprendre davantage, je recommande vivement ce tutoriel-ci : http://www.regular-expressions.info/tutorial.html. Il existe aussi plusieurs articles de blog sur comment éduquer votre cerveau à créer les expressions qui font ce que vous souhaitez.

J'espère que vous avez trouvé cet article intéressant. Je compte continuer sur ma lancée le mois prochain en donnant un aperçu général de Pentadactyl (une interface un peu comme Vim pour Firefox). Si vous avez des questions, des commentaires ou des suggestions, n'hésitez pas à m'envoyer un mail à lswest@gmail.com. Si vous le faites, prière de mettre « FCM » ou « C&C » (ou, en tant qu'expression régulière : [fFcC] [cC&] [mMcC]) dans la case Objet.

issue55/c_c.txt · Dernière modification : 2012/01/28 19:19 de andre_domenech