05.09.2019»»четверг

Utilisation De Sed Dans Vim

    18 - Comments
Utilisation De Sed Dans Vim Average ratng: 3,6/5 5892 reviews

Using sed or VIM to replace space with new line. Ask Question 3. I have the following data. With sed or VIM editor how can I change it to. Comment remplacer un personnage par une nouvelle ligne dans Vim? Une variable dans un sed de commande, par exemple. L'accent sur l'utilisation de doubles.

Une part importante de l’activité des développeurs se résume à éditer de simples fichiers textuels. Ces fichiers permettent de communiquer des instructions aux machines chargées de les exécuter. Pour le confort et la productivité d’un développeur, l’interface qui lui permettra de saisir son code est primordiale.

Je compte deux approches différentes. Les Environnements de Développement Intégrés qui intègrent un maximum d’outils : la gestion des projets, l’édition des sources, la compilation, le débogage, le système de gestion de configuration (SCM), etc. Les EDIs que j’ai en tête : Eclipse, Netbeans ou IDEA pèsent plusieurs centaines de mégaoctets en mémoire, sont associé à une interface d’édition dont les principales fonctionnalités sont l’autocomplétion, le surlignage des erreurs et les snippets de codes. Et, les manipulateurs de textes comme TextMate, Sublime Text, EMACS ou, dans notre cas, Vim.

Je voudrai présenter les bases de la manipulation de texte. Vim est probablement l’éditeur qui embrasse le plus ce concept et je vais plutôt vous présenter les bases de celui-ci. Dans un prochain article, je présenterai quelques aspects plus avancés.

Avant de commencer, je vous recommande de vous procurer Vim, de l’installer et de le tester pendant votre lecture. Peu importe votre plateforme, Vim existe certainement pour cette dernière. Rendez-vous sur cette page de téléchargement pour l’installer.

Vim est un éditeur destiné à une utilisation en ligne de commande, il fonctionne donc tout à fait normalement à distance (en SSH par exemple). Il n’y a pas de menus classiques dans l’interface de Vim. Vim est un éditeur modal. C’est-à-dire que chaque touche va avoir un comportement différent en fonction du mode dans lequel on se trouve. Cela décuple les interactions et la complexité apparente de l’éditeur puisque chaque touche va être utilisée de façon différente selon le mode dans lequel on se trouve.

Vous vous demandez peut-être « Quels sont donc ces différents modes et à quoi servent-ils ? », alors commençons la visite.

Édition : insertion et remplacement

C’est le mode le plus rapide à présenter. En effet, chaque caractère est inséré dans le fichier sous le curseur ce qui est probablement le plus familier des comportements. Pour ceux qui expérimentent pendant leur lecture vous remarquerez que ce n’est pas le mode par défaut de Vim. En effet lorsque vous lancez Vim, vous êtes en mode commande dont on reparlera juste après.

Mar 1, 2011 - Fight Night Champion Cheats For PlayStation 3. Defeat Isaac Frost in Champion Mode, A Champion Emerges. Mar 1, 2011 - Get the latest Fight Night Champion cheats, codes, unlockables, hints, Easter eggs, glitches, tips, tricks, hacks, downloads, trophies, guides,. Fight night champion ps3 cheats.

Passer dans le mode d’édition peut se faire d’un grand nombre de manières, j’en vois déjà plus d’une dizaine. Vous pouvez accompagner ce changement de mode par un déplacement prédéfini. Ce sont ces déplacements qui sont à l’origine de cette variété.

Voici un petit récapitulatif des commandes que j’utilise :

CommandePassage dans le mode insertion
aaprès le curseur
Aen fin de ligne
isous le curseur
Ien début de ligne
osur une nouvelle ligne au-dessous
Osur une nouvelle ligne au-dessus
Rsous le curseur en mode remplacement

Vous remarquerez qu’il est facile d’associer ces commandes à des mots : ajouter, insérer, ouvrir une ligne, remplacer. Le fait d’utiliser une majuscule ou une minuscule modifie légèrement le comportement tout en conservant l’idée de la commande originale.

Une fois passé en mode insertion, on se retrouve un peu comme prisonnier dans un champ texte, sans menu, sans copier-coller, sans même un fichier à soi. Essayons de retrouver les autres fonctionnalités des éditeurs de textes classiques. Pour cela on repasse en mode commande en pressant ESC.

