Je ne comprends pas les tampons. Lorsque j'ouvre 3 fichiers sur le même onglet et ferme ma fenêtre, je suis généralement ennuyé de découvrir la prochaine fois que j'ouvrirai l'un de ces fichiers qu'il y a d'étranges fichiers d'échange persistants et me donnant des messages embêtants. Mais maintes et maintes fois j'ai lu que ces choses sont le nirvana de productivité que je manque et que des onglets ont été faits pour que les plébéiens les utilisent.
Je vous demande donc, l'expert Vim: quels sont les avantages d'utiliser des tampons par rapport aux onglets? Je ne vois pas comment la différence pourrait être profondément différente, mais je ne me considérerais qu'au niveau débutant-intermédiaire au fonctionnement de Vim. Est-ce :ls
:b#
vraiment beaucoup plus rapide gt
qu'ingérer? Je pense que cela doit aller plus loin que cela.
:split
cliquant sur "fenêtres". Si vous avez tous vos tampons (fichiers) dans des onglets séparés, vous n'obtiendrez pas cette vue simultanée. Je recommanderais d'apprendre vim en utilisant 1 onglet pour commencer et de s'habituer aux divisions.Réponses:
Comme l'a dit ZyX sur #vim, cette question sonne comme "Pourquoi les experts de Vim préfèrent-ils savoureux à chaud?" .
Les "experts Vim" ne préfèrent pas les tampons aux onglets: ils utilisent les tampons comme proxy de fichier qu'ils sont et les pages à onglet comme espaces de travail. Les tampons et les pages à onglets ont des objectifs différents, donc préférer l'un à l'autre n'a aucun sens.
Le problème avec les tampons et les onglets est celui de la confusion , causée par une combinaison de faits indépendants.
La plupart des éditeurs de texte et des IDE «modernes» utilisent une métaphore de tabulation pour représenter les fichiers chargés. Cette métaphore agit comme un système d'information - elle montre à l'utilisateur quels fichiers sont ouverts et leur état - et comme un appareil interactif - elle permet à l'utilisateur de manipuler (réorganiser, sélectionner, fermer…) ces fichiers ouverts. Malgré leurs nombreuses limites, les onglets sont partout et les gens y sont habitués et les attendent partout.
Vim a introduit des pages à onglets dans 7.0 pour permettre à ses utilisateurs de créer des "espaces de travail" ad hoc. Rien dans leurs fonctionnalités, leurs options spécifiques, leurs commandes spécifiques ou leurs
:help
sections ne suggère que les pages à onglet pourraient ou devraient être utilisées comme proxy de fichier.Rien que le nom et l'apparence des "onglets", bien sûr, ce qui crée beaucoup de confusion.
Sans
:set hidden
, qui est désactivé par défaut et pas très facile à trouver, Vim rend impossible de basculer vers un autre tampon sans écrire celui en cours ou abandonner ses modifications. Les nouveaux utilisateurs, ignorant cette option, n'ont d'autre choix que de se tourner vers une utilisation intensive de Windows ou vers la fonctionnalité "tabulaire" la plus proche qu'ils peuvent trouver: les pages d'onglet."Tab page" est un choix de nom malheureux pour cette fonctionnalité, en particulier à une époque dominée par l'idée que la lecture de la documentation est une perte de temps.
Dans Vim, les pages à onglets sont une abstraction construite au-dessus des fenêtres, elles-mêmes une abstraction construite au-dessus des tampons. Chaque nouveau niveau ajoute des fonctionnalités utiles mais restreint votre flux de travail.
La "voie tampon"
Avec un flux de travail basé sur un tampon, les fichiers avec lesquels vous travaillez sont répartis sur une seule dimension. Vous pouvez parcourir vos tampons, vous pouvez accéder à un tampon spécifique en tapant une partie de son nom (avec complétion) ou son numéro, vous pouvez alterner entre les tampons, vous pouvez les cibler assez facilement. Il n'y a pratiquement pas de friction.
Huit tampons ouverts, un seul visible:
Commutation par numéro:
Changement de nom:
Les tampons sont les proxys de fichiers de Vim. Si vous pensez en termes de fichiers, vous pensez en termes de tampons.
La "voie fenêtre"
Avec un workflow basé sur une fenêtre, vos "fichiers" sont tous les deux distribués le long de la même dimension "virtuelle" comme ils le feraient si vous utilisiez uniquement des tampons et le long de deux autres dimensions "physiques". Mais les espaces cartésiens dans lesquels se trouvent ces dimensions sont presque complètement séparés: passer à un autre tampon signifie toujours «passer à un autre fichier» mais pas à une autre fenêtre. Le tampon qui correspond au fichier souhaité peut être affiché dans cette fenêtre mais il peut également être affiché dans une autre, peut-être dans une autre page à onglet, ou pas du tout.
Avec Windows, la navigation entre les fichiers ouverts devient trop complexe ou trop simpliste, même avec
'switchbuf'
et:sb
. Principalement parce que vous êtes obligé d'utiliser deux ensembles de commandes pour ce qui est essentiellement la même chose: accéder à un tampon.Windows a leur utilisation, comme décrit ci-dessous, mais ils n'ont pas ce qu'il faut pour remplacer les tampons dans le flux de travail de quiconque.
Ici, je travaille sur un schéma de couleurs Vim. Les deux fenêtres sont des vues différentes du même tampon: celle du haut sert de référence, avec un tableau des codes de couleurs utilisés dans le schéma de couleurs, et celle du bas est l'endroit où je travaille:
Les fenêtres ne sont pas conçues comme des proxys de fichiers et ne peuvent pas être transformées en un: ce sont des "conteneurs" ou des "fenêtres" conçues pour vous offrir une vue dans un tampon. Ni plus ni moins.
La "façon tabulation"
Avec un workflow basé sur des onglets, vous essayez essentiellement de reproduire l'expérience utilisateur à laquelle vous êtes habitué à partir de votre éditeur précédent tout en ignorant complètement la nature même des pages à onglet de Vim. Si nous oublions un instant que cette stratégie est généralement très improductive, il est également impossible, tout comme avec Windows, de forcer Vim à adhérer à ce paradigme "un fichier = un onglet" sans perdre beaucoup de flexibilité.
Travaillant toujours avec les mêmes fichiers que ci-dessus, la tabline occupe un espace important pour pratiquement aucun avantage. Tous mes fichiers et tous mes onglets sont appelés,
javascript*.vim
donc je ne peux pas le faire3gt
et je suis sûr que je vais me retrouver au bon endroit et il est impossible d'atteindre un onglet spécifique par son nom. Ajoutez à cela le fait que son étiquette peut très bien être très inutile mais parfaitement logique[Quickfix List]
… Puisqu'il n'y a aucun moyen pratique de lier un fichier / tampon à une page à onglet, il ne vous reste en gros qu'un seul moyen pratique de naviguer entre les pages à onglet / buffers / files: cyclisme.Et oui, ma tabline est encombrée de seulement 8 onglets, imaginez si j'en avais 20!
Huit tampons ouverts dans huit pages à onglets (faux)
Deux onglets pour deux tâches spécifiques (à droite)
Les pages à onglet sont des "conteneurs" ou des "fenêtres" conçues pour contenir une ou plusieurs fenêtres, elles-mêmes également des "conteneurs" conçus pour contenir des tampons.
En conclusion
Les "experts Vim" (supposons que je puisse parler comme si j'étais un) ne préfèrent pas les tampons aux onglets: ils utilisent simplement Vim tel qu'il a été conçu et sont parfaitement à l'aise avec ce design:
Les "experts Vim" ont 2, 30 ou 97 tampons chargés et sont très heureux de ne pas avoir à gérer la distribution spatiale;
lorsqu'ils ont besoin de comparer deux fichiers ou de travailler dans une partie de la mémoire tampon actuelle tout en en gardant une autre comme référence, les "experts Vim" utilisent des fenêtres car c'est ainsi qu'ils sont censés être utilisés;
lorsqu'ils ont besoin de travailler pendant un certain temps sur une partie distincte du projet sans toucher à leur vue actuelle, les "experts Vim" chargent une toute nouvelle page à onglet.
la source
*.c
,*.h
,scripts/*
ettest/**/*.lua
fichiers). Étant donné que mon terminal ne fait que 239 colonnes de large, l'approche «un fichier par onglet» est impossible à utiliser.Je gardais chaque tampon dans un onglet séparé, mais j'ai grandi fatigué de constamment gtet gT-ment partout.
J'ai également estimé que les tampons étaient trop difficiles à gérer.
Voici quelques techniques qui ont totalement changé mon opinion précédente:
:b
. Vous devenez étonnamment rapide à cela. Voir vim, basculer rapidement entre les fichiers en utilisant vanilla Vim (pas de plugins)Voici mon workflow typique:
:e
(généralement avec une expression régulière comme:e src/**/F*Bar.js
) pour ouvrir un tampon:e
-le également. Si je veux basculer entre ce tampon et le tampon actuellement ouvert, je vais l'utiliser:sp
ou l':vsp
ouvrir dans une fenêtre séparée.J'ai senti qu'après une semaine environ de forcer ces nouveaux modèles, il était devenu beaucoup plus facile de visualiser les tampons que j'avais ouverts et comment accéder à l'un d'eux en seulement quelques coups automatiques.
la source
gT
c'était la commande pour changer d'onglet, j'avais cherché le remplacement pourctrl+tab
. Merci donc d'avoir réellement aidé un nouvel utilisateur plutôt que de simplement le faire se sentir stupide.nnoremap <leader>b :ls<CR>:b<space>
c'est assez bien pour changer rapidement de tampon, car il vous montre une liste des tampons actuellement ouverts. De plus, les noms partiels sont acceptés (tant qu'il n'y a qu'une seule correspondance).ctrl N
ouctrl P
(P est ce que j'utilise habituellement), cela vous donnera une liste de mots pour terminer ce que vous tapiez ... Son intelligent en fonction de votre courant tampon, ceux fractionnés, ceux que vous regardiez et tous les autres fichiers ouverts!L'inconvénient des onglets est que vous ne pouvez voir que le contenu d'un à la fois. Donc, si vous les utilisez comme dans un navigateur, vous perdez la visualisation de plusieurs tampons côte à côte, ou même la visualisation de parties séparées du même fichier en plusieurs parties. Par conséquent, beaucoup recommandent d'utiliser des onglets uniquement pour séparer différents espaces de travail (par exemple en avoir un pour un projet Java, un autre pour une liste de tâches, un troisième à pirater sur un script sur le côté).
Les problèmes que vous décrivez font apparaître que vous utilisez mal Vim. Soit (principalement) une seule instance dédiée. Ensuite, les tampons qui deviennent cachés "réapparaîtront" simplement si vous les rééditez (et vous pouvez maintenant utiliser la liste des tampons pour les rappeler), et il n'y aura pas de messages de fichier d'échange. Ou, utilisez des instances Vim distinctes par projet / fichier / session d'édition, mais prenez l'habitude de complètement
:quit
chaque instance lorsque vous avez terminé avec le fichier.la source
Une autre astuce, lorsque vous utilisez le nom du tampon comme argument pour: tampon, vous n'avez pas besoin de spécifier des noms entiers. Cependant, si plusieurs tampons correspondent à l'argument donné, les tampons ne seront pas commutés.
Tout fragment du nom du tampon peut être utilisé pour correspondre. Par exemple, si vous disposez des tampons
request_manager.java
,queue_manager.java
puis:buffer que
ou:b que
correspond à tous les deux, mais basculez vers queue_manager.java comme il correspond au début.la source
J'utilise des onglets, Ctrl- Pet des sessions Vim dans mon flux de travail et j'ai maintenant plus d'un an:
J'ai )et (mappé à "aller à l'onglet suivant" et "aller à l'onglet précédent" respectivement. tnouvre un nouvel onglet. J'utilise également tabm pour aider à garder les choses organisées.
J'utilise des sessions Vim pour des groupes de fichiers liés à l'histoire / bug actuel sur lequel je travaille, généralement par catégorie. Ces sessions sont écrasées au cours du processus.
Je n'ai pas encore trouvé mieux que Ctrl- P, mais cela prend un peu de temps pour traiter tous les fichiers pour les trouver.
la source
Lance 2c dans la pile.
TLDR;
:b *part-of-filename*
est le meilleur moyen de trouver un fichier dont vous avez besoin dans la liste des tampons, c'est-à-dire qu'il est PLUS RAPIDE et a MOINS de charge cognitive que les numéros de tampon, les onglets ou les fenêtres pour le suivi des fichiers.Ce n'est rien pour moi d'avoir 30 tampons ouverts (c'est-à-dire que je n'ai pas fait le ménage), et la beauté des tampons utilisés est bien que cela ne me ralentit pas du tout. En fait, cela accélère les choses lorsque quatre jours après avoir ouvert le fichier, j'en ai besoin, j'appelle
:b *part-of-filename*
et il apparaît comme par magie, impressionnant ses collègues et les collectivistes toady.Les tampons sont destinés aux fichiers.
Pour être efficace:
:e
ls
TOUT le temps lorsque vous commencez pour obtenir un bon modèle mental (vous ne pouvez pas chercher ce que vous ne pouvez pas voir, mentalement ou littéralement):q
ça souffle:b
dans votre mémoire musculaire:b1
est bon pour le premier fichier que vous savez que vous avez ouvert, sinon les chiffres et les lettres deviennent rapidement maladroits:b#
est bon pour passer à votre dernier fichier, ce qui est un besoin courant:bd#
est bon lorsque vous êtes passé à un fichier temporaire, avez fait ce que vous deviez faire, êtes revenu avec:b#
et souhaitez maintenant fermer ce fichier temporaire:b *part-of-filename*
est autrement le meilleur moyen de trouver un fichier dont vous avez besoin dans la liste, c'est-à-dire qu'il est PLUS RAPIDE et a MOINS de charge cognitive que les numéros de tampon, les onglets ou les fenêtres pour le suivi des fichiers.Le seul ennui de
:b *part-of-filename*
est que, parfois, vous n'avez pas encore ouvert le fichier et que vous devez d'abord revenir en arrière:e path/to/full-filename
.Les onglets permettent de différencier les fichiers vraiment indépendants.
Ou garder une disposition de fenêtres particulière à portée de main (avertissement: je ne l'ai jamais utilisé pour cela moi-même).
Ou pour les fichiers rarement utilisés, mais prévisibles. Pour moi, c'est généralement un
commitMessage
fichier que j'annote au fur et à mesure que je travaille, donc je n'ai pas à trop réfléchir quand vient le temps de faire un commit.gt
est plus rapide que:b com<enter>
(si vous vous sentez chanceux, sinon:b com<tab><enter>
):tabe commitMessage
gt
ougT
aussi un favori de la mémoire musculaireLes séparations de fenêtres servent à comparer visuellement les informations
Ou avoir un accès immédiat à des informations importantes (à vrai dire, à moins que ces informations ne soient en quelque sorte quelque chose dont j'ai besoin pour une mise à jour en direct,
:e
c'est- à- dire un fichier journal, je retire généralement le contenu dans le fichier actuel et y traite).:vsp
ouC-w v
ouvre une scission verticale c'est-à-dire à gauche | à droite, puis utilisez:b
ou:e
pour obtenir le fichier souhaité:sp
ouC-w s
ouvrez une séparation horizontale, c'est-à-dire haut / basC-w C-w
c'est-à-dire double Ctrl-w, vous fait tourner autour des fenêtres disponiblesC-w c
fermer la fenêtre actuelleC-w o
fermez toutes les autres fenêtres, gardez le courant UNIQUEMENTla source
:b#
et:bd#
!Ajoutez-les à vos
.vimrc
tampons et commencez à les aimer:De cette façon, vous pouvez les parcourir en avant / en arrière en mode normal via Tab/ ShiftTab.
la source
<C-I>
. Mappez<C-Tab>
plutôt si vous le voulez vraiment.:n
et se:N
rapportent à la liste des arguments, pas aux tampons ouverts. Vous voudriez:bn
et:bp
(:bnext
et:bprev
). tpope's unimpaired fournit des mappages]b
et[b
pour cela (et d'autres bonnes choses) si vous le souhaitez.(
et)
, ou<left>
et les<right>
flèches, seraient sans doute des touches moins utiles à remplacer que tabulation, si vous voulez vraiment un court mappage.Ctrl + Tab
car c'est ce que la plupart des autres éditeurs et navigateurs GUI utilisent.Je voudrais suggérer une implémentation brillante d'un bon nombre d'années: kien / tabman.vim . Il clarifie les points suivants:
Cela a été une merveilleuse redécouverte de ce plugin magique, qui aurait dû rester dans ma configuration Vim pendant un bon nombre d'années également. Alors que je continuerais à chercher quelque chose qui affiche également tous les tampons cachés, TabMan est mon surhomme lorsqu'il s'agit d'avoir une vue d'ensemble de la façon dont les tampons étaient disposés sur différents onglets.
la source
Les onglets et les tampons sont deux normes différentes dans Vi. Lisez ces trois définitions:
Lisez cet article pour plus https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/
la source
Je charge des tampons "sélectionnés" sous forme d'onglets pour basculer rapidement (TAB / S-TAB) entre eux. Le cadre des espaces de travail convient ici, car pour moi, les tampons VS tabs sont principalement la visibilité. Je peux afficher les fichiers importants / de travail dans les fenêtres et les onglets et masquer ceux que je n'ai pas besoin d'utiliser en arrière-plan à la volée sans avoir à me souvenir des chemins ou prendre du temps pour les rechercher et les charger à nouveau une fois que le besoin se fait sentir. Cela permet de gérer plusieurs tâches ou projets dans une session VIM, je suppose que cela était important dans les machines à faible mémoire, mais est également bon pour concentrer toutes les tâches d'édition sous un même cadre d'application. J'ai également des raccourcis de décalage de tampon définis sur Ctrl-Droite / Gauche afin que je puisse également passer rapidement à travers différents tampons.
En fin de compte, on ne peut diviser en certaines fenêtres pour ses utilisations autant que la succession d'écran, mais on peut conserver plusieurs paramètres de fenêtres dans plusieurs onglets, élargissant ainsi son espace de travail et améliorant le flux de travail permettant la division pratique des tâches compliquées faisant tourner plusieurs fichiers .
Pour les fichiers d'échange, vous pouvez demander à VIM de les conserver tous dans un dossier de votre désignation. Pour cette utilisation
:set directory
.la source