Comment modifier un tampon existant dans un nouvel onglet dans vim?


51

Supposons que j'ai commencé vim comme ceci:

vim foo bar

Maintenant, je décide que je veux chacun de ces fichiers dans son propre onglet. Existe-t-il un moyen de le faire sans quitter vim et ajouter l’ -poption à ma ligne de commande?


Beaucoup d'entre vous cherchent probablement tabe %ce qui est mentionné dans la réponse de liuyang1 ci-dessous.
Mateusz Piotrowski

1
@MateuszPiotrowski Comme je l'ai mentionné dans ce commentaire à cette réponse , :tabe %ne fonctionne pas avec les tampons qui n'ont pas de chemin de fichier valide. :tab sbfonctionne à chaque fois.
JoL

Réponses:


30

Lorsque vous démarrez vim comme cela, vous n'obtenez pas de client vim, l'éditeur de texte utilise l'invite terminal ou cmd - les deux fichiers se trouvent dans deux mémoires tampons différentes. Utilisez :lspour lister les tampons:

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

Le% a est le tampon actif. Vous pouvez utiliser :b2pour basculer vers le tampon 2 ou pour passer au :bnsuivant ou :bpprécédent. Je préfère (CTRL-W v) pour scinder les fenêtres verticalement plutôt que (CTRL-W s), qui se divise horizontalement.

Si vous avez 2 fichiers chargés et aucun onglet (encore), vous pouvez, :tabnewet dans le nouveau type d'onglet:b2

Si vous voulez toujours que les tampons soient chargés dans leurs propres onglets, consultez cet article .


Oui, mais je veux avoir des onglets.
InnaM

Ainsi, vous avez déjà démarré vim de manière à ce que vos fichiers se trouvent dans le client vim, pas dans un shell cmd / terminal?
DaveParillo

1
Je ne suis pas sûr de ce que tu veux dire. J'utilise le shell pour démarrer vim comme décrit ci-dessus, puis j'ai un vim en cours d'exécution.
InnaM

Ah! Je suppose que je n'ai jamais vraiment compris que les tampons ne sont pas locaux aux onglets. J'ai toujours pensé (sans trop y penser) que chaque onglet a sa propre liste de tampons.
InnaM

Sur ma machine, vimlancera un éditeur dans le shell. Pour obtenir l'interface utilisateur graphique vim que je dois utiliser gvim. Et vous avez raison, les tampons sont globaux pour l’application vim.
DaveParillo

47

Vous souhaitez ouvrir un tampon dans un nouvel onglet?

Fractionner l'écran (Ctrl-W s), ouvrir une fenêtre et Ctrl-W T


Hmm. Pas tout à fait ce que j'avais en tête, mais pas mal pour un début. Je ne savais pas Ctrl-w Tencore. Bien sûr, le premier onglet aura toujours deux tampons de cette façon.
InnaM

Non. Après avoir divisé l'écran en deux fenêtres et en avoir ouvert une dans un nouvel onglet, le premier onglet disparaît. Il ne restera pas (du moins ce n’est pas sur mon gvim72). En ce qui concerne les tampons, ils ne sont pas connectés aux fenêtres / onglets ... ils ressemblent davantage à de la mémoire où vim stocke le contenu du fichier.
Rook

Ah! Vous avez raison. Je interprétais mal la sortie de :ls.
InnaM

De plus, ctrl-w V divise la fenêtre verticalement.
Shannon Nelson

1
CTRL-w v est la commande correcte pour fractionner des fenêtres verticalement
JRM

27

Vous pouvez accomplir cela en combinant la tabcommande avec la sb[uffer]commande.

Vous devez d’abord connaître l’identifiant de la mémoire tampon que vous souhaitez ouvrir dans un nouvel onglet. Vous pouvez le trouver avec la lscommande:

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

Une fois que vous avez l'ID, vous pouvez facilement l'ouvrir dans un nouvel onglet en utilisant:

:tab sb 2

La sbcommande ouvre normalement le tampon donné dans une nouvelle fenêtre divisée, mais la tabcommande l’ouvre dans un nouvel onglet.

La tabcommande vous permet également de spécifier l'emplacement de création du nouvel onglet dans la liste d'onglets. Par exemple, :0tab sb 2le nouvel onglet "barre" apparaîtra au début de la liste au lieu d’après l’onglet actuel.


2
Vous n'avez pas besoin du numéro de mémoire tampon, donnez-lui une partie non ambiguë du nom de la mémoire tampon et VIM se charge du reste.
dessert du

1
C'était la réponse que je cherchais et dont j'avais besoin. J'ai été consterné quand je :tab buffer part-of-namen'ai pas ouvert un nouvel onglet! Mais a :tab sb part-of-nametravaillé comme un charme. Je vous remercie!!!!
Sukima

Ce n’est pas la question exacte de OP, mais c’est exactement ce que je cherchais :)
jackcogdill

25

Voici un autre moyen d'accomplir ce que l'OP a demandé:

:bufdo tab split

Cela ouvrira chaque tampon dans un onglet distinct, peu importe le nombre. Si vous en utilisez autant, il est facile de créer un mappage dans votre fichier .vimrc. Combiné avec quelque chose comme ce petit plugin vim, ce qui suit ouvrira chaque élément de :grep(ou : Ack ) dans un onglet distinct:

:grep foo
:QuickFixOpenAll
:bufdo tab split

Bien entendu, lorsque vous aurez recours à un plugin, il sera assez facile de le modifier pour ouvrir le contenu de la liste de correctifs directement dans des onglets.

MISE À JOUR : Je dois vraiment faire l'éloge du commentaire de ggustafsson ci-dessous. C'est de loin la meilleure réponse du lot et illustre admirablement la tendance de Vim au comportement compositionnel. La suggestion est:

 :tab sball

Cela vaut la peine de consulter l'aide de Vim pour : tab et : sball pour voir ce qui se passe ici.


Une approche similaire d’une précédente édition, pour la postérité, est :bufdo execute "tabnew %". Je pense que la nouvelle approche est un peu plus claire.
John Whitley

Une mise en garde: si le tampon de démarrage dans vim n'est pas vide, cela semble ouvrir le dernier tampon deux fois. Je posterai une mise à jour si je trouve une solution simple.
John Whitley

12
:tab sballsemble fonctionner mieux.
ggustafsson

6

1. Ouvrez deux fichiers dans Vim.

$ vim foo bar

2. Vérifiez le nombre de tampons.

: ls
  1% un "foo"
  2 "bar"

3. Enchaînez deux commandes: tabnewpour ouvrir un nouvel onglet et b <buffer_number>pour charger le tampon souhaité dans l'onglet.

: tabnew | b 2

8
Le problème de l’étape 3 est qu’il crée d’abord un nouvel onglet avec un tampon vide, puis ouvre le tampon 2, ce qui crée un tampon supplémentaire sans titre dans la liste des tampons. Mieux vaut utiliser:tab sb 2
rkjnsn

1
@rkjnsn vous devriez poster cela comme réponse - cela répond mieux à la question "comment éditer un tampon existant dans un nouvel onglet dans vim?"
JonnyRaa

1
@ JonnyLeeds fait.
Rkjnsn

4

Ajoutez juste un point que d’autres gars n’ont pas mentionné.

  • fenêtre actuelle vers nouvel onglet

Si vous avez plusieurs fenêtres, <C-W>Tcette fenêtre sera déplacée vers un nouvel onglet. Cependant, ce raccourci ne concerne que "Fenêtre", pas "tampon". Si vous préférez ce style, :spou <C-W>spour dupliquer le tampon actuel dans une fenêtre supplémentaire, <C-W>Tdéplacez-le vers un nouvel onglet.

4 frappes ou 7 frappes.

  • tampon actuel vers nouvel onglet

:tabe % pour ouvrir un nouvel onglet pour le tampon actuel.

7 frappes.

  • tampon vers un nouvel onglet

Si vous utilisez le plugin CtrlP, vous pouvez également utiliser "CtrlPBuffer", puis avec un <C-t>raccourci pour l'ouvrir avec une nouvelle page à onglet. Ce style permet de passer facilement à différents tampons.

Avec raccourci de "CtrlPBuffer", 4 frappes de touche ou plus.


:tabe %C’est ce que je recherche depuis longtemps, merci!
Pevik

Non, :tabe %n'ouvre pas vraiment un nouvel onglet pour le tampon actuel. Qu'est-ce qui %se passe est que cela est étendu au chemin de fichier du tampon actuel et :tabeouvre ce chemin. Vim verra que vous essayez d'ouvrir un fichier que vous avez déjà ouvert et réutilisera le tampon que vous avez. Cela signifie que cela ne fonctionne pas avec les tampons qui n'ont pas de chemin de fichier. Si vous ouvrez un nouveau fichier avec :newet que vous ne l'avez pas enregistré, vous ne pouvez pas le mettre sur un nouvel onglet avec ceci. Le vrai commandement dont vous avez besoin est ce que rkjnsn a mis dans sa réponse: :tab sb %ou plus court::tab sb
JOL
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.