Commande

Lorsque Vim se lance, on est dans ce mode dit de commande, c’est celui qui se rapproche le plus de ce que les menus peuvent fournir aux autres éditeurs. Il permet d’ouvrir un fichier, d’enregistrer, d’enregistrer-sous, de copier, de coller, etc.

Vim permet d’utiliser les commandes de l’éditeur Ex, un éditeur de texte plus historique encore que Vim lui-même. Cependant l’utilisation d’x est transparente pour l’utilisateur. Je vais présenter les deux catégories de commandes succinctement grâce à quelques exemples.

Les commandes de Vim

Il n’y a pas de retour visuel m’indiquant la commande que je suis en train de taper. Pour afficher le texte de la commande en cours tapez en mode commande : :set showcmd. Après ça vous devriez voir la commande en cours d’écriture en bas à droite de la zone de texte. On peut classer les commandes en deux catégories, les opérateurs et les déplacements. Les opérateurs modifient le texte et les déplacements, comme leur nom l’indique, déplacent le curseur d’un endroit à l’autre du fichier.

Les opérateurs que j’utilise sont les suivants :

OpérateurDescription
cChanger du texte
ccChanger la ligne entière
CChanger du texte jusqu'à la fin de la ligne
dSupprimer du texte
ddSupprimer la ligne entière
DSupprimer du texte jusqu'à la fin de la ligne
yCopier du texte
yy, YCopier la ligne entière
pColler du texte supprimé ou copié après le curseur
PColler du texte supprimé ou copié sous le curseur
rRemplacer le caractère sous le curseur
xSupprimer le caractère sous le curseur
XSupprimer le caractère précédent le curseur
>, <Indenter, desindenter d'une tabulation
uDéfaire la dernière action
CTRL + rRefaire la dernière action
.Rapplique la dernière commande exécutée

Les principaux déplacements que j’utilise sont les suivants :

Utilisation De Sed Dans Vim E

DéplacementDescription
w, bDébut du mot suivant ou précédent
W, BDébut du mot suivant ou précédent en ignorant la ponctuation
e, EFin du mot courant en ignorant ou non la ponctuation
%Symbole ouvrant ou fermant correspondant (chevrons, parenthèses, accolades, if / end, balises XML, etc)
h, j, k, lGauche, Bas, Haut, Droite
g0, g$Début ou fin d'une ligne (g facultatif)
^, _Premier caractère d'une ligne
ENTER, +Premier caractère de la ligne suivante
-Premier caractère de la ligne précédente
fxPremier caractère x après le curseur sur la même ligne
txPremier caractère suivi d'un x après le curseur sur la même ligne
nGDébut de la ligne n
GFin du fichier
ggDébut du fichier
nGDébut de la ligne n dans le fichier

Pour éditer occasionnellement des fichiers de configuration, ces commandes ne sont pas toutes utiles. Mais, pour celui qui commence à utiliser Vim régulièrement, intégrer ces dernières à son workflow peut s’avérer un gain de temps important.

Voici quelques combinaisons possibles :

CommandeRésultat
c3wSupprime les 3 prochains mots et passe en mode insertion
5ddSupprime les 5 lignes sous le curseur
3pColle 3 fois le contenu du presse papier
df.Supprime le texte de la ligne jusqu'au prochain caractère « . »
5uDéfait les 5 dernières actions
5 CTRL + rRefait les 5 dernières actions
y45GCopie de la ligne courante à la ligne 45
>%Indenter jusqu'au symbole fermant

Les commandes de Vim sont généralement de la forme [n] opérateur [m] déplacement. Il est important de pouvoir créer ses propres commandes à la volée. Cela évite par exemple les répétitions de raccourcis (CTRL + v, dix fois de suite) ou encore l’utilisation intensive de la souris pour se déplacer.

Les commandes de ex

Les commandes Ex, commencent par « : », une partie d’entre elles ont des équivalents Vim purs. Par exemple on peut fermer Vim et enregistrer le fichier courant par :x ou bien avec ZZ.

Voici donc les commandes « du style Ex » que j’utilise régulièrement :

CommandeAction
:eÉditer un fichier
:wEnregistrer un fichier
:w FILENAMEEnregistrer un fichier sous le chemin FILENAME
:qQuitte la fenêtre vim
:x, :wqSauvegarde puis quitte vim
:nSe déplace au début de la ligne n
:bnextAffiche le prochain fichier ouvert (buffer)
:bpreviousAffiche le précédent fichier ouvert
:bdeleteFerme le buffer courrant
:lsAffiche la liste des buffers
:waEnregistre tous les fichiers ouverts

Visuel

En mode commande, la touche « v » permet de passer en mode visuel, où l’on va pouvoir réaliser des sélections, un peu comme à la souris. Les commandes « V » et « CTRL + v » permettent respectivement de passer en mode visuel par ligne ou par bloc. Testez-les pour en comprendre le fonctionnement ou bien consultez la documentation du mode visuel de vim.

Dans

Une fois dans ce mode les commandes de déplacement de Vim sont accessibles pour effectuer la sélection. Par exemple « v55G » passera du mode commande au mode visuel, débutera la sélection à l’endroit du curseur puis ira se placer sur le début de la ligne 55. On peut passer d’un bout à l’autre de la sélection avec « o » et donc déplacer n’importe quelle extrémité de celle-ci.

Marques pages

On ne se rappelle pas forcément dans un fichier de log d’un millier de lignes quels sont les numéros de celles qui nous intéressent. Nombre d’éditeurs proposent de poser des marques sur les lignes qui ont de l’importance et auxquelles vous voulez revenir facilement. Vim propose cette fonctionnalité à travers les marques pages.

Poser des marques pages dans un fichier se fait avec « mx » où x est un identifiant. L’identifiant est une lettre minuscule. On peut se déplacer à la ligne de la marque avec « ‘x » ou bien directement au caractère marqué avec « `x ». Pour revenir à l’endroit où on était on peut utiliser « ‘’ » pour revenir à cette ligne ou « `` » pour revenir au caractère précis précédant le déplacement.

La portée de ces marques se limite au fichier ouvert. Pas possible donc de poser une de ces marques dans un fichier et d’y faire appel depuis un autre fichier. Cependant il existe un autre type de marques pages qui ont une portée globale et qui se distinguent simplement par le fait qu’ils utilisent un lettre majuscule ou bien un chiffre comme identifiant.

Gérer plusieurs fenêtres

Parfois il est plus simple, plutôt que de se déplacer, d’avoir deux parties d’un même fichier visible en même temps. Vim propose un système de fenêtres pour cela. Une fenêtre c’est une vue sur une partie d’un fichier. Deux fenêtres peuvent afficher un même fichier, et le faire à des positions différentes. Voici une capture d’écran illustrant un exemple de session où il y a deux fenêtres :

Bien sûr les fenêtres peuvent afficher des fichiers différents.

Voici un récapitulatif des commandes permettant de manipuler ces fenêtres :

CommandeRésultat
:split, CTRL + w sSépare horizontalement la fenêtre courante en deux
:vsplit, CTRL + w vSépare verticalement la fenêtre courante en deux
:close, CTRL + w cFerme la fenêtre si ce n'est pas la dernière
:resize n, zn, n CTRL + w _Définit le nombre de lignes visible à n
:vertical resize n, n CTRL + Définit le nombre de colonnes visible à n
:only, CTRL + w oConserve uniquement la fenêtre active et ferme toutes les autres
CTRL + W DIRSe déplace dans la fenêtre suivante, dans la direction DIR (h, j, k, l, flêches)

Il est également possible d’utiliser la souris pour redimensionner les fenêtres de Vim (voir l’option mouse).

En complément des fenêtres, il existe des onglets. Ils permettent d’avoir différents ensembles de fenêtres ouvertes et de passer de l’un à l’autre. Je n’utilise pas vraiment les onglets et donc je vous recommande de regarder la documentation pour en savoir plus.

Dans tout bon éditeur de texte, on dispose des fonctions rechercher et remplacer ; dans Vim aussi ces fonctions sont accessibles. On peut effectuer ces opérations sur une plage de ligne, sur une sélection, sur l’ensemble du fichier, etc. Je vais commencer par introduire les différentes commandes de recherches. Il faut savoir que ces commandes se combinent avec les autres comme un déplacement. On peut par exemple supprimer du texte jusqu’au prochain résultat de recherche avec d/pattern.

CommandeRecherche
/patternRecherche en avant le motif pattern
?patternRecherche en arrière le motif pattern
n, NSaute au résultat suivant, précédent
*, #Recherche le mot sous le curseur en avant, en arrière
g*, g#Recherche le mot sous le curseur autorisant son inclusion dans d'autres mots
:nohlsearchDesactive le surlignage des résultats d'un recherche jusqu'à la prochaine

Utilisation De Sed Dans Vim Y

Ces commandes permettent de faire de la recherche et des déplacements dans Vim. Il est possible de (des)activer la recherche incrémentale, la coloration des résultats, etc. Les patterns employés utilisent les expressions régulières avec une syntaxe spécifique à Vim.

Le remplacement dans Vim se fait grâce à la commande Ex substitute : « s ». Cette dernière fait partie de Ex et adopte la syntaxe suivante : :[adresse] commande. Les adresses sont généralement de la forme x,yx est la ligne de début et y la ligne de fin. Il existe en plus des symboles spéciaux dans la description des adresses, essayons d’en faire le tour avec ces quelques exemples :

AdressePlage de sélection
1,$L'ensemble du fichier
%L'ensemble du fichier également
.La ligne courante
+nn lignes après la ligne courante
-nn lignes avant la ligne courante
/pattern/La première ligne en avant qui contient pattern
?pattern?La première ligne en arrière qui contient pattern
Utilisation de sed dans vim c

Voici de nouveaux exemples pour comprendre l’usage des adresses et de la substitution :

CommandeSubstitution
:s/old/new/Substitue sur la ligne courante la première occurence de « old » par « new »
:s/old/new/gIdem avec toutes les occurences de la ligne (option g)
:s/old/new/gcIdem en demandant une confirmation pour chaque remplacement (option c)
:.,+15s/old/new/gcIdem pour les 16 lignes sous le curseur
:.,/search/s/old/new/gcIdem pour les lignes du curseur jusqu'à search (en avant)
:%s/old/new/gcIdem pour toutes les lignes du fichier

Utilisation De Sed Dans Vim C

Dans ces exemples simples on retrouve la syntaxe des adresses Ex que l’on a vu plus tôt. Ces dernières permettent de spécifier une plage précise de remplacement.

CommandeSubstitution
:%s/(.*) */1/Supprime tout les espaces en fin de ligne
:%s/[[=e=]]/e/gRemplace tout les éléments de la classe d'équivalence e (é, è, ê, etc) par des « e »
:%s/todo/U&/giRemplace les occurences de « todo » quelque soit leur casse en « TODO » majuscules

À travers ces trois autres exemples on voit que Vim permet de délimiter des groupes dans ces recherches avec ( et ) et de les réutiliser dans les remplacements avec 1, 2, etc. Il est aussi possible d’utiliser les expressions à crochet de POSIX pour définir des intervalles ([:alnum:], [:digit:], etc.). Et, on voit qu’il existe des caractères spéciaux à utiliser dans les remplacements (U, &, etc).

La commande de substitution regorge d’autres astuces. Par exemple lorsque le motif recherché est vide (:s//new/) alors c’est la dernière recherche qui est utilisée. Les caractères de séparations sont libres : :s#old#new#gc est tout à fait valable.

Avec ce que l’on a survolé, vous pouvez peut-être déjà vous rendre compte de ce que la manipulation de texte apporte par rapport à la simple édition de texte. Si vous n’êtes pas encore convaincu, je vous invite tout de même à lire le prochain article qui, au travers de plus d’exemples, saura mieux vous convaincre du gain apporté par la maitrise d’un tel outil.

Jusque-là j’ai présenté de quoi s’en sortir avec Vim pour de l’édition occasionnelle, je n’ai pas parlé des macros, des replis, des interactions avec la console, de la configuration ou encore des plugins. Tout ceci sera dans le prochain article qui sera destiné à ceux d’entre vous qui souhaitent utiliser Vim au quotidien.

L’équipe Synbioz.

Libres d’être ensemble.