<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog d&#039;alex6 &#187; vim</title>
	<atom:link href="https://blog.developpez.com/alex6/pcategory/vim/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/alex6</link>
	<description></description>
	<lastBuildDate>Thu, 12 Apr 2018 16:45:16 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Tag List sous vim</title>
		<link>https://blog.developpez.com/alex6/p12760/vim/tag-list-sous-vim</link>
		<comments>https://blog.developpez.com/alex6/p12760/vim/tag-list-sous-vim#comments</comments>
		<pubDate>Tue, 14 Oct 2014 23:31:20 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/alex6/?p=108</guid>
		<description><![CDATA[Une des fonctions les plus utiles pour naviguer dans un code source est la possibilité d&#8217;avoir une vue globale du fichier. Il existe pour cela dans la plupart des IDE, une liste des fonctions/procédures. Cette liste permet d&#8217;accéder directement à la fonction, souvent par un double-clic. Vim permet de faire ceci grâce au greffon taglist. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une des fonctions les plus utiles pour naviguer dans un code source est la possibilité d&rsquo;avoir une vue globale du fichier.<br />
Il existe pour cela dans la plupart des IDE, une liste des fonctions/procédures.<br />
Cette liste permet d&rsquo;accéder directement à la fonction, souvent par un double-clic.</p>
<p>Vim permet de faire ceci grâce au greffon <a href="http://www.vim.org/scripts/script.php?script_id=273" title="TagList" target="_blank">taglist</a>.<br />
<a href="http://blog.developpez.com/alex6/files/2014/10/taglist_vim.png"><img src="http://blog.developpez.com/alex6/files/2014/10/taglist_vim-300x253.png" alt="taglist_vim" width="300" height="253" class="aligncenter size-medium wp-image-109" /></a></p>
<p>Après avoir décompressé le plugin dans votre répertoire ~/.vim/plugin/, vous pourrez ajouter aussi la documentation (doc/taglist.txt) au répertoire ~/.vim/doc. Comme déjà expliqué dans un article précédent, il faudra ensuite faire sous vim</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:helptags ~/.vim/doc</div></div>
<p>.</p>
<p>Ouvrez votre fichier source, puis tapez maintenant :TlistToggle.<br />
Cela fera apparaître une fenêtre de la liste de vos variables, fonctions, classes, tout ceci de manière hiérarchique.</p>
<p>Pour naviguer sur une fonction, il suffit de positionner son curseur sur la fonction et de faire Entrer.<br />
Pour passer d&rsquo;une fenêtre à l&rsquo;autre, faire la combinaison Ctrl-W W.</p>
<p>Pour obtenir une petite aide rapide des raccourcis claviers, taper F1 dans la &laquo;&nbsp;Taglist&nbsp;&raquo;.<br />
Vous pourrez voir comment ouvrir ou fermer une arborescence.</p>
<p>Par défaut la liste des tags est affichée dans l&rsquo;ordre d&rsquo;apparition du fichier source.<br />
Lorsque vous chercherez une fonction dont vous connaissez le début du nom, vous souhaiterez plutôt un affichage par ordre alphabétique.<br />
Rien de plus simple, il suffit de taper la touche s (sort) dans la taglist.<br />
Si vous tapez de nouveau sur cette touche, on bascule de nouveau sur l&rsquo;affichage classique.</p>
<p>Pour ouvrir un nouveau fichier, placez vous d&rsquo;abord dans la fenêtre du fichier source existant puis taper <strong>:e nouveau_fichier.c</strong>.<br />
Vous pouvez aussi taper la commande <strong>:TlistAddFiles nouveau_fichier.c</strong>. Cette commande permet aussi d&rsquo;ouvrir plusieurs fichiers en même temps, en précisant *.c par exemple.</p>
<p>Pour fermer un fichier, il suffira de faire un <strong>:bdelete</strong> (buffer delete).<br />
cf. <a href="http://blog.developpez.com/alex6/p9112/vim/editer_plusieurs_fichiers#more-12" title="Editer plusieurs fichiers">article sur l&rsquo;édition de plusieurs fichiers et la manipulation des buffers</a><br />
Plus simplement, vous pouvez positionner le curseur sur le fichier dans la Taglist et appuer sur la touche d.</p>
<p>Petite astuce: pour ouvrir facilement la Taglist ajouter ce code dans .vimrc :</p>
<p>map &lt;F8&gt; :TlistToggle</p>
<p>Comme vous l&rsquo;aurez compris, cela permet d&rsquo;ouvrir la Taglist par la touche F8 : très pratique !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilisation des fenêtres</title>
		<link>https://blog.developpez.com/alex6/p9129/vim/utilisation_des_fenetres</link>
		<comments>https://blog.developpez.com/alex6/p9129/vim/utilisation_des_fenetres#comments</comments>
		<pubDate>Sun, 01 Aug 2010 18:58:11 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Comme vous avez pu le remarquer lors de l&#8217;utilisation de l&#8217;aide vim (:help), il est possible de manipuler des fenêtres. Dans un premier temps, si vous éditez un seul fichier, puis tapez la commande :split, cela permet d&#8217;ouvrir une nouvelle fenêtre. La séparation horizontale est faite par une ligne en inverse vidéo. Le seul fichier [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Comme vous avez pu le remarquer lors de l&rsquo;utilisation de l&rsquo;aide vim (:help), il est possible de manipuler des fenêtres.<br />
Dans un premier temps, si vous éditez un seul fichier, puis tapez la commande <code class="codecolorer text default"><span class="text">:split</span></code>, cela permet d&rsquo;ouvrir une nouvelle fenêtre. La séparation horizontale est faite par une ligne en inverse vidéo. Le seul fichier ouvert est visible sur 2 fenêtres. Ceci permet par exemple de consulter les déclarations de variables dans une fenêtre, tout en se déplaçant dans la procédure sur l&rsquo;autre fenêtre.<br />
<span id="more-17"></span></p>
<p>Pour passer d&rsquo;une fenêtre à l&rsquo;autre, il suffit de taper Ctrl-W W.</p>
<p>La fermeture de la fenêtre courante s&rsquo;effectue simplement par la commande :close.<br />
Elle semble équivalente à la commande :q, à la seule différence que lors de la fermeture de la dernière fenêtre :close ne fermera pas vim.</p>
<p>Si vous souhaitez ne conserver que la fenêtre courante, et donc fermer toutes les autres, la commande <code class="codecolorer text default"><span class="text">:only</span></code> répondra à vos besoins. Bien évidemment si une des fenêtres contient des modifications non enregistrées, vous obtiendrez un message d&rsquo;erreur.</p>
<p>Dimensionner les fenêtres :<br />
Lorsque vous ouvrez un fichier dans une nouvelle fenêtre via la commande :5split nouveau_fichier.txt, ceci signifie que la fenêtre aura une hauteur de 5 lignes.</p>
<p>Pour modifier par la suite la taille, il suffit de taper <code class="codecolorer text default"><span class="text">Ctrl-W +</span></code> ou <code class="codecolorer text default"><span class="text">Ctrl-W -</span></code> pour augmenter ou diminuer la hauteur. De la même manière que pour la plupart des commandes vim, il est possible de quantifier l&rsquo;augmentation par <code class="codecolorer text default"><span class="text">5 Ctrl-W +</span></code></p>
<p>Pour spécifier une taille fixe, <code class="codecolorer text default"><span class="text">30 Ctrl-W _</span></code><br />
Si vous ne précisez pas la taille (30 en l&rsquo;occurrence), la fenêtre sera maximisée.</p>
<p>Il est certain que le redimensionnement des fenêtres au clavier n&rsquo;est pas des plus aisé. Il est donc possible d&rsquo;activer la souris (:set mouse=a) et de déplacer les barres de séparation via le pointeur.</p>
<p>Pour le partage vertical d&rsquo;écran, la commande :vsplit s&rsquo;utilise de la même manière que :split.</p>
<p>Pour passer d&rsquo;une fenêtre à l&rsquo;autre, il est possible d&rsquo;utiliser la commande Ctrl-W h|j|k|l (la barre verticale signifiant &lsquo;ou&rsquo;) qui permettra de déplacer le curseur dans la direction souhaitée.</p>
<p>Pour modifier la largeur de la fenêtre courante, il suffira de taper <code class="codecolorer text default"><span class="text">Ctrl-W</span></code>.<br />
La largeur sera fixée par la commande : <code class="codecolorer text default"><span class="text">20 Ctrl-W |</span></code></p>
<p>Lorsque vous ouvrez plusieurs fichiers au lancement de vim, il est possible d&rsquo;ouvrir chaque fichier dans une fenêtre séparée via la commande :<br />
<code class="codecolorer text default"><span class="text">vim -o fichier1.txt fichier2.txt fichier3.txt</span></code><br />
Pour ouvrir les fenêtres dans le sens vertical utiliser l&rsquo;option -O.</p>
<p>Si vos fichiers sont déjà ouverts dans vim (commande args), taper <code class="codecolorer text default"><span class="text">:all</span></code> pour utiliser le multifenêtrage sur les fichiers de ligne de commande. Pour faire la séparation verticalement, taper <code class="codecolorer text default"><span class="text">:vertical all</span></code>.</p>
<p>Il est aussi possible de préciser de quel côté vous souhaitez ouvrir une nouvelle fenêtre :</p>
<blockquote><p>
        :leftabove {cmd}        à gauche ou au-dessus de la fenêtre courante<br />
        :aboveleft {cmd}        idem<br />
        :rightbelow {cmd}       à droite ou en dessous de la fenêtre courante<br />
        :belowright {cmd}       idem<br />
        :topleft {cmd}          tout en haut ou à gauche de la fenêtre Vim<br />
        :botright {cmd}         tout en bas ou à droite de la fenêtre Vim
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pages man</title>
		<link>https://blog.developpez.com/alex6/p9766/vim/pages_man</link>
		<comments>https://blog.developpez.com/alex6/p9766/vim/pages_man#comments</comments>
		<pubDate>Fri, 25 Feb 2011 16:14:52 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Accéder aux pages man est aisé sous un shell. Il l&#8217;est moins sous vim étant donné qu&#8217;il faut systématiquement passer par la commande ! pour faire appel à un programme externe (vu dans le sujet précédent). :!man printf Nous allons donc voir comment accéder de la manière la plus simple et conviviale à cette aide [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Accéder aux pages man est aisé sous un shell.<br />
Il l&rsquo;est moins sous vim étant donné qu&rsquo;il faut systématiquement passer par la commande ! pour faire appel à un programme externe (vu dans le sujet précédent).<br />
<code class="codecolorer text default"><span class="text">:!man printf</span></code><br />
Nous allons donc voir comment accéder de la manière la plus simple et conviviale à cette aide indispensable.<br />
<span id="more-21"></span></p>
<p>Pour cela nous devrons charger un &lsquo;greffon&rsquo;, sorte de plugin typique à Vim.<br />
<code class="codecolorer text default"><span class="text">:source $VIMRUNTIME/ftplugin/man.vim</span></code></p>
<p>Il suffit ensuite d&rsquo;appeler la commande :<br />
<code class="codecolorer text default"><span class="text">:Man printf</span></code><br />
afin d&rsquo;accéder aux pages man dans une nouvelle fenêtre en split horizontal.<br />
Très pratique ! Il suffira ensuite d&rsquo;user de la commande Ctrl-W W pour basculer d&rsquo;une fenêtre à l&rsquo;autre.</p>
<p>Autre fonction intéressante :<br />
Via la commande \K, la page man s&rsquo;ouvrira en fonction du mot sous le curseur.<br />
Ceci rend la tâche on ne peut plus simple !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestion de versions sous vim</title>
		<link>https://blog.developpez.com/alex6/p10422/vim/gestion_de_versions_sous_vim</link>
		<comments>https://blog.developpez.com/alex6/p10422/vim/gestion_de_versions_sous_vim#comments</comments>
		<pubDate>Thu, 20 Oct 2011 23:09:26 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nombreux sont ceux qui utilisent un gestionnaire de versions sur des projets de grands envergure, sur lesquels de nombreuses personnes développent. Ceci permet de conserver une certaine cohérence sur le projet, de faire un retour arrière plus facilement, ou encore de fusionner le travail de plusieurs personnes sur une même source. Etant donné le nombre [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img src="http://blog.developpez.com/media/gestion-sources-versions-logiciels-L-7.jpg" width="448" height="134" alt="Gestion de versions" /></p>
<p>Nombreux sont ceux qui utilisent un gestionnaire de versions sur des projets de grands envergure, sur lesquels de nombreuses personnes développent.<br />
Ceci permet de conserver une certaine cohérence sur le projet, de faire un retour arrière plus facilement, ou encore de fusionner le travail de plusieurs personnes sur une même source.</p>
<p>Etant donné le nombre de plus en plus croissant de gestionnaires de versions, nous installerons un greffon plutôt générique : VCSCommand.</p>
<p><span id="more-23"></span></p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=90">VCSCommand</a> permet de dialoguer avec les outils suivants: CVS (historique !), SVN (CVS amélioré), SVK (SVN en mode décentralisé), git (Made in Torvalds), bzr (décentralisé aussi), Mercurial (décentralisé, écrit en Python).</p>
<p>Une fois l&rsquo;archive décompressée, 3 répertoires disponibles :<br />
doc/<br />
plugin/<br />
syntax/</p>
<p>Dans le dossier doc/ se trouve l&rsquo;aide vcscommand.txt qui vous indique de recopier les fichier .vim du répertoire plugin dans votre dossier plugin vim perso. Généralement il s&rsquo;agit de $HOME/.vim/plugin.</p>
<p>Vous pouvez ajouter vcscommand.txt dans l&rsquo;aide Vim en l&rsquo;ajoutant votre répertoire d&rsquo;aide perso ($HOME/.vim/doc). Raffraichissez ensuite l&rsquo;aide Vim par la commande <code class="codecolorer text default"><span class="text">:helptags $HOME/.vim/doc/</span></code></p>
<p>Ceci permet d&rsquo;accéder à l&rsquo;aide sur les commandes, par exemple <code class="codecolorer text default"><span class="text">:help VCSAdd</span></code></p>
<p>Les commandes générales (commit, update, log, etc.) commencent par VCS&#8230;<br />
Certaines commandes sont spécifiques au gestionnaire de versions, par exemple <code class="codecolorer text default"><span class="text">VCSCommandSVNDiffExt</span></code>.</p>
<p>Ces commandes s&rsquo;appliquent sur le buffer (ie. fichier) en cours d&rsquo;édition.<br />
Le résultat est affiché dans une fenêtre buffer temporaire.</p>
<p>Il est à noter que VCS n&rsquo;affichera pas de prompt pour vous demander votre login/motdepasse pour vous connecter au serveur. Une erreur d&rsquo;authentification s&rsquo;affichera. De ce fait, il vous faudra appeler le gestionnaire de version en mode console une première fois et demander l&rsquo;enregistrement du login/motdepasse.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Commande global, changement de casse, commandes externes</title>
		<link>https://blog.developpez.com/alex6/p9322/vim/commande_global</link>
		<comments>https://blog.developpez.com/alex6/p9322/vim/commande_global#comments</comments>
		<pubDate>Fri, 25 Feb 2011 15:42:54 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nous allons ici aborder quelques notions de base permettant de travailler sur un texte existant. Les modifications peuvent parfois nécessiter de faire appel à un programme externe. Commande global La commande :global permet de rechercher un motif particulier et d&#8217;exécuter une commande particulière sur la correspondance trouvée. Par exemple, si l&#8217;on souhaire remplacer le mot [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Nous allons ici aborder quelques notions de base permettant de travailler sur un texte existant. Les modifications peuvent parfois nécessiter de faire appel à un programme externe.<br />
<span id="more-20"></span></p>
<p><strong>Commande global</strong><br />
La commande :global permet de rechercher un motif particulier et d&rsquo;exécuter une commande particulière sur la correspondance trouvée.<br />
Par exemple, si l&rsquo;on souhaire remplacer le mot &lsquo;variable&rsquo; par &lsquo;constante&rsquo; au sein d&rsquo;un commentaire de type C++, il est possible d&rsquo;employer la commande suivante :</p>
<p><code class="codecolorer text default"><span class="text">:g+//+s/variable/constante/g</span></code></p>
<p>On recherche ici les caractères // (début de commentaire C++). Sur les lignes trouvées, on applique une substitution comme spécifié plus haut.<br />
Vous aurez remarqué qu&rsquo;on utilise le caractère + comme délimiteur (au lieu de / utilisé le plus souvent) pour des raisons de lisibilité.</p>
<p><strong>Changement de casse</strong></p>
<p>Pour passer du texte en minuscule ou en majuscule, il faut utiliser la commande <code class="codecolorer text default"><span class="text">gU</span></code> (majuscule) ou <code class="codecolorer text default"><span class="text">gu</span></code> (minuscule). Vous pouvez faire succéder la commande par <code class="codecolorer text default"><span class="text">w</span></code> qui changera la casse du mot sous le curseur (<code class="codecolorer text default"><span class="text">gUw</span></code> par exemple). Les objets textuels fonctionnent évidemment tout aussi bien.</p>
<p>Pour inverser la casse, il faut employer le caractère <code class="codecolorer text default"><span class="text">~</span></code> en lieu et place de <code class="codecolorer text default"><span class="text">u</span></code>.</p>
<p>Si vous doublez votre commande, ceci s&rsquo;appliquera à la ligne entière (<code class="codecolorer text default"><span class="text">gUgU</span></code> ou encore <code class="codecolorer text default"><span class="text">gUU</span></code>).</p>
<p><strong>Commandes externes</strong></p>
<p>Le caractère <code class="codecolorer text default"><span class="text">!</span></code> permet d&rsquo;appeler une commande externe de type unix de manière à effectuer tâche particulière que Vim ne sait pas faire.<br />
Si l&rsquo;on souhaite par exemple ajouter la date du jour dans le fichier, la commande unix &lsquo;date&rsquo; permet de nous faciliter la tâche.<br />
<code class="codecolorer text default"><span class="text">!!date +%d/%m/%y</span></code></p>
<p>Le point d&rsquo;exclamation en double permet de préciser à Vim que nous travaillons sur la ligne courante.<br />
Ensuite on retrouve notre commande date accompagnée de ses paramètres pour un affichage de la forme jour/mois/année.</p>
<p>Vous pouvez aussi lire le contenu de la sortie standard d&rsquo;une commande.<br />
<code class="codecolorer text default"><span class="text">:5read !ls -l</span></code></p>
<p>permet de lister les fichiers du répertoire courant et de les insérer à la ligne 5.</p>
<p>A l&rsquo;inverse, il est possible d&rsquo;envoyer sur l&rsquo;entrée standard d&rsquo;un programme externe une partie de texte.<br />
:write !wc -w<br />
Ceci affichera le nombre de mots du buffer en cours.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remplacement</title>
		<link>https://blog.developpez.com/alex6/p9278/vim/remplacement</link>
		<comments>https://blog.developpez.com/alex6/p9278/vim/remplacement#comments</comments>
		<pubDate>Thu, 30 Sep 2010 13:01:12 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[:[plage]substitute/source/cible/[drapeaux] Le mot-clé substitute n&#8217;est presque jamais tapé complétement. Généralement on utilise le diminutif s. Voici un exemple d&#8217;utilisation : :%s/developper/developpez/ Ceci remplacera la première occurence de &#8216;developper&#8217; par &#8216;developpez&#8217; sur toutes les lignes (%). Sur le texte suivant : Sur le site developper.com, il est possible de parler de langages sur lesquels vous developper. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><code class="codecolorer text default"><span class="text">:[plage]substitute/source/cible/[drapeaux]</span></code></p>
<p>Le mot-clé substitute n&rsquo;est presque jamais tapé complétement. Généralement on utilise le diminutif <code class="codecolorer text default"><span class="text">s</span></code>.<br />
Voici un exemple d&rsquo;utilisation :</p>
<blockquote><p>:%s/developper/developpez/</p></blockquote>
<p>Ceci remplacera la première occurence de &lsquo;developper&rsquo; par &lsquo;developpez&rsquo; sur toutes les lignes (%).<br />
Sur le texte suivant :</p>
<blockquote><p>Sur le site developper.com, il est possible de parler de langages sur lesquels vous developper.<br />
Alors n&rsquo;hésitez pas ! developper !
</p></blockquote>
<p>L&rsquo;application de la commande précédente donnera :</p>
<blockquote><p>Sur le site developpez.com, il est possible de parler de langages sur lesquels vous developper.<br />
Alors n&rsquo;hésitez pas ! developpez !
</p></blockquote>
<p><span id="more-2"></span><br />
Si vous ne précisez pas de plage, le remplacement se fera sur la ligne courante uniquement.<br />
Pour remplacer toutes les occurrences de la ligne, il suffit d&rsquo;utiliser le flag &lsquo;g&rsquo; en fin de commange.<br />
<code class="codecolorer text default"><span class="text">:%s/developper/developpez/g</span></code></p>
<p>Un autre flag plus usité est le flag &lsquo;c&rsquo; qui permet de valider (ou non) le remplacement de chaque occurrence.<br />
A chaque occurrence trouvé, il sera demandé à l&rsquo;utilisateur une réponse dont voici la liste :</p>
<table>
<tr>
<td><strong>Commande</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>y</td>
<td>Effectuer le changement</td>
</tr>
<tr>
<td>n</td>
<td>Ne pas faire le changement</td>
</tr>
<tr>
<td>a</td>
<td>Faire le changement pour toutes occurrences qui suivent</td>
</tr>
<tr>
<td>q</td>
<td>Quitter le remplacement (ne rien faire)</td>
</tr>
<tr>
<td>l</td>
<td>Dernier changement puis quitter</td>
</tr>
<tr>
<td>Ctrl-E</td>
<td>Faire défiler d&rsquo;une ligne vers le haut</td>
</tr>
<tr>
<td>Ctrl-Y</td>
<td>Faire défiler d&rsquo;une ligne vers le bas</td>
</tr>
</table>
<p><strong>Motif source</strong><br />
Dans le motif source, vous pouvez utilisez des expressions régulières telles que ^Developpez qui ne recherchera le mot Developpez qu&rsquo;en début de ligne.<br />
Si dans votre motif source, vous devez y placer le caractère /, vous devrez l&rsquo;annihiler par un antislash \.</p>
<blockquote><p>:s/\//./g</p></blockquote>
<p>Ceci permet de remplacer tous les <code class="codecolorer text default"><span class="text">/</span></code> par <code class="codecolorer text default"><span class="text">.</span></code> sur la ligne courante.</p>
<p>Autre solution, il est d&rsquo;utiliser un autre caractère de séparation. Par exemple le caractère *.</p>
<blockquote><p>:s*/*.*g</p></blockquote>
<p><strong>Motif plage</strong><br />
Détaillons maintenant le motif de plage. Nous connaissons % qui permet de parcourir l&rsquo;ensemble du fichier.<br />
Il existe une autre écriture dont l&rsquo;effet est strictement identique : <code class="codecolorer text default"><span class="text">:1,$s/...</span></code><br />
<code class="codecolorer text default"><span class="text">1</span></code> signifie la première ligne du fichier<br />
<code class="codecolorer text default"><span class="text">$</span></code> signifie la dernière ligne du fichier</p>
<p>Nous avons donc simplement spécifier un interval de lignes.<br />
. signifie la ligne courante<br />
Ainsi, <code class="codecolorer text default"><span class="text">:.,$s/...</span></code> permet d&rsquo;indiquer un interval compris entre la ligne courante et la fin du fichier.<br />
On peut aussi utiliser :</p>
<table>
<tr>
<td valign="top">les numéros de ligne</td>
<td> <code class="codecolorer text default"><span class="text">:5,10s/...</span></code></td>
</tr>
<tr>
<td valign="top">ajouter/soustraire des lignes</td>
<td valign="top"> <code class="codecolorer text default"><span class="text">:.+3,$-4s/...</span></code> Recherche à partir de la 3ème ligne sous le curseur jusqu&rsquo;à l&rsquo;antépénultième ligne.</td>
</tr>
<tr>
<td valign="top">des motifs de recherche (et oui!)</td>
<td> <code class="codecolorer text default"><span class="text">:?^void .\+(.*)?,/^void .\+(.*)/-1s/cpt/compteur/g</span></code> Recherche la déclaration de la fonction vers le haut jusqu&rsquo;à la ligne précédent la déclaration suivante.<br />
En ce qui concerne les expressions régulières, vous pouvez vous référer au chapitre &laquo;&nbsp;Expressions rationnelles et commandes de recherche&nbsp;&raquo; du sommaire principal pour davantage d&rsquo;informations.</td>
</tr>
<tr>
<td valign="top">les marqueurs</td>
<td> <code class="codecolorer text default"><span class="text">:'a,'bs/...</span></code> (cf. billet <a href="http://blog.developpez.com/alex6/p9114/vim/utiliser-les-marques/">Utilisation des marques</a>).</td>
</tr>
<tr>
<td valign="top">les sélections du mode visuel</td>
<td>Sélectionner la plage en mode visuel (cf. billet <a href="http://blog.developpez.com/alex6/p9059/vim/mode-visuel/">Mode visuel</a>) puis taper <code class="codecolorer text default"><span class="text">:</span></code>. Vim affichera automatiquement <code class="codecolorer text default"><span class="text">:'&lt;,'&gt;</span></code> pour indiquer qu&rsquo;il a bien pris en compte la sélection. Vous pouvez alors taper la suite de la commande <code class="codecolorer text default"><span class="text">s/...</span></code></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recherche</title>
		<link>https://blog.developpez.com/alex6/p9279/vim/recherche</link>
		<comments>https://blog.developpez.com/alex6/p9279/vim/recherche#comments</comments>
		<pubDate>Fri, 24 Sep 2010 20:58:56 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une des fonctions primordiales d&#8217;un éditeur est sa capacité rechercher et substituer des chaines de caractères. Vim est assez bien pourvu de ce côté. Elle est de plus très simple à utiliser puisqu&#8217;il suffit de taper &#8216;/&#8217; en mode commande pour voir apparaître en bas de l&#8217;écran ce caractère. Il suffit ensuite de taper la [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une des fonctions primordiales d&rsquo;un éditeur est sa capacité rechercher et substituer des chaines de caractères. Vim est assez bien pourvu de ce côté.<br />
Elle est de plus très simple à utiliser puisqu&rsquo;il suffit de taper &lsquo;/&rsquo; en mode commande pour voir apparaître en bas de l&rsquo;écran ce caractère. Il suffit ensuite de taper la chaine à rechercher puis de valider par la touche Entrée.<br />
Vim cherchera la prochaine occurrence à partir du curseur en direction de la fin du fichier.</p>
<p>En tapant <code class="codecolorer text default"><span class="text">n</span></code>, la prochaine occurrence sera recherchée. Sa version majuscule permettra de chercher dans le sens contraire (ie. vers le début du fichier).<br />
Il est possible d&rsquo;utiliser les quantifieurs. La commande <code class="codecolorer text default"><span class="text">4n</span></code> permettra de rechercher la 4ème occurrence.<br />
<span id="more-1"></span></p>
<p>Si vous souhaitez rechercher vers le haut, il est possible d&rsquo;utiliser la commande <code class="codecolorer text default"><span class="text">?</span></code> en lieu et place de <code class="codecolorer text default"><span class="text">n</span></code>.</p>
<p>Une option revient souvient dans la fonction de recherche des éditeurs de texte : Ignorer la casse, c&rsquo;est-à-dire ne pas faire la distinction minuscule/majuscule.<br />
Voici la commande associée à cette option :</p>
<blockquote><p>:set ignorecase</p></blockquote>
<p>Pour repasser en mode &laquo;&nbsp;prise en compte de la casse&nbsp;&raquo; :</p>
<blockquote><p>:set noignorecase</p></blockquote>
<p>A noter qu&rsquo;il existe un historique des recherches récentes. Pour y avoir accès, il suffit simplement de taper / puis la flèche directionnelle vers le haut.<br />
Les touchées fléchées Haut et Bas permettront de naviguer dans l&rsquo;historique.</p>
<p>Une astuce qui vous fera gagner bien du temps.<br />
Si vous recherchez un mot déjà visible à l&rsquo;écran, placez le curseur dessus et tapez la commande *. Ceci permettra de rechercher sa prochaine occurrence directement sans avoir à taper le mot. Pour la recherche dans le sens opposé, la commande # fera l&rsquo;équivalent. La recherche ne sera effectuée que pour les mots entiers uniquement.<br />
Il y aura donc forcément un caractère d&rsquo;espacement qui précède et succède le mot.</p>
<p>Pour appliquer une recherche sur un mot entier, il faut utiliser les éléments \< et \> qui, vous l&rsquo;aurez deviné permettent d&rsquo;indiquer un espacement en début et fin de mot.</p>
<p><u>Exemple:</u><br />
<code class="codecolorer text default"><span class="text">/\&lt;vim\&gt;</span></code><br />
Recherche le mot vim dans le fichier. S&rsquo;il existe le mot &lsquo;vime&rsquo; dans le fichier, celui-ci ne sera pas trouvé.</p>
<p><strong>Mise en surbrillance des éléments trouvés</strong></p>
<p>De plus en plus, les éditeurs affichent en couleur les éléments trouvés.<br />
Vim fait de même via la commande <code class="codecolorer text default"><span class="text">:set hlsearch</span></code>.<br />
Les éléments restent en couleur jusqu&rsquo;à la prochaine recherche.<br />
Pour supprimer cette surbrillance, <code class="codecolorer text default"><span class="text">:nohlsearch</span></code> vous rendra bien des services.</p>
<p><strong>Recherche incrémentale</strong></p>
<p>La recherche incrémentale permet de rechercher le texte au fur et à mesure de sa saisie. A chaque caractère saisi, vim positionnera le curseur sur la prochaine correspondante, ou restera à sa place si le texte sous le curseur est identique au texte recherché.<br />
<code class="codecolorer text default"><span class="text">:set incsearch</span></code></p>
<p>Par défaut Vim fait boucler la recherche. Arrivé en fin de fichier, la recherche recommence automatiquement en début de fichier.<br />
Pour désactiver ce mode, tapez <code class="codecolorer text default"><span class="text">:set nowrapscan</span></code>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enregistrement de commandes</title>
		<link>https://blog.developpez.com/alex6/p9161/vim/enregistrement_de_commandes</link>
		<comments>https://blog.developpez.com/alex6/p9161/vim/enregistrement_de_commandes#comments</comments>
		<pubDate>Sat, 11 Sep 2010 11:45:49 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nous avions vu précédemment que la commande &#171;&#160;.&#160;&#187; permettait de répéter une commande. Il se peut cependant que vous souhaitiez répéter une suite de plusieurs commandes, un peu comme une macro que vous auriez enregistré. C&#8217;est tout à fait possible avec Vim puisque les commandes doivent être enregistrées dans un registre nommé par une lettre [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Nous avions vu précédemment que la commande &laquo;&nbsp;.&nbsp;&raquo; permettait de répéter une commande.<br />
Il se peut cependant que vous souhaitiez répéter une suite de plusieurs commandes, un peu comme une macro que vous auriez enregistré.<br />
C&rsquo;est tout à fait possible avec Vim puisque les commandes doivent être enregistrées dans un registre nommé par une lettre alphabétique.<br />
Si vous tapez qa, l&rsquo;enregistrement démarre sur le registre a et vous voyez la barre d&rsquo;état se mettre à jour de la manière suivante :</p>
<p><img src="http://blog.developpez.com/media/vim_enreg_cmde_02.jpg" width="851" height="265" alt="Enregistrement d'une commande" /></p>
<p><span id="more-19"></span><br />
Vous tapez ensuite toutes les commandes et saisies de texte que vous souhaitez appliquer.<br />
Terminez enfin votre enregistrement en tapant simplement q en mode commande.</p>
<p>Supposons que vous souhaitiez faire précéder les noms des personnes par &laquo;&nbsp;M. &nbsp;&raquo; et passer en majuscule toutes les lettres du nom.<br />
Positionnez le curseur sur le nom de la première personne (Pierre), puis tapez les commandes suivantes :</p>
<table>
<tr>
<td>qa</td>
<td>Commence l&rsquo;enregistrement du registre a</td>
</tr>
<tr>
<td>gUaw</td>
<td>passe en majuscule (gU) le mot complet (&laquo;&nbsp;aw&nbsp;&raquo; pour &laquo;&nbsp;a word&nbsp;&raquo; souvenez-vous !)</td>
</tr>
<tr>
<td>i</td>
<td>activation du mode insertion</td>
</tr>
<tr>
<td>M.</td>
<td>ajout du texte &laquo;&nbsp;M.&nbsp;&raquo;</td>
</tr>
<tr>
<td>&lt;Echap&gt;</td>
<td>retour au mode commande</td>
</tr>
<tr>
<td>j</td>
<td>passage à la ligne suivante</td>
</tr>
<tr>
<td>q</td>
<td>fin d&rsquo;enregistrement de la commande</td>
</tr>
</table>
<p>Maintenant nous pouvons appliquer la commande aux noms suivants.<br />
Pour rappeler la commande du registre a, tapez @a.<br />
Vous devrez ensuite taper @a pour chacun des noms à modifier.</p>
<p>A noter que la commande de répétition &laquo;&nbsp;.&nbsp;&raquo; ne fonctionne pas sur la commande @a.<br />
En revanche, il est possible de taper @@ pour rappeler le registre utilisé dernièrement.<br />
Vous pourrez faire précéder le rappel de commande par un quantifieur.<br />
Dans notre exemple, nous pouvons donc faire 2@a pour les 2 noms restants.</p>
<p>Petit point d&rsquo;information qui vous permettra de connaître les fins fonds de Vim.<br />
Le registre dans lequel nous avons enregistré notre commande peut être collé, de la même manière qu&rsquo;un copier-coller.<br />
Si vous tapez maintenant &laquo;&nbsp;ap, vous verrez apparaître la commande suivante : <code class="codecolorer text default"><span class="text">gUawiM.^[j</span></code></p>
<p>Vous pouvez tout à fait enregistrer une commande dans un registre en tapant la liste des actions puis en se plaçant en début de commande et en tapant <code class="codecolorer text default"><span class="text">&quot;ay$</span></code>. Ceci copiera la sélection depuis le curseur jusqu&rsquo;à la fin de la ligne ($) pour le stocker dans le registre a.</p>
<p>Si vous souhaitez compléter une commande dans un registre, tapez qA par exemple. Ceci permettra dans notre exemple d&rsquo;ajouter des commandes à notre commande existante.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparaison de fichiers</title>
		<link>https://blog.developpez.com/alex6/p9130/vim/comparaison_de_fichiers</link>
		<comments>https://blog.developpez.com/alex6/p9130/vim/comparaison_de_fichiers#comments</comments>
		<pubDate>Mon, 06 Sep 2010 11:07:11 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici une des fonctions les plus importantes lorsqu&#8217;il s&#8217;agit s&#8217;agit par exemple de comparer plusieurs versions de source. Pour cela il est d&#8217;appeler le programme vimdiff avec comme paramètres les 2 fichiers à comparer. $ vimdiff test.txt test2.txt Voici le résultat observé : Par défaut, la coloration syntaxique est active, ce qui rend la lecture [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voici une des fonctions les plus importantes lorsqu&rsquo;il s&rsquo;agit s&rsquo;agit par exemple de comparer plusieurs versions de source.<br />
Pour cela il est d&rsquo;appeler le programme vimdiff avec comme paramètres les 2 fichiers à comparer.</p>
<p>$ vimdiff test.txt test2.txt</p>
<p>Voici le résultat observé :</p>
<p><img src="http://blog.developpez.com/media/vimdiff.jpg" width="851" height="349" alt="vimdiff" /><br />
<span id="more-18"></span><br />
Par défaut, la coloration syntaxique est active, ce qui rend la lecture très intuitive.<br />
On constate par exemple que la couleur violette indique une modification d&rsquo;une partie de la ligne, le rouge indiquant le texte ajouté (&nbsp;&raquo; pour les non initiés&nbsp;&raquo; dans notre exemple).<br />
Les lignes avec des tirets &#8212;&#8212;- signifie que la ligne est supprimée.</p>
<p>Par ailleurs, on constate la dernière ligne commence par &laquo;&nbsp;+&nbsp;&raquo; au niveau de la marge gauche. Celle-ci indique un repli de 27 lignes strictement identiques sur les 2 fichiers.<br />
Cela facilite grandement la lecture sur des fichiers importants.<br />
Pour ouvrir le repli, vous pouvez appuyer sur <code class="codecolorer text default"><span class="text">zo</span></code>. Le bloc dissimulé est alors affiché mais il est toujours possible de fermer ce repli via la commande <code class="codecolorer text default"><span class="text">zc</span></code> n&rsquo;importe où dans le bloc.<br />
A noter que cette fonction n&rsquo;existe pas sur plugin <em>Compare</em> de np++ (ie. Notepad++).</p>
<p>Si vous souhaitez lancer une différence de fichier lorsque vous êtes déjà dans vim, ouvrez le premier fichier :<br />
<code class="codecolorer text default"><span class="text">:edit test.txt</span></code><br />
Puis utilisez la commande suivante:<br />
<code class="codecolorer text default"><span class="text">:vertical diffsplit test2.txt</span></code><br />
La commande :vertical permet de faire une séparation verticale. Par défaut la séparation est horizontale.</p>
<p>Si vous souhaitez appliquer un fichier de patch à un fichier existant et observer les différences, il suffit d&rsquo;utiliser la commande <code class="codecolorer text default"><span class="text">:vertical diffpatch fichier_patch.diff</span></code></p>
<p>Autre commande indispensable, pouvoir naviguer rapidement d&rsquo;une différence à une autre.<br />
]c    Différence suivante<br />
[c    Différence précédente</p>
<p>Vous aurez évidemment remarqué que lorsque vous faites défilé le curseur sur l&rsquo;un des deux fichiers, le défilement s&rsquo;effectue sur les deux fichiers en même temps.<br />
Il est possible de désactiver cette fonction par l&rsquo;option <code class="codecolorer text default"><span class="text">:set noscrollbind</span></code></p>
<p>Si vous modifiez les fichiers lors d&rsquo;une comparaison, il est fort possible que la surbrillance ne soit pas à jour.<br />
Pour rafraîchir cette surbrillance, tapez <code class="codecolorer text default"><span class="text">:diffupdate</span></code></p>
<p>Pour appliquer la différence sur l&rsquo;autre fichier, utilisez la commande dp (diff put).<br />
Inversement la commande do applique la modification de l&rsquo;autre fichier sur le fichier courant.<br />
Ces modifications s&rsquo;appliquent sur les buffers et non les fichiers sur disque.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Premier programme Open GL</title>
		<link>https://blog.developpez.com/alex6/p9164/vim/premier_programme_open_gl</link>
		<comments>https://blog.developpez.com/alex6/p9164/vim/premier_programme_open_gl#comments</comments>
		<pubDate>Thu, 29 Jul 2010 20:23:17 +0000</pubDate>
		<dc:creator><![CDATA[GMI3]]></dc:creator>
				<category><![CDATA[opengl]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nous allons maintenant écrire un petit programme en C utilisant la librairie Open GL. Il est nécessaire pour cela d&#8217;installer quelques paquets. apt-get install libglut3-dev => librairie GLUT (GL Utility Toolkit) qui permet entre autres d&#8217;intéragir avec la souris, le clavier, etc&#8230; Ceci installera par dépendences la librairie OpenGL. apt-get install manpages-fr-dev => Documentation de [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Nous allons maintenant écrire un petit programme en C utilisant la librairie Open GL.<br />
Il est nécessaire pour cela d&rsquo;installer quelques paquets.</p>
<table>
<tr>
<td valign="top" width="40%"><code class="codecolorer text default"><span class="text">apt-get install libglut3-dev</span></code></td>
<td>  => librairie GLUT (GL Utility Toolkit) qui permet entre autres d&rsquo;intéragir avec la souris, le clavier, etc&#8230; Ceci installera par dépendences la librairie OpenGL.</td>
</tr>
<tr>
<td><code class="codecolorer text default"><span class="text">apt-get install manpages-fr-dev</span></code></td>
<td> => Documentation de la glibc en français</td>
</tr>
</table>
<p><span id="more-24"></span><br />
Nous utiliserons comme exemple le fichier <a href="http://garce.gti.free.fr/blog/test1.c">test1.c</a> qui est un programme en openGL.<br />
Lorsque nous ouvrons le fichier dans vim, il n&rsquo;y a par défaut aucune coloration syntaxique.<br />
Fort heureusement, la commande <code class="codecolorer text default"><span class="text">:syntax enable</span></code> nous facilite bien les choses car elle détecte le language utilisé. Pour activer cette option systématiquement, il suffit d&rsquo;ajouter la commande dans le fichier .vimrc de votre répertoire $HOME.</p>
<p>Nous obtenons ainsi l&rsquo;aperçu suivant :</p>
<p><img src="http://blog.developpez.com/media/vim_coloration_syntaxique_02.jpg" width="697" height="535" alt="Coloration syntaxique" /></p>
<p>On peut observer les fichiers d&rsquo;entêtes (fichiers .h) OpenGL inclus au début du fichier.</p>
<p>Passons maintenant à la compilation.<br />
Pour cela, tapez la commande :<br />
<code class="codecolorer text default"><span class="text">gcc test1.c &nbsp;-lGL -lglut -lGLU &nbsp;-lX11 -lm</span></code></p>
<p>Les options -l spécifient les librairies statiques à charger pour la compilation.</p>
<p>Sur certains systèmes Linux, il vous faudra peut-être préciser les 2 options suivantes :<br />
-I/usr/X11R6/include<br />
-L/usr/X11R6/lib</p>
<p>-I indique le répertoire des fichiers d&rsquo;entête (*.h)<br />
-L indique le répertoire des librairies (lib*.a)</p>
<p>A noter que sous Debian ces 2 options sont inutiles car les librairies X sont dans /usr/lib et les entêtes dans /usr/include.</p>
<p>Ceci nous produit donc le fichier a.out que nous pouvons exécuter :<br />
<img src="http://blog.developpez.com/media/premier_prog.jpg" width="520" height="540" alt="Premier programme OpenGL !" /></p>
<p>Vous aurez remarqué de suite que l&rsquo;exécution est trop rapide. Nous pouvons par conséquent ajouter un sleep qui permettra de temporiser à chaque cycle d&rsquo;affichage.</p>
<p>En tapant <code class="codecolorer text default"><span class="text">man 3 sleep</span></code>, vous tombez sur la doc de développement de la glibc.</p>
<p><img src="http://blog.developpez.com/media/man_sleep.jpg" width="697" height="352" alt="Manpage de sleep()" /></p>
<p>En regardant la signature de la fonction, on s&rsquo;aperçoit que le temps est exprimé en secondes entières (unsigned int).<br />
Fort heureusement, il existe une autre fonction usleep qui elle permet de faire en sleep mais en microsecondes.<br />
Il faudra donc comme indiqué dans la manpage ajouter l&rsquo;entête unistd.h.</p>
<p>Après avoir ajouté l&rsquo;entête unistd.h en début du fichier test1.c, vous devrez ajouter l&rsquo;appel à usleep au sein de la fonction myIdle().</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">void myIdle() <br />
{ <br />
&nbsp; usleep(10000); <br />
&nbsp; myAngle+=0.5; <br />
&nbsp; myAngle2+=0.25; <br />
&nbsp; glutPostRedisplay(); <br />
}</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
