Utiliser les onglets de Vim comme des tampons

j'ai examiné la possibilité d'utiliser des onglets dans Vim (avec :tabe , :tabnew , etc.) en remplacement de ma pratique actuelle d'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, il ya certaines choses que d'obtenir dans la voie de ce. Comment puis-je les corriger:

  1. quand les commandes comme gf et ^] saut d'un lieu dans un autre fichier, le fichier s'ouvre dans un nouveau tampon dans l'onglet en cours. Est-il un moyen d'avoir toutes ces sortes de commandes ouvrir le fichier dans un nouvel onglet, ou de passer à l'onglet existant avec le fichier si il est déjà ouvert?

  2. lors de la commutation de tampons je peux utiliser :b <part of filename><tab> et il va remplir les noms de fichiers dans les tampons existants. <part of filename> peut même être le milieu d'un nom de fichier au lieu du début. Est-il un équivalent pour changer les onglets?

334
demandé sur Keith Pinson 2008-09-19 18:42:04

10 réponses

Stop, stop, stop.

ce n'est pas ainsi que les onglets de Vim sont conçus pour être utilisés. En fait, ils sont mal nommée. Un meilleur nom serait "viewport" ou "layout", parce que c'est ce qu'est un onglet-c'est un layout différent de windows de tout de vos tampons existants.

essayer de battre Vim en 1 tab == 1 tampon est un exercice futile. Vim ne savent pas ou de soins et qu'il ne tiendra pas sur toutes les commandes-en particulier, tout ce qui utilise le tampon quickfix ( :make , :grep , et :helpgrep sont ceux qui viennent à l'esprit) ignorera volontiers les onglets et il n'y a rien que vous puissiez faire pour arrêter cela.

à la place:

  • :set hidden

    Si vous ne l'avez pas déjà, puis le faire. Cela fait fonctionner vim comme tous les autres éditeurs de fichiers multiples sur la planète. Vous pouvez avoir des tampons édités qui ne sont pas visibles dans une fenêtre quelque part.
  • Use :bn , :bp , :b # , :b name , et ctrl-6 pour passer d'un tampon à l'autre. J'aime ctrl-6 moi-même (seul il passe au tampon précédemment utilisé, ou #ctrl-6 commutateurs au numéro de tampon # ).
  • Utiliser :ls à la liste des tampons, ou un plugin comme MiniBufExpl ou BufExplorer .
570
répondu Zathrus 2012-07-03 17:41:49

un peu en retard à la fête ici mais surpris que je n'ai pas vu le suivant dans cette liste:

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

:help switchbuf - cette commande contrôle le comportement de changement de tampon, essayez :set switchbuf=usetab,newtab . Cela devrait signifier de passer à l'onglet existant si le tampon est ouvert, ou en créer un nouveau si ce n'.

265
répondu robince 2016-11-27 00:37:46

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 un viewport sur un tampon.

Une page d'onglet est une collection de fenêtres.

ouvrir plusieurs fichiers est réalisé dans vim avec tampons . Dans d'autres éditeurs (par exemple notepad++) , cela est fait avec des onglets, de sorte que le onglet nom dans vim peut-être trompeur.

Windows ont pour but de diviser l'espace de travail et l'affichage de plusieurs fichiers (tampons) ensemble sur un même écran. Dans d'autres éditeurs, cela peut être réalisé en ouvrant plusieurs fenêtres GUI et en les réarrangeant sur le bureau.

enfin dans cette analogie vim tab pages correspondrait à plusieurs postes de travail, c'est-à-dire différents réarrangements de fenêtres.

Comme vim help: tab-page , explique une page d'onglet peut être utilisé lorsque l'on désire modifier temporairement un fichier, mais ne veulent rien changer dans la configuration actuelle de windows et les tampons. Dans un tel cas, une autre page d'onglet peut être utilisée dans le seul but d'éditer ce fichier particulier.

bien sûr, vous devez vous rappeler que l'affichage du même fichier dans de nombreuses pages d'onglets ou windows se traduirait par l'affichage de la même copie de travail (tampon).

145
répondu crenate 2017-03-30 16:26:23

Contrairement à certaines 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 que nous, programmeurs, aimons imposer notre "éthique" à tout le monde, donc cette réalisation est certainement une caractéristique principale.

<C-w>gf est l'équivalent tab de la commande gf de buffers. <C-PageUp> et <C-PageDown> seront basculer entre les onglets. (Byobu, ces deux commandes ne jamais travailler pour moi, mais qu'ils travaillent en dehors de Byobu/tmux. Les variantes sont gt et gT .) <C-w>T déplacera la fenêtre courante vers une nouvelle page d'onglet.

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

si vous avez le support de la souris 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 avoir fait cela, vous pouvez vous entraîner à déplacer une fenêtre vers un onglet en utilisant <C-w>T . Il y a une longue liste de commandes. Certaines des commandes de fenêtre ont à voir avec les onglets, donc vous pourriez vouloir regarder cette documentation aussi bien via :help windows .

ajout: 2013-12-19

Pour ouvrir plusieurs fichiers dans vim avec chaque fichier dans un onglet séparé, utiliser vim -p file1 file2 ... . Si vous êtes comme moi et toujours pas oublier d'ajouter -p , vous pouvez l'ajouter à la fin, comme vim suit la commande normale de ligne option analyse de règles. Vous pouvez aussi ajouter un bash alias mapping vim à vim -p .

48
répondu Zenexer 2014-07-14 18:58:39

j'ai rencontré le même problème. Je voulais que les onglets fonctionnent comme des tampons et je n'arrive jamais à les faire fonctionner. La solution que j'ai finalement choisie était 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 serez en mesure de travailler avec des tampons virtaully de la même manière que les onglets sans perdre aucune fonctionnalité.

15
répondu Dominic Dos Santos 2008-09-19 15:12:05

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

j'ai lu toutes ces réponses et ce n'était toujours pas clair. Si vous les lisez assez de choses commencent à avoir du sens, mais il m'a fallu des heures de va-et-vient entre les questions.

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

Tab Pages , sonne beaucoup comme onglets , ils agissent comme des onglets et ressemblent beaucoup à des onglets dans la plupart des autres éditeurs de GUI, mais ils ne le sont pas. Je pense que c'est un mauvais modèle mental qui a été construit sur dans Vim, qui malheureusement nuages le pouvoir supplémentaire que vous avez dans une page d'onglet.

la première description que j'ai comprise était de la réponse de @crenate est qu'ils sont l'équivalent de plusieurs ordinateurs de bureau. Vu sous cet angle, vous n'auriez jamais que quelques les postes de travail sont ouverts, mais il y a beaucoup de fenêtres ouvertes dans chaque bureau.

je dirais qu'ils sont semblables dans d'autres éditeurs/navigateurs:

  1. Tab groups
  2. Sublime espaces de travail de texte (c.-à-d. une liste des fichiers ouverts que vous avez dans un projet)

quand vous les voyez comme ça vous réalisez la puissance d'eux que vous pouvez facilement grouper des ensembles de fichiers (tampons) ensemble par exemple vos fichiers CSS, vos fichiers HTML et vos fichiers JS dans différentes pages d'onglets. Qui est en fait assez impressionnant.

autres descriptions que je trouve déroutantes

Viewport

Cela n'a aucun sens pour moi. Un viewport qui, bien qu'il ait un terme défini dictionnaire , j'ai seulement entendu parler de fenêtres Vim dans le :help window doc. Viewport n'est pas un terme que j'ai jamais entendu en ce qui concerne les éditeurs comme Sublime Text, Visual Studio, Atom, Notepad++. En fait, je n'en avais jamais entendu parler pour Vim jusqu'à ce que je commence à essayer d'utiliser des pages d'onglets.

si vous affichez des pages d'onglets comme plusieurs postes de travail, alors faire référence à un bureau comme une fenêtre unique semble étrange.

espaces de travail

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

mémoire d'Une installation de stockage pour une utilisation temporaire.

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

Je n'ai pas initialement sonné comme Sublime concept de texte d'un espace de travail qui est une liste de tous les fichiers que vous avez ouvert dans votre projet:

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

Même si l'on y réfléchit davantage, cela Concorde. Si vous considérez une page d'onglet Vim comme un projet de texte Sublime, alors il semblerait étrange d'avoir juste un fichier ouvert dans chaque projet et de continuer à passer d'un projet à l'autre. Par conséquent, pourquoi utiliser une page d'onglet pour avoir ouvert un seul fichier est étrange.

Collection de fenêtres

le :help window se réfère aux pages d'onglet de cette façon. Plus de nombreuses autres réponses utilisent le même concept. Cependant jusqu'à ce que vous obtenez votre tête autour qu'est-ce qu'une fenêtre vim, alors ce n'est pas très utile, comme construire un château sur du sable.

comme je l'ai mentionné ci-dessus, une fenêtre vim est la même qu'un viewport et calme expliqué de façon excellente dans ce linux.com article :

une caractéristique vraiment utile dans Vim est la possibilité de diviser la zone visible entre un ou plusieurs fichiers, ou tout simplement de diviser la fenêtre pour voir deux bits du même fichier plus facilement. La documentation Vim se réfère à cela comme un viewport ou une fenêtre, de façon interchangeable.

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

je trouve étrange qu'une page d'onglet soit désignée comme une collection de fenêtres au lieu d'une collection de tampons. Mais je suppose que vous pouvez avoir deux pages d'onglet distinctes ouvertes chacune avec plusieurs fenêtres toutes pointant vers le même tampon, du moins c'est ce que je comprends jusqu'à présent.

6
répondu icc97 2017-07-16 09:18:23

en regardant :aider les onglets on dirait que vim ne veut pas travailler comme toi...

Les tampons

sont partagés entre les onglets, de sorte qu'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.

vous pourriez probablement obtenir l'effet que vous voulez en utilisant un terminal qui prend en charge les onglets, comme multi-gnome-terminal, puis en exécutant des instances vim dans chaque onglet terminal. Il n'est pas parfait, bien...

4
répondu Mike G. 2008-09-19 14:50:18
  • " vous pouvez mapper des commandes qui manipulent normalement des tampons pour manipuler des onglets, comme je l'ai fait avec gf dans my .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 (encore). J'utilise gt et gT pour passer aux onglets suivants et précédents, respectivement. Vous pouvez également utiliser Ngt, où N est le numéro de l'onglet. Un cauchemar que j'ai est que, par défaut, le numéro d'onglet n'est pas affiché dans l'onglet ligne. Pour corriger cela, j'ai mis quelques fonctions à la fin de mon .vimrc file (je n'ai pas coller ici parce que c'est long et n'a pas le format correctement).

4
répondu Lucas Oman 2008-09-19 14:53:33

j'utilise des tampons comme des onglets, en utilisant le BufExplorer plugin 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 d'un autre côté cela économise de l'espace sur votre écran, en plus vous pouvez avoir un nombre infini de fichiers/tampons ouverts et la liste de tampon est consultable...

3
répondu jkramer 2008-09-19 22:46:12

si vous voulez que les tampons fonctionnent comme des onglets, consultez le tabline plugin .

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

2
répondu thien.vuong 2017-06-28 12:34:09