LBSNDD : le blog sans nom de dimitri

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 4 août 2006

Le Vi(m)seur ou mettre en surbrillance la ligne et la colonne courante

Vim 7 uniquement !

J'ai parfois pesté contre Vim (bah oui, nul logiciel n'est parfait, mais les imperfections sont parfois liées aux usages) lorsque, faisant une recherche de mot (/mot) je ne retrouvais pas mon curseur au milieu d'un tas de texte. Voici donc comment le repérer plus facilement.

Les options cursorline et cursorcolumn, lorqu'elles sont activées, mettent en surbrillance respectivement la ligne et la colonne courante. Pour supprimer cette surbrillance il suffit d'activer les options inverses que sont nocursorline et nocursorcolumn.

Voici une macro pour activer et désactiver les deux options en même temps :

map _ :set cursorline! cursorcolumn!<bar>set cursorline? cursorcolumn?<CR><CR>

Je vous renvoie à un futur billet sur la permutation des options que j'écrirai bien un jour.

Cependant il est possible de modifier les schémas de coloration de ces deux options pour que la mise en valeur soit vraiment immanquables

highlight CursorLine term=reverse cterm=reverse
highlight CursorColumn term=reverse cterm=reverse

Après cela vous pouvez activer cette surbrillance originale par la touche underscore '_'.

Prochain épisode... heu, c'est déjà pas mal là, non ? Si vous en voulez plus essayez Emacs !

jeudi 3 août 2006

Afficher la taille du fichier courant

Et zou, encore un gadget pour notre barre de status, l'affichage de la taille du fichier courant.

Là encore une fonction interne de Vim nous donne cette information : getfsize renvoie la taille du fichier dont le nom est passé en paramètre.

Bien sûr, pas question de spécifier le nom du fichier en dur ou à la volée, c'est Vim qui va nous le donner. Le motif % contient cette information. Cependant elle n'est pas utilisable directement par la fonction getfsize, elle est prévue pour les macros commandes.

On doit donc utiliser la fonction expand pour transformer le mot-clé en une chaîne de caractères. Un petit essai avant de modifier notre .vimrc :

:echo getfsize(expand('%'))

Attention, si votre fichier n'existe pas, c'est-à-dire, un nouveau fichier pas encore sauvé, la fonction getfsize renvoie -1. D'ailleurs, la valeur que nous allons afficher est celle du fichier sauvé. Elle n'est pas mise à jour en temps réel au fur et à mesure que vous tapez.

Voici donc notre statusline après cet ultime ajout :

set statusline=%a\ %t%1*%m%*%10l/%2*%L%*%6c%V/%2*%{strlen(getline('.'))}%*%10{getfsize(expand('%'))}o

Prochain épisode, on active le viseur !

mercredi 2 août 2006

Calculer le nombre de caractères dans une ligne

Lorsque nous avons personnalisé la ligne de status il nous manquait l'information du nombre de caractères par lignes. Il n'existe pas de motif pour statusline donnant cette information. Cependant, il y a possibilité d'appeler une fonction Vim et d'en afficher le résultat.

En fait nous utilisons deux fonctions. La première, strlen(), tout comme en C, donne la taille d'une chaîne de caractères. Il nous faut donc donner à cette fonction une chaîne composée de toute la ligne courante.

Cette chaîne est obtenue grâce à la fonction getline() appelée avec le paramètre '.'. Rappelez-vous, le point sert à désigner la ligne courante.

Avant d'aller plus loin vous pouvez tester que je ne vous dis pas de bétises. Tapez cette commande pour afficher le nombre de caractères de la ligne courante :

:echo strlen(getline('.'))

Nous pouvons maintenant compléter notre statusline comme ceci :

set statusline=%a\ %t%1*%m%*%10l/%2*%L%*%6c%V/%2*%{strlen(getline('.'))}%*

L'ajout a été fait à la fin. La syntaxe pour afficher le résultat d'une fonction consiste à encadrer cette dernière de %{ et }. Pour les autres options je vous renvoie au billet précédent.

Prochain épisode, afficher la taille du fichier dans la statusline.

mardi 1 août 2006

Utiliser la ligne de status

Dans Vim vous avez sans doute remarqué l'avant dernière ligne de la fenêtre (du terminal), celle juste au dessus de celle utilisée pour saisir des commandes. Quand vous ouvrez un fichier, elle vous informe du nom de ce fichier, du nombre de lignes. Ensuite n'apparaissent que la position courante du curseur (ligne, colonne et colonne virtuelle).

Dans aucun de ces deux cas ce n'est la statusline dont il s'agit. Cette dernière n'apparaît par défaut que lorsque vous avez plus d'un buffer ouvert dans la même fenêtre. Par exemple, lorsque vous ouvrez l'aide en ligne. Tapez :help statusline.

J'ai ressenti le besoin de faire apparaître cette barre en permanence afin d'y afficher les informations dont j'ai besoin. Pour cela ajoutez l'option suivante dans votre .vimrc :

set laststatus=2

Nous allons ensuite remplir cette statusline. Je ne vais pas vous détailler tous les paramètres utilisables, vous les trouverez dans l'aide en ligne. Voici ceux que j'utilise :

set statusline=%a\ %t%1*%m%*%10l/%2*%L%*%6c%V

Allons-y pour les détails :

  • %a si vous avez ouvert plusieurs fichiers, affiche le numéro de buffer sous la forme (1 of 4) pour le premier des quatre fichiers ;
  • %t pour le nom du fichier sans le chemin ;
  • %1* ce qui suit est affiché suivant le schéma de coloration User1 jusqu'au prochain motif %* (idem pour %2* et User2) ;
  • %m affiche [+] lorsque le fichier est modifié et [-] s'il n'est pas modifiable ;
  • %10l le numéro de ligne courante occupant au minimum la place de 10 caractères (c'est juste pour la mise en forme) ;
  • %L le nombre de lignes du fichier ;
  • %6c le numéro de la colonne courante sur 6 caractères ;
  • %V le numéro de colonne virtuelle (tient compte de la place réellement occupée par les multi-caractères comme la tabulation, l'espace insécable, etc.)

Attention, les espaces doivent être protégés par un slash. Vous pouvez inclure du texte pour plus de clarté. Par exemple : Ligne\ %l\ sur\ %L.

Les deux schémas de coloration utilisés ponctuellement sont définis ainsi :

highlight User1 cterm=inverse,bold ctermfg=red
highlight User2 ctermbg=blue ctermfg=red

Par défaut la statusline est affichée en couleurs inverses, ce qui donne une barre gris clair lorsque l'on utilise un terminal sur fond noir comme moi. Trop clair pour mes yeux. J'ai donc redéfini les deux schémas de coloration par défaut. Le deuxième est utilisé lorsque vous avez deux buffers dans la même fenêtre, pour le buffer inactif.

highlight StatusLine term=bold cterm=bold ctermbg=4
highlight StatusLineNC term=none cterm=none ctermfg=4

Prochain épisode, nous verrons comment afficher le nombre de colonnes, c'est-à-dire, le nombre de caractères de la ligne courante.