Bienvenue sur Think-Underground.com

Logiciels libres, photographie, musique, énigmes, humour et coups de cœur

lundi 31 mai 2010

Vim : où trouver des dictionnaires

J'avais présenté comment activer la correction orthographique sous Vim et accessoirement comment vous créer un dictionnaire.

J'ai trouvé récemment une liste officielle de dictionnaires pour Vim. C'est une solution simple et efficace pour disposer de dictionnaires dans plusieurs langues avec un minimum d'effort.

lundi 8 mars 2010

Vim : remplacer une sélection dans toute une page

Vim Voici une petite astuce pour les adeptes de la commande :%s/rechercher/remplacer/g. Imaginez que vous voulez remplacer un texte un peu long par un autre texte : vous n'allez pas vous amuser à taper l'intégralité du texte à remplacer dans votre commande. Pour ça, une astuce plus simple consiste à faire une sélection visuelle, la copier, puis utiliser :%s/Ctrl+R0/replacer/g. En effet, Ctrl+R permet de coller, en ligne de commande, le contenu d'un registre, et le registre 0 correspond au dernier élément copié.

Comme d'habitude il existe sûrement une bonne dizaines d'alternatives, et votre version m'intéresse :D

vendredi 5 juin 2009

Vim : conserver sa sélection visuelle après une manipulation

Si vous utilisez régulièrement Vim, peut-être avez-vous déjà (comme moi) grogné après que Vim vous ait « perdu » votre sélection visuelle suite à une commande appliquée à cette sélection (indentation, rechercher/remplacer, filtre quelconque, …)

En farfouillant la doc, je viens de tomber sur le petit raccourci gv (comme go visual), simplissime mais terriblement efficace, qui récupère la dernière sélection visuelle.

En espérant que ça vous soit aussi utile que ça me l'aurait été et que ça me sera !

mercredi 3 juin 2009

Un livre de recettes pour Vim

Certainement moins exhaustif que le Vimbook, j'ai découvert grâce à DailyVim un petit livre de recettes pour Vim qui vaut vraiment le détour. Lisez-le et prenez-en de la graine ;)

jeudi 23 avril 2009

Vim : stocker une configuration spéciale pour éditer un fichier directement dans ce fichier

À l'origine, je voulais présenter dans ce billet comment faire de l'édition de texte sous Vim. Je me suis finalement résigné à un article moins rébarbatif (si, si, croyez-moi), mais qui vous sera au moins aussi utile je l'espère. Pour l'édition de texte, je vous laisse vous rendre comme des grands sur :help usr_25.

Commencez par taper :help et descendez en bas de la page (avec par exemple G, pour ceux qui ne connaissent pas la touche) et constatez la présence d'une ligne un peu étrange.

vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:

Tiens tiens, c'est quoi ça ?

Essayons :help vim… magie, nous apprenons que cette petite ligne s'appelle une modeline. Au passage, le saviez-vous, si vous tapez :help sujet suivi de Ctrl-D (avant d'appuyer sur Entrée), Vim vous présentera toutes les entrées de l'aide qui parlent de sujet.

Une modeline donc, c'est une petit ligne qui permet de stocker dans un fichier la configuration de Vim désirée pour ce fichier. Très pratique si vous décidez par exemple d'avoir une tabulation de 2 espaces dans un fichier PHP alors que d'habitude vous utilisez une tabulation de largeur 4. Le but n'est pas d'insérer une ligne de ce type dans chaque fichier (reportez vous plutôt à filetype si vous voulez changer globalement la configuration de Vim pour tous vos fichiers PHP), mais bien de changer le comportement pour quelques fichiers isolés.
Par l'exemple :

 vim:shiftwidth=2:tabstop=2
// vim:shiftwidth=2:tabstop=2
/* vim:set shiftwidth=2:tabstop=2: */

Les deux lignes du dessous ci-dessus montrent qu'il est possible d'entourer cette ligne magique de texte, ce qui permet de la placer par exemple dans les commentaires de votre code, et donc d'éviter les erreurs de syntaxe… Plutôt pratique !

Notez bien qu'il faut au moins un espace avant le vim: initial, et que la syntaxe diffère légèrement si vous voulez pouvoir rajouter du texte après votre modeline.

Pour manipuler certains fichiers de texte par exemple, j'aime utiliser les options suivantes :

 vim:fo=troaqwn1:tw=78:sw=2:sts=2:et:js:ai:lcs=nbsp\:⋅:list:spl=fr:spell:

En bref, dans l'ordre :

  • formatoptions : je vous invite à taper :help fo-table pour comprendre toutes les options. a en particulier se charge de reformater les lignes automatiquement. w, autre option très intéressante, détermine que toute ligne qui ne finit pas par un espace annonce un nouveau paragraphe. Sans ça le reformatage automatique considèrera tous les blocs de textes qui ne sont pas séparés par une ligne vide (saut de ligne) comme des paragraphes solidaires… et ce n'est pas ma notion naturelle de paragraphe ;
  • textwidth détermine au bout de combien de caractères maximum la ligne est coupée en deux ;
  • shiftwidth indique la taille d'une tabulation ;
  • softtabstop indique combien d'espaces sont considérés comme une tabulation (ici supprimer 2 espaces en début de lignes se fera en un seul appui sur la touche retour arrière, comme si vous aviez une tabulation à la place) ;
  • expandtab insère des espaces au lieu de tabulations ;
  • joinspaces ajoute deux espaces et non un seul après les signes de ponctuation marquant une fin de phrase lorsque vous utilisez J pour joindre plusieurs lignes. J'aime beaucoup mettre deux espaces entre mes phrases ; c'est plus anglo-saxon que français, mais je trouve que c'est plus lisible.
  • autoindent indente une nouvelle ligne au même niveau que la précédente ;
  • pour listchars et list voyez Vim : afficher les espaces insécables ou d'autres caractères exotiques
  • spl=fr spell active la correction orthographique en Français (voyez La correction orthographique sous Vim)

Encore une fois, je vous recommande fortement de passer par :help usr_25 mais aussi de touiller les options ci-dessus pour mieux comprendre les possibilités d'édition de texte sous Vim (centrer un texte, le jutifier, manipuler des tableaux, …)

Si vous créez souvent des fichiers dans lesquels vous désirez une modeline de votre choix, vous pouvez rédiger un modèle (template) avec cette ligne. Je vous redirige par exemple vers un article de fredgnix. Attention, dans l'article, ne vous trompez pas, il faut lire 0r (avec un zéro) et pas Or (avec un O).

Voilà, j'espère que ça vous servira. Évitez juste d'en abuser si vous travaillez en équipe sur des fichiers, les autres risquent de vous en vouloir.

mercredi 15 avril 2009

Vim : aligner les cellules d'un tableau

Cet article est destiné aux gens qui ont besoin d'aligner un caractère particulier dans Vim (par exemple pour aligner différentes cellules d'un tableau, ou pour les psychopathes qui comme moi alignent les signes égal en programmation), ainsi qu'à tous ceux qui aiment bien les astuces matoises.

Commençons par un avant-goût

Avant :

Titre | Note
============
Doom | 5/5
Vietcong | 4/5 
Project IGI 2 | 1/5

Après :

Titre         | Note
====================
Doom          | 5/5
Vietcong      | 4/5 
Project IGI 2 | 1/5

ou, plus ridicule...

Avant :

int ma_variable = 0;
int autre_variable = -1;

Après :

int ma_variable    = 0;
int autre_variable = -1;

Si ça vous paraît un peu cocasse, saugrenu et dérisoire, c'est parce que vous n'avez jamais eu besoin de le faire sur un tableau de 2000 lignes...

Dis papa, comment on fait...

On va prendre l'exemple du tableau (mais il suffit de remplacer | par = pour l'exemple des signes égal).

Commencez par faire un petit replacement :

:%s/|/                                  |/

Ceci a pour objectif de rajouter plein d'espaces avant le signe.

Il vous faut un peu plus d'espaces que votre case la plus longue (ici Project IGI 2). J'aime bien la méthode dite du pif. Certains préfèrerons peut-être se mettre sur la ligne la plus longue et faire un :

yypv$hr dd

pour ensuite replacer la série d'espaces précédente par un <Ctrl+r>"... c'est vous qui voyez[1]...

Ensuite, vous allez supprimer tous les espaces inutiles (c'était bien la peine).

:%s/\%15c\s*//

Ici 15 est le nombre de caractère après lesquels je veux tronquer mes espaces. Il suffit de se placer à la fin de la case la plus longue et de noter le nombre que vous donne gentiment Vim en bas à droite.

Et pouf, c'est bon.

Ouais, l'arnaque... C'est pas si automatique que ça !

C'est vrai, mais il s'agissait d'un premier alignement (par exemple parce que vous n'avez pas commencé à aligner vos symboles dès le début). Une fois que le texte est déjà aligné, c'est surtout l'ajout (ou la suppression) d'une ligne qui va vous embêter, car il faudra tout réaligner. Par exemple pour la suite on va supprimer Project IGI.

Deux astuces :

  1. soit vous décidez de réaligner vos lignes en faisant un rechercher/replacer et en supprimant/ajoutant le bon nombre d'espaces...
  2. soit vous faites une sélection par blocs !

Sélection par blocs ?

  • Placez-vous à l'endroit marqué d'une croix.
Titre       x | Note
====================
Doom          | 5/5
Vietcong      | 4/5
  • Faites Ctrl+v. Vim vous indique en bas à gauche VISUEL BLOC.
  • Déplacez-vous à l'endroit marqué d'une croix (vous devriez voir une sélection rectangulaire englobant plein d'espaces) :
Titre         | Note
====================
Doom          | 5/5
Vietcong x    | 4/5
  • Faites d pour supprimer le tout.

Inversement, pour ajouter des espaces, faites de même une sélection en rectangle puis faites I (i majuscule, comme Insertion) puis tapez le nombre d'espaces nécessaire suivi de Esc. Les espaces seront insérés sur toutes les lignes.

Et ensuite ?

Si vous avez une autre solution, je suis preneur.

Vous trouverez d'autres exemples sur le wiki de Vim sur Wikia.

Si vous utilisez souvent cette astuce je vous recommande même d'écrire une petite fonction qui le fait tout seul et qu'il n'y aura plus qu'à rattacher à une touche de votre clavier... mais ça c'est une autre histoire.

Notes

[1] yyp duplique la ligne courante, v$h sélectionne cette ligne sauf le dernier caractère, r replace toute cette ligne par des espaces, dd la supprime, <Ctrl+r>" colle cette ligne pendant l'écriture d'une commande... et c'est beaucoup plus rapide à faire qu'à écrire ;)

- page 1 de 3