386 votes

Utiliser les onglets de Vim comme des tampons

J'ai examiné la possibilité d'utiliser des onglets dans Vim (avec :tabe , :tabnew ) pour remplacer ma pratique actuelle qui consiste à avoir de nombreux fichiers ouverts dans la même fenêtre dans des tampons cachés.

Je voudrais que chaque fichier distinct que j'ai ouvert soit toujours dans son propre onglet. Cependant, certains éléments s'y opposent. Comment puis-je les corriger ?

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

  2. Pour changer de tampon, je peux utiliser :b <part of filename><tab> et il complétera les noms des fichiers dans les tampons existants. <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 le changement d'onglet ?

682voto

Zathrus Points 5385

Arrêtez, arrêtez, arrêtez.

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", parce que c'est ce qu'est un onglet - c'est une mise en page différente de Windows de tous de vos tampons existants.

Essayer de battre Vim en 1 tab == 1 tampon est un exercice futile. Vim ne le sait pas ou ne s'en soucie pas et ne le respectera pas sur toutes les commandes - en particulier, tout ce qui utilise le tampon quickfix ( :make , :grep et :helpgrep sont ceux qui viennent à l'esprit) ignoreront volontiers les onglets et il n'y a rien que vous puissiez faire pour empêcher cela.

Au lieu de cela :

  • :set hidden
    Si vous n'avez pas déjà ce jeu, faites-le. Cela fait fonctionner vim comme tous les autres éditeurs de fichiers multiples de la planète. Vous pouvez avoir des tampons édités 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 comme MiniBufExpl ou BufExplorer .

207 votes

Pour moi, il s'agit d'un bogue, et non d'une "erreur de l'utilisateur". Une recherche sur le web pour "vim tabs" indique que presque tout le monde n'est pas d'accord avec vous, ou ne connaît pas la "vraie" façon d'utiliser les onglets de Vim. De plus, si les onglets sont vraiment des vues de "mise en page", pourquoi les titres des onglets par défaut sont-ils le nom du fichier en cours ? Si je voulais avoir plusieurs vues du même fichier, alors tous mes titres d'onglets porteraient le même nom (pas très utile ?). D'une manière ou d'une autre, l'implémentation par défaut des onglets dans Vim est défectueuse.

48 votes

Qu'allez-vous montrer d'autre dans le titre de l'onglet ? Il affiche le nom du tampon actuel (et non "nom du fichier"). Vous pouvez modifier ce qui s'affiche dans le titre de l'onglet de toute façon.

1 votes

N'oubliez pas que CTRL-^ peut être plus facile à atteindre que CTRL-6 sur les claviers non américains. Sur les claviers allemands, ^ est situé à gauche du 1 - très pratique :h CTRL-^ : Mostly the ^ character is positioned on the 6 key, pressing CTRL and 6 then gets you what we call CTRL-^. But on some non-US keyboards CTRL-^ is produced in another way.

285voto

robince Points 6523

J'arrive un peu tard dans la soirée, mais je suis surpris de ne pas avoir vu ce qui suit dans cette liste :

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

:help switchbuf - ceci contrôle le comportement de commutation du tampon, essayez :set switchbuf=usetab,newtab . Cela signifie qu'il faut passer à l'onglet existant si la mémoire tampon est ouverte, ou en créer un nouveau dans le cas contraire.

4 votes

+1 pour switchbuf - set switchbuf=useopen est idéal pour éviter le comportement ennuyeux de :make , :vimgrep et des commandes similaires qui modifient les tampons dans la disposition de la fenêtre, même lorsque le tampon était déjà affiché.

4 votes

Pourquoi pas moi ? après le jeu :se switchbuf=usetab,newtab ,lorsqu'une utilisation bn pour changer de tampon, il ouvre toujours le fichier tampon dans l'onglet actuel au lieu de passer à l'onglet existant ? Y a-t-il un problème ?

190voto

mithy Points 1221

Vim :help window explique assez bien la confusion "onglets vs tampons".

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

L'ouverture de plusieurs fichiers est réalisée dans vim avec tampons . Dans d'autres éditeurs (par exemple notepad++), ceci est fait avec des onglets, donc le nom tab dans vim peut être trompeur.

Windows ont pour but de diviser l'espace de travail et d'afficher plusieurs fichiers (tampons) ensemble sur un é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, la méthode de vim onglets correspondrait à plusieurs bureaux, c'est-à-dire à différentes réorganisations de Windows.

Comme vim help: tab-page explique qu'un onglet peut être utilisé lorsque l'on souhaite modifier temporairement un fichier, mais que l'on ne veut rien changer à la disposition actuelle des fenêtres et des tampons. Dans ce cas, un autre onglet peut être utilisé dans le seul but de modifier ce fichier particulier.

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

13 votes

C'est en fait une réponse géniale, mais il a fallu quelques lectures pour qu'elle ait un sens. tampons = onglets, Windows = gui Windows, pages d'onglets = bureaux, c'est ce que j'ai trouvé de mieux pour quelqu'un qui n'est pas familier avec ces concepts.

6 votes

J'ai tendance à penser qu'ils regardent à travers une fenêtre dans une pièce - buffer = objet , window = panneau et tab = fenêtre . Je peux me déplacer dans la pièce et regarder depuis différents endroits. Windows ( tabs ). Différents sites Windows peuvent avoir un nombre, une disposition et une taille différents de vitres . Le même objet peuvent être vues simultanément depuis différentes vitres dans différents Windows .

0 votes

Si vous êtes familier avec les espaces de travail de Linux et le paradigme de Windows, alors vous verrez l'héritage de vim l'usage. Au début, il n'y avait qu'un fenêtre . Les gestionnaires de fenêtres vous ont ensuite permis de diviser les fenêtres en volets (WM en mosaïque) ou en volets superposés (WM flottant), mais ils désignaient toujours chaque volet comme une fenêtre. Ajoutez maintenant le concept d'espace de travail où les volets peuvent être affichés dans plusieurs espaces de travail. Ainsi, dans ce paradigme, buffer = application , window = fenêtre et tab = espace de travail .

58voto

Zenexer Points 4192

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, plutôt que de vous forcer à travailler selon des paramètres prédéfinis. Nous savons tous comment nous, programmeurs, aimons imposer notre "éthique" à tous les autres, donc cette réalisation est certainement une caractéristique primordiale.

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

Si vous préférez que vim utilise un onglet existant si possible, 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 séparés. Je préfère split à la place, ce qui ouvre les erreurs de compilation dans une fenêtre divisée.

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

Pour la documentation sur les onglets, tapez :help tab-page en mode normal. (Après avoir fait cela, vous pouvez vous entraîner à déplacer une fenêtre vers un onglet à l'aide de la fonction <C-w>T .) Il y a une longue liste de commandes. Certaines des commandes de la fenêtre sont liées aux onglets, vous pouvez donc consulter la 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 de ligne de commande. Alternativement, vous pouvez ajouter un alias bash qui correspond à vim à vim -p .

3 votes

+1 pour vim -p Cependant, sachez que seuls 10 onglets seront affichés par défaut. Les fichiers supplémentaires sont chargés dans des tampons, mais ne sont pas affichés dans leur propre onglet.

0 votes

@IanB : comment contourner le paramètre par défaut qui limite à 10 onglets ?

3 votes

@0xC0000022L voir tabpagemax paramètre

14voto

J'ai rencontré le même problème. Je voulais que les onglets fonctionnent comme des tampons et je n'ai jamais réussi à les faire fonctionner. La solution que j'ai finalement trouvée est de faire en sorte que les tampons se comportent comme des onglets !

Consultez le plugin appelé Explorateur de mini-tampon Une fois installé et configuré, vous serez en mesure de travailler avec les tampons de la même manière que les onglets sans perdre aucune fonctionnalité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X