Question

J'ai examiné la possibilité d'utiliser des onglets dans Vim (avec :tabe, :tabnew, etc.) pour remplacer ma pratique actuelle consistant à ouvrir plusieurs 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 contenant le fichier s’il est déjà ouvert?

  2. Lorsque je change de tampon, je peux utiliser :b <part of filename><tab> et il complétera 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. Existe-t-il un équivalent pour changer d’onglet?

Était-ce utile?

La solution

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 & Quot; viewport & Quot; ou " layout " ;, car c'est ce qu'est un onglet & # 8212; c'est un agencement différent des fenêtres de tous de vos tampons existants.

Essayer de battre Vim en 1 onglet == 1 tampon est un exercice futile. Vim ne le sait pas et ne s'en soucie pas et il ne le respectera pas pour toutes les commandes & # 8212; en particulier, tout ce qui utilise le tampon de correction rapide (:make, :grep et :helpgrep sont ceux qui passent esprit) sera heureusement ignorer les onglets et il n'y a rien que vous puissiez faire pour arrêter cela.

Au lieu de cela:

  • :set hidden
    Si vous n'avez pas encore 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 basculer entre les tampons. J'aime #ctrl-6 moi-même (seul le commutateur utilise le tampon précédemment utilisé ou # le numéro de tampon :ls).
  • Utilisez <=> pour répertorier les mémoires tampons ou un plugin tel que MiniBufExpl ou BufExplorer .

Autres conseils

Un peu tard dans la soirée, mais surpris de ne pas voir 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 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 si ce n'est pas le cas.

Vim :help window explique la confusion " tabs vs buffers " plutôt bien.

  

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

L'ouverture de plusieurs fichiers est réalisée dans vim avec des tampons . 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.

Les

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

Enfin, dans cette analogie, les pages d'onglets de vim correspondraient à plusieurs bureaux, c'est-à-dire différents réarrangements de fenêtres.

Comme l'explique vim help: tab-page, une page à onglet peut être utilisée pour modifier temporairement un fichier sans modifier quoi que ce soit dans la disposition actuelle des fenêtres et des mémoires tampons. Dans ce cas, un autre onglet peut être utilisé 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).

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 les programmeurs aiment imposer leur & Quot; éthique & Quot; sur tous les autres, cette réalisation est donc certainement une caractéristique primordiale.

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

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 les 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 la prise en charge de la souris est activée avec :set mouse=a, vous pouvez interagir avec les onglets en cliquant dessus. Il existe également un bouton + par défaut permettant de créer un nouvel onglet.

Pour la documentation sur les onglets, tapez :help tab-page en mode normal. (Après cela, vous pouvez vous entraîner à déplacer une fenêtre vers un onglet en utilisant :help windows.) 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 vim -p file1 file2 ....

Ajout: 2013-12-19

Pour ouvrir plusieurs fichiers dans vim avec chaque fichier dans un onglet séparé, utilisez -p. Si vous êtes comme moi et oubliez toujours d’ajouter vim, vous pouvez l’ajouter à la fin, car vim suit les règles d’analyse d’option de ligne de commande habituelles. Vous pouvez également ajouter un mappage d'alias bash vim -p à <=>.

J'ai rencontré le même problème. Je voulais que les onglets 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 plug-in appelé l'Explorateur de mini tampons , une fois installé et configuré, vous pourrez travailler avec les tampons de la même manière que les onglets sans perdre aucune fonctionnalité.

C’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 passer d'une question à l'autre.

La première chose à faire est, comme d’autres l’ont expliqué:

Les pages d'onglets ressemblent beaucoup à des onglets . Elles 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, mais qui masque malheureusement le pouvoir supplémentaire dont vous disposez au sein d’une page à onglet.

La première description que j'ai comprise provenait de la réponse de @ crenate : ils correspondent à plusieurs bureaux. À cet égard, vous n’auriez jamais ouvert que quelques ordinateurs de bureau, mais de nombreuses fenêtres d’interface graphique ouvertes dans chacun d’entre eux.

Je dirais qu'ils sont similaires à ceux des 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 qui déroutent

Fenêtre de visualisation

Cela n’a aucun sens pour moi. Une fenêtre d'affichage qui, bien qu'elle comporte un terme de dictionnaire défini , n'a été entendue que par les 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, il semble étrange de se référer à un bureau comme à une seule fenêtre.

Espaces de travail

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

  

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

C'est donc comme un endroit où vous stockez un groupe de tampons.

Au départ, je ne ressemblais pas au concept de Sublime Text d'un espace de travail qui est une 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, en y réfléchissant 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 d’un projet à l’autre. C’est pourquoi il est étrange d’utiliser une page à onglet pour ouvrir un seul fichier.

Collection de fenêtres

Le <=> 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 et à une très bonne explication dans cette article de linux.com :

  

Une fonctionnalité très 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: la rubrique d'aide ou en appuyant sur la touche F1. WhLorsque vous entrez dans l’aide, Vim divise la fenêtre 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 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.

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

Les tampons sont partagés entre les onglets. Il ne semble donc 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 ...

  • 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 prenne en charge cela 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 ne soit 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). parce que c'est long et que le formatage n'est pas correct).

J'utilise des tampons tels que des onglets, à l'aide du plug-in de BufExplorer . 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’onglet 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 ...

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

Qui utilise une seule fenêtre et ajoute une ligne en haut pour simuler les onglets (affichant uniquement 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 au reste de vim.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top