post

Vim fr:Multiplicité

Contents

Introduction

Dans ce chapitre, nous allons voir coment Vim nous aide pour travailler entre différentes parties d’un fichier, différents fichiers, différentes fenêtres et différents onglets pour nous permettre de faire plus de choses en même temps. En fait, une partie importante d’une édition de qualité consiste à gérer des fichiers.

Multiple Sections en utilisant les Plis

Si vous éditez un document de taille importante, cela peut être pratique d'”enrouler” toutes les sections d’un document et se consacrer seulement sur une section à la fois?

C’est ce que nous appelons “folding” dans Vim.

Prenons le cas où votre document est structuré de telle manière que chaque niveau de texte est indenté avec un niveau de plus, comme dans le texte suivant:

   Book I

       The Shadow of the Past

           Three Rings for the Elven-kings under the sky,
           Seven for the Dwarf-lords in their halls of stone,
           Nine for Mortal Men doomed to die,
           One for the Dark Lord on his dark throne
           In the Land of Mordor where the Shadows lie.
           One Ring to rule them all, One Ring to find them,
           One Ring to bring them all and in the darkness bind them
           In the Land of Mordor where the Shadows lie.

       Three is Company

           The Road goes ever on and on
           Down from the door where it began.
           Now far ahead the Road has gone,
           And I must follow, if I can,
           Pursuing it with weary feet,
           Until it joins some larger way,
           Where many paths and errands meet.
           And whither then? I cannot say.
Note
Ce texte vient de WikiQuote

Après avoir écrit ce texte, lancez :set foldmethod=indent, positionnez votre curseur sur le texte à indenter, tapez zc et regardez comment le texte se replie. Tapez zo pour déplier le texte.

Personnellement, je préfère un raccourci clavier comme la barre d’espace pour déplier et replier les replis. Pour faire cela, ajoutez ceci à votre fichier vimrc :

Les commandes de base sont zo et zc pour ouvrir et fermer le repli. Vous pouvez utiliser za pour ‘a’lterner entre l’ouverture et la fermeture d’un repli. Vous pouvez le rendre encore plus facile en utilisant la barre d’espace en mode normal pour ouvrir et fermer un repli:

:nnoremap <space> za

Folding (repliement) est un sujet immense avec d’autres manière de faire du folding (manuel, marquer, expression) et différentes façons d’ouvrir et de fermer des hiérarchies de folds, et ainsi de suite. Voyez :help folding pour plus de détails.

Plusieurs Buffers

Supposons que vous voulez éditer plus d’un fichier à la fois avec le même Vim, que faîtes-vous?

Souvenez-vous que les fichiers sont chargés dans des buffers dans Vim. Vim peut également charger plusieurs buffers en même temps. Donc, vous pouvez avoir plusieurs fichiers ouverts en même temps et vous pouvez passer de l’un à l’autre.

Supposons que vous ayez deux fichiers, part1.txt and part2.txt:

part1.txt
   I have coined a phrase for myself - 'CUT to the G':

   1. Concentrate
   2. Understand
   3. Think
   4. Get Things Done
part2.txt
   Step 4 is eventually what gets you moving, but Steps 2 and 3 are equally
   important. As Abraham Lincoln once said "If I had eight hours to chop down a
   tree, I'd spend six hours sharpening my axe." And to get to this stage, you need
   to do Step 1 which boils down to one thing - It's all in the mind. That's why
   it's so hard.

Maintenant, lancez :e part1.txt et tapez :e part2.txt. Notez que le deuxième fichier est maintenant ouvert pour l’édition. Comment revenir dans le premier? Dans ce cas particulier, lancez juste :b 1 pour passer au ‘b’uffer numéro ‘1’. Vous pouvez aussi lancer :e part1.txt pour ouvrir le buffer existant.

Vous pouvez voir quels buffers ont été chargés et quels fichiers sont édités en lançant :buffers ou une forme plus courte, :ls qui est l’abréviation pour ‘l’i’s’t buffers.

Les buffers sont automatiquement enlevés quand vous fermez Vim, donc vous n’avez rien à faire de spécial à part sauvegarder vos fichiers. Cependant si vous voulez vraiment enlever un buffer, par exemple pour utiliser moins de mémoire, alors vous pouvez utiliser :bd 1 pour ‘d’étruire le ‘b’uffer numéro ‘1’, etc.

Plusieurs Fenêtres

Nous avons vu comment éditer plusieurs fichiers en même temps, mais comment voir deux fichiers différents en même temps? Par exemple, vous voulez ouvrir deux chapitres différents de votre livre, pour pouvoir écrire le deuxième chapitre de manière cohérente avec les expressions et descriptions du premier chapitre. Ou vous voulez copier/coller une partie du premier fichier dans le deuxième.

Dans la section précédente, nous avons utilisé la même “vue” pour éditer plusieurs buffers. Vim appelle ces “vues” des fenêtres. Ce terme “fenêtre” ne *doit* pas être confondu avec votre fenêtre du bureau qui veut dire en général l’application complète. Pensez juste à ces ‘fenêtres’ comme des ‘vues’ sur différents fichiers.

Reprenons les mêmes fichiers part1.txt et part2.txt utilisés dans la section précédente.

D’abord, chargez le fichier part1.txt en faisant :e part1.txt. Maintenant, ouvrons un nouveau buffer en partageant la fenêtre pour créer une nouvelle fenêtre – tapez :new. Vous devez pouvoir faire de l’édition dans le nouveau buffer de la nouvelle fenêtre, sauf que vous ne pouvez sauver votre texte car vous n’avez pas associé un nom de fichier avec le buffer. Pour cela, vous pouvez utiliser :w test.txt pour sauver le buffer.

Multiple windows.png

Comment passer d’une fenêtre à l’autre? Utilisez juste ctrl-w <motion key> pour passer d’une fenêtre à l’autre.Les touches de déplacement peuvent être h, j, k, l ou même n’importe quelle touche fléchée (dans cet exemple, seulement les touches flèche en haut et en bas sont concernées). Souvenez-vous que les opérations comme ctrl-w fonctionnent sur des fenêtres (‘w’indows).

Un raccourci est d’appuyer deux fois sur ctrl-w ctrl-w ctrl-w pour passer d’une fenêtre ouverte à une autre.

Dans le cas où vous voulez voir deux parties différentes d’un même fichier, les fenêtres multiples sont utiles. Lancez :sp pour créer une division verticale (‘sp’lit) et ensuite vous pouvez faire défiler chaque fenêtre à une position différente et continuer votre édition. Comme ce sont deux “fenêtres” du même buffer, les changements dans une fenêtre sont immédiatement appliqués dans l’autre. Vous pouvez aussi utiliser ctrl-w s au lieu de :sp.

Pour créer une division verticale, utilisez :vsp ou ctrl-w v. Pour fermer une fenêtre, tapez juste :q comme d’habitude.

Maintenant que vous avez vu comment ouvrir et utiliser plusieurs fenêtres, allons plus loin avec l’affichage.

  • Supposons que vous avez deux fenêtres verticales, mais vous voulez les intervertir, pour vous concentrer sur la partie haute ou basse de votre écran, selon votre préférence, comment faire? Tapez ctrl-w r pour faire pivoter (‘r’otate) les fenêtres.
  • Vous voulez déplacer la fenêtre courante à la position la plus élevée? Tapez ctrl-w K.
  • Vous voulez redimensionner une fenêtre pour qu’elle soit plus petite ou plus grande? Tapez :resize 10 pour ajouter 10 lignes à l’affichage, etc.
  • Vous voulez rendre la fenêtre courante aussi grande que possible afin de vous concentrer dessus? Tapez ctrl-w _. Pensez à l’ underscore comme une indication que les autres fenêtres devraient être aussi petites que possible.
  • Vous voulez rendre les fenêtres de même (‘equal’) taille à nouveau? Tapez ctrl-w =.

Voyez :help windows pour plus détails sur la manipulation des fenêtres.

Plusieurs Onglets

Si vous utilisez Firefox, vous avez déjà utilisé cette fonctionnalité qui vous permet d’ouvrir plusieurs sites dans une seule fenêtre Firefox afin de pouvoir passer de l’une à l’autre plus simplement qu’avec des fenêtres. Les onglets fonctionnent de la même manière dans Vim. Sauf qu’on les appelle des “tab pages.”

Multiple tabs.png

Tapez :tabnew pour ouvrir un nouvel onglet avec un nouveau buffer (analogue à :new). Comment passer d’un onglet à l’autre? En tapant gt pour aller (‘g’o) à l’onglet suivant ‘t’ab et gT pour aller (‘g’o) dans la direction opposée, c’est-à-dire l’onglet (‘t’ab) précédent.

Personnllemet je préfère utiliser les touches alt-j et alt-k pour les opérations analogues au touches j et k pour les caractères et aussi ctrl-w j et ctrl-w k fonctionnent pour des fenêtres (divisées horizontalement). Pour activer cela, ajoutez les lignes suivantes à votre fichier vimrc:

" Raccourcis pour se déplacer entre les onglets.
" Alt-j pour déplacer l'onglet vers la gauche
noremap <A-j> gT
" Alt-k pour déplacer l'onglet vers la droite
noremap <A-k> gt

Pour fermer (‘c’lose) un onglet (‘tab’), tapez :tabc ou :q.

Vous pouvez même ouvrir du texte qui ouvre une nouvelle fenêtre qui ouvre un nouvel onglet. Par exemple, :help tabpage ouvre l’aide dans une fenêtre divisée horizontallement. Pour la voir dans un nouvel onglet, alors tapez :tab help tabpage.

Si vous voulez re-organiser les onglets, utilisez :tabmove. Par exemple, pour déplacer l’onglet courant en première position, utilisez :tabmove 0 et ainsi de suite.

Voyez :help tabpage pour plus de détails sur les onglets et d’autres opérations, comme :tabdo pour agir sur chacun des onglets ouverts, et personnaliser le titre des onglets (:help setting-guitablabel), etc.

Récapitulatif

Vim fournit de nombreuses manières d’éditer plusieurs fichiers à la fois – les buffers, fenêtres et onglets. L’utilisation de ces fonctionnalités dépend de vos habitudes. Par exemple, utiliser plusieurs onglets peut éviter l’utilisation de plusieurs fenêtres. Il est important d’utiliser celui avec lequel vous êtes le plus à l’aise.