web-dev-qa-db-fra.com

Utiliser les onglets de Vim comme les tampons

J'ai examiné la possibilité d'utiliser des onglets dans Vim (avec :tabe, :tabnew, etc.) en remplacement de ma pratique actuelle consistant à ouvrir de nombreux fichiers dans la même fenêtre dans des mémoires tampons masquées.

Je voudrais que chaque fichier distinct que j'ai ouvert soit toujours dans son propre onglet. Cependant, il y a des choses qui font obstacle à cela. Comment puis-je résoudre ces problèmes:

  1. Lorsque des commandes telles que gf et ^] accèdent à un emplacement dans un autre fichier, le fichier s'ouvre dans un nouveau tampon dans l'onglet en cours. Existe-t-il un moyen de faire en sorte que toutes ces sortes de commandes ouvrent le fichier dans un nouvel onglet ou basculent vers l'onglet existant avec le fichier s'il est déjà ouvert?

  2. Lors du changement de mémoire tampon, je peux utiliser :b <part of filename><tab> pour compléter les noms de fichiers des mémoires tampons existantes. <part of filename> peut même être le milieu d'un nom de fichier au lieu du début. Existe-t-il un équivalent pour changer d'onglet

352
indentation

Arrête arrête arrête.

Ce n'est pas ainsi que les onglets de Vim sont conçus pour être utilisés. En fait, ils sont mal nommés. Un meilleur nom serait "viewport" ou "layout", car c'est ce que l'on appelle un onglet - c'est une disposition différente des fenêtres de tous de vos tampons existants. .

Essayer de battre Vim en 1 onglet == 1 tampon est un exercice futile. Vim n'en sait rien et ne respectera pas toutes les commandes. En particulier, tout ce qui utilise le tampon de correction rapide (_:make_, _:grep_ et _:helpgrep_ est celui qui saute à l’esprit) ignorera volontiers les onglets et vous ne pouvez rien faire pour arrêter cela.

Au lieu:

  • _:set hidden_
    Si vous ne disposez pas déjà de cet ensemble, faites-le. Cela permet à vim de fonctionner comme tous les autres éditeurs de plusieurs fichiers de la planète. Vous pouvez avoir édité des tampons qui ne sont pas visibles dans une fenêtre quelque part.
  • Utilisez _:bn_, _:bp_, _:b #_, _:b name_ et _ctrl-6_ pour passer d'un tampon à l'autre. J'aime _ctrl-6_ moi-même (seul, il bascule vers le tampon précédemment utilisé, ou _#ctrl-6_ passe au numéro de tampon _#_).
  • Utilisez _:ls_ pour lister les tampons, ou un plugin tel que MiniBufExpl ou BufExplorer .
606
Zathrus

Un peu en retard pour la fête ici, mais surpris de ne pas voir ce qui suit dans cette liste:

:tab sball - ceci ouvre un nouvel onglet pour chaque tampon ouvert.

:help switchbuf - ceci contrôle le comportement de la commutation de tampon, essayez :set switchbuf=usetab,newtab. Cela devrait impliquer de basculer vers l'onglet existant si le tampon est ouvert ou d'en créer un autre sinon.

268
robince

Vim :help window explique assez bien la confusion "tabs vs buffers".

Un tampon est le texte en mémoire d'un fichier.
Une fenêtre est une fenêtre d'affichage sur un tampon.
Une page à onglet est un ensemble de fenêtres.

L'ouverture de plusieurs fichiers est réalisée dans vim avec buffers. Dans d'autres éditeurs (par exemple, Notepad ++), cela se fait avec des onglets, de sorte que l'onglet de nom dans vim peut être trompeur.

Windows ont pour but de diviser l’espace de travail et d’afficher plusieurs fichiers (tampons) ensemble sur un seul écran. Dans d'autres éditeurs, cela pourrait être réalisé en ouvrant plusieurs fenêtres d'interface graphique et en les réorganisant sur le bureau.

Enfin, dans cette analogie, vim pages à onglet correspondrait à plusieurs bureaux, c’est-à-dire différents réarrangements de fenêtres.

Comme l'explique vim help: tab-page, vous pouvez utiliser une page à onglet lorsque vous souhaitez modifier temporairement un fichier, mais ne souhaitez rien modifier dans la disposition actuelle des fenêtres et des mémoires tampons. Dans un tel cas, une autre page à onglet peut être utilisée uniquement pour éditer ce fichier particulier.

Bien sûr, vous devez vous rappeler que l'affichage du même fichier dans de nombreux onglets ou fenêtres entraînerait l'affichage de la même copie de travail (tampon).

160
crenate

Contrairement à certaines des autres réponses ici, je dis que vous pouvez utiliser les onglets comme vous le souhaitez. vim a été conçu pour être polyvalent et personnalisable, au lieu de vous obliger à travailler selon des paramètres prédéfinis. Nous savons tous à quel point nous, les programmeurs, aimons imposer notre "éthique" à tous les autres. Cette réalisation est donc certainement une caractéristique primordiale.

<C-w>gf est l'équivalent de tabulation de la commande gf des tampons. <C-PageUp> et <C-PageDown> basculeront d'un onglet à l'autre. (Dans Byobu, ces deux commandes ne fonctionnent jamais pour moi, mais en dehors de Byobu/tmux. Les variantes sont gt et gT.) <C-w>T déplacera la fenêtre en cours vers un nouvel onglet. page.

Si vous préférez que vim utilise, si possible, un onglet existant plutôt que de créer un onglet en double, ajoutez :set switchbuf=usetab à votre fichier .vimrc. Vous pouvez ajouter newtab à la liste (:set switchbuf=usetab,newtab) pour forcer les commandes QuickFix qui affichent des erreurs de compilation à s'ouvrir dans des onglets distincts. Je préfère split à la place, ce qui ouvre les erreurs de compilation dans une fenêtre fractionnée.

Si le support de la souris est activé avec :set mouse=a, vous pouvez interagir avec les onglets en cliquant dessus. Il y a aussi un bouton + par défaut qui créera un nouvel onglet.

Pour la documentation sur les onglets, tapez :help tab-page en mode normal. (Après cela, vous pourrez vous entraîner à déplacer une fenêtre vers un onglet en utilisant <C-w>T.) Il existe une longue liste de commandes. Certaines des commandes de la fenêtre ont à voir avec des tabulations, vous voudrez peut-être aussi consulter cette documentation via :help windows.

Ajout: 2013-12-19

Pour ouvrir plusieurs fichiers dans vim avec chaque fichier dans un onglet séparé, utilisez vim -p file1 file2 .... Si vous êtes comme moi et que vous oubliez toujours d'ajouter -p, vous pouvez l'ajouter à la fin, car vim suit les règles normales d'analyse des options en ligne de commande. Vous pouvez également ajouter un mappage d'alias bash vim à vim -p.

50
Zenexer

J'ai rencontré le même problème. Je voulais que les tabs fonctionnent comme des tampons et je ne parviens jamais à les obtenir. La solution que j'ai finalement choisie est de faire en sorte que les tampons se comportent comme des onglets!

Découvrez le plugin appelé Mini Buffer Explorer , une fois installé et configuré, vous pourrez travailler avec les tampons de la même manière que les onglets sans perdre aucune fonctionnalité.

15
Dominic Dos Santos

Ceci est une réponse pour ceux qui ne connaissent pas Vim et qui viennent d’autres éditeurs de texte (dans mon cas, Sublime Text).

J'ai lu toutes ces réponses et ce n'était toujours pas clair. Si vous les parcourez suffisamment, les choses commencent à avoir un sens, mais il m'a fallu des heures pour faire des va-et-vient entre les questions.

La première chose est, comme d'autres l'ont expliqué:

Onglet Pages , sonne beaucoup comme onglets , ils agissent comme des onglets et ressemblent beaucoup aux onglets de la plupart des autres éditeurs d’interface graphique, mais ce n’est pas le cas. Je pense que c'est un mauvais modèle mental qui a été construit dans Vim, ce qui malheureusement brouille le pouvoir supplémentaire que vous avez dans une page à onglet.

La première description que j'ai comprise provenait de réponse de @ crenate , c'est qu'ils sont l'équivalent de plusieurs ordinateurs de bureau. À cet égard, vous n’auriez jamais ouvert que quelques ordinateurs de bureau, mais de nombreuses fenêtres d’interface graphique ouvertes dans chacun d’eux.

Je dirais qu'ils ressemblent à d'autres éditeurs/navigateurs:

  1. Groupes d'onglets
  2. Espaces de travail Texte sublime (c'est-à-dire une liste des fichiers ouverts que vous avez dans un projet)

Lorsque vous les voyez ainsi, vous vous rendez compte que vous pouvez facilement regrouper des ensembles de fichiers (mémoires tampons), par exemple. vos fichiers CSS, vos fichiers HTML et vos fichiers JS dans différents onglets. Ce qui est en fait assez génial.

Autres descriptions que je trouve déroutant

Fenêtre d'affichage

Cela n'a aucun sens pour moi. Une fenêtre qui, bien qu’elle ait un terme du dictionnaire défini , je n’ai entendu parler que de fenêtres Vim dans le :help window doc. Viewport n'est pas un terme que j'ai entendu à propos d'éditeurs tels que Sublime Text, Visual Studio, Atom, Notepad ++. En fait, je n'en avais jamais entendu parler pour Vim avant de commencer à essayer d'utiliser des pages à onglet.

Si vous affichez des pages à onglet comme plusieurs bureaux, faire référence à un bureau en tant que fenêtre unique semble étrange.

Espaces de travail

Cela a peut-être plus de sens, le définition du dictionnaire est:

Une installation de stockage de mémoire à usage temporaire.

Donc, c'est comme un endroit où vous stockez un groupe de tampons.

Au départ, je ne ressemblais pas à concept de Sublime Text d'un espace de travail contenant la liste de tous les fichiers ouverts dans votre projet:

le fichier sublime-workspace, qui contient des données spécifiques à l'utilisateur, telles que les fichiers ouverts et leurs modifications.

Cependant, si on y réfléchit davantage, cela est en fait d'accord. Si vous considérez une page à onglet Vim comme un projet Sublime Text, il semblerait étrange de n’avoir qu’un seul fichier ouvert par projet et de continuer à basculer entre les projets. D'où l'utilisation d'une page à onglet pour avoir ouvert un seul fichier est étrange.

Collection de fenêtres

Le :help window fait référence aux onglets de cette façon. De nombreuses autres réponses utilisent le même concept. Cependant, jusqu'à ce que vous ayez bien compris ce qu'est une fenêtre vim, ce n'est pas très utile, comme construire un château sur le sable.

Comme je l'ai mentionné ci-dessus, une fenêtre vim est identique à une fenêtre d'affichage et à une tranquillité d'esprit parfaitement expliquée dans ce article de linux.com :

Une fonctionnalité vraiment utile dans Vim est la possibilité de diviser la zone visible en un ou plusieurs fichiers, ou simplement en divisant la fenêtre pour afficher plus facilement deux bits du même fichier. La documentation de Vim appelle cela indifféremment une fenêtre ou une fenêtre.

Vous connaissez peut-être déjà cette fonctionnalité si vous avez déjà utilisé la fonction d’aide de Vim en utilisant: rubrique d’aide ou en appuyant sur la touche F1. Lorsque vous entrez dans l'aide, Vim divise la fenêtre d'affichage et ouvre la documentation d'aide dans la fenêtre supérieure, laissant votre document ouvert dans la fenêtre inférieure.

Je trouve étrange qu’une page à onglet soit appelée collection de fenêtres au lieu de collection de mémoires tampons. Mais je suppose que vous pouvez avoir deux pages d’onglet distinctes ouvertes, chacune avec plusieurs fenêtres pointant toutes sur le même tampon, du moins c’est ce que j’ai compris jusqu’à présent.

8
icc97

En regardant: les onglets d'aide, il ne semble pas que vim veuille travailler comme vous le faites ...

Les tampons étant partagés entre des onglets, il ne semble pas possible de verrouiller un tampon donné pour qu'il n'apparaisse que sur un certain onglet.

C'est une bonne idée cependant.

Vous pouvez probablement obtenir l'effet souhaité en utilisant un terminal qui prend en charge les onglets, comme multi-gnome-terminal, puis en exécutant des instances de vim dans chaque onglet de terminal. Pas parfait, cependant ...

4
Mike G.
  • Vous pouvez mapper des commandes qui manipulent normalement des tampons pour manipuler des onglets, comme je l'ai fait avec gf dans mon fichier .vimrc:

    map gf :tabe <cfile><CR>
    

    Je suis sûr que vous pouvez faire la même chose avec [^

  • Je ne pense pas que vim supporte ceci pour les onglets (pour le moment). J'utilise gt et gT pour passer aux onglets suivant et précédent, respectivement. Vous pouvez également utiliser Ngt, où N est le numéro de tabulation. Un problème que j’ai, c’est que, par défaut, le numéro de tabulation n’est pas affiché dans la ligne de tabulation. Pour résoudre ce problème, j'ai mis quelques fonctions à la fin de mon fichier .vimrc (je ne l'ai pas collé ici car il est long et n'a pas été formaté correctement).

4
Lucas Oman

J'utilise des tampons comme des onglets, en utilisant le plugin BufExplorer et quelques macros:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

Avec BufExplorer, vous n'avez pas de barre d'onglets en haut, mais vous économisez de l'espace sur votre écran. Vous pouvez également ouvrir un nombre infini de fichiers/tampons et la liste des tampons est consultable ...

4
jkramer

Si vous voulez que les tampons fonctionnent comme des onglets, jetez un œil à plugine tabline .

Cela utilise une seule fenêtre, et ajoute une ligne sur le dessus pour simuler les onglets (montrant seulement la liste des tampons). Cela est apparu il y a longtemps, lorsque les onglets étaient uniquement pris en charge dans GVim, mais pas dans la ligne de commande vim. Comme il ne fonctionne qu'avec des tampons, tout s'intègre bien avec le reste de vim.

2
thien.vuong