Pourquoi les experts de Vim préfèrent-ils les tampons sur les tabs?

Je ne comprends pas les tampons. Lorsque j’ouvre 3 fichiers sur le même onglet et que je ferme ma fenêtre, je suis généralement ennuyé de découvrir la prochaine fois que j’ouvre un de ces fichiers qui contient des fichiers d’échange étranges et des messages embêtants. Mais à maintes resockets, j’ai lu que ces choses sont le nirvana de productivité qui me manque et que les plébéiens ont utilisé des tabs.

Je vous demande donc, l’expert de Vim: quels sont les avantages de l’utilisation de tampons sur les tabs? Je ne vois pas en quoi la différence pourrait être profondément différente, mais je me considérerais seulement au niveau débutant-intermédiaire chez Vim. Est-ce que :ls :b# vraiment beaucoup plus rapide que ça? Je pense que cela doit aller plus loin que cela.

Comme ZyX l’a dit sur #vim, cette question ressemble à “Pourquoi les experts de Vim préfèrent-ils savoureux à chaud?” .

Les “experts Vim” ne préfèrent pas les tampons sur les tabs: ils utilisent les tampons comme proxies de fichiers et les pages d’onglet comme espaces de travail. Les tampons et les pages à tabs ont des objectives différents. Préférer l’un à l’autre n’a donc aucun sens.

Le problème avec les tampons et les tabs est un problème de confusion , causé par une combinaison de faits indépendants.

  1. 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 en tant que périphérique interactif – elle permet à l’utilisateur de manipuler (réorganiser, sélectionner, fermer…) ces fichiers ouverts. Malgré leurs nombreuses limitations, les tabs sont partout et les gens sont habitués à eux et les attendent partout.

  2. Vim a introduit les pages à onglet dans la version 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 sections :help suggèrent que les pages à onglet pourraient ou devraient être utilisées comme fichiers proxy.

    Rien que le nom et l’apparence des “pages d’onglet”, bien sûr, ce qui entraîne beaucoup de confusion.

  3. Sans :set hidden , qui est désactivé par défaut et pas très facile à trouver, Vim rend impossible le passage à un autre tampon sans écrire celui en cours ou abandonner ses modifications. Les nouveaux utilisateurs, qui ne sont pas au courant de cette option, n’ont d’autre choix que de se tourner vers des fenêtres lourdes ou vers la fonction «tab-like» la plus proche qu’ils peuvent trouver: les pages à onglet.

“Onglet page” est un choix malheureux pour cette fonctionnalité, en particulier à une époque où l’idée de lire de la documentation est une perte de temps.

Dans Vim, les pages à tabs 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 stream de travail.

La “voie tampon”

Avec un workflow basé sur des tampons, 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 l’achèvement) ou son numéro, vous pouvez alterner entre les tampons, vous pouvez les cibler assez facilement. Il n’y a pratiquement pas de friction.

  1. Huit tampons ouverts, un seul visible:

    Huit buffers ouverts

  2. Changement par numéro:

    Commutation par numéro

  3. Changer de nom:

    Changer de nom

Les tampons sont les fichiers proxy de Vim. Si vous pensez en termes de fichiers, vous pensez en termes de tampons.

La “fenêtre”

Avec un workflow basé sur une fenêtre, vos “fichiers” sont tous deux dissortingbués selon la même dimension “virtuelle” que 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: le déplacement vers un autre tampon signifie toujours “se déplacer vers un autre fichier”, mais pas vers une autre fenêtre. Le tampon correspondant au fichier souhaité peut être affiché dans cette fenêtre, mais il peut également être affiché dans un 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 les utilise, comme décrit ci-dessous, mais ils ne disposent pas de quoi remplacer les tampons dans le stream de travail de quiconque.

Ici, je travaille sur un jeu de couleurs Vim. Les deux fenêtres sont des vues différentes du même tampon: la première sert de référence, avec une table des codes de couleurs utilisés dans le schéma de couleurs, et la partie inférieure est celle où je travaille:

Travailler sur un programme de couleurs

Windows ne sont pas conçus comme des proxys de fichiers et ne peuvent pas être conçus comme des proxys: ce sont des “conteneurs” ou des “fenêtres” conçues pour vous offrir une vue dans un tampon. Ni plus ni moins.

La “voie tabulaire”

Avec un workflow basé sur des tabs, vous essayez essentiellement d’imiter l’expérience utilisateur de votre éditeur précédent tout en ignorant complètement la nature même des pages d’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 une place importante pour pratiquement aucun avantage. Tous mes fichiers et tous mes tabs s’appellent javascript*.vim donc je ne peux pas faire 3gt et je suis sûr que je me retrouverai au bon endroit et qu’il est impossible d’atteindre un onglet spécifique par nom. Ajoutez à cela le fait que son étiquette peut très bien être la [Quickfix List] très inutile mais parfaitement logique… Comme il n’existe aucun moyen pratique de lier un fichier / tampon à une page d’onglet, il ne vous rest naviguer entre les pages à onglet / tampons / fichiers: cyclisme.

Et ouais, mon tabline est bafoué avec seulement 8 tabs, imaginez si j’en avais 20!

  1. Huit tampons s’ouvrent dans huit pages à onglet (incorrect)

    Faux

  2. Deux tabs pour deux tâches spécifiques (à droite)

    Droite

Les pages à tabs 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

“Vim experts” (supposons que je peux parler comme si j’étais un) ne préfèrent pas les tampons sur les tabs: ils utilisent simplement Vim comme il a été conçu et sont parfaitement à l’aise avec ce design:

  • Les experts de Vim ont 2, 30 ou 97 tampons chargés et sont très heureux de ne pas avoir à gérer la dissortingbution spatiale;

  • lorsqu’ils ont besoin de comparer deux fichiers ou de travailler dans une partie du tampon actuel tout en en conservant une autre, les “experts de Vim” utilisent Windows car c’est ainsi qu’ils doivent être utilisés;

  • lorsqu’ils ont besoin de travailler pendant un moment sur une partie distincte du projet sans avoir à modifier leur vue actuelle, les “experts Vim” chargent une nouvelle page à onglet.

J’avais l’habitude de garder chaque tampon dans un onglet séparé, mais je me lassais de constamment gt et gT-ing autour de partout.

Je pensais aussi que les tampons étaient trop difficiles à gérer.

Voici quelques techniques qui ont totalement changé mon opinion précédente:

  • gestion des tampons: b. Vous obtenez étonnamment vite à cela. Voir vim, basculer rapidement entre les fichiers en utilisant vanilla Vim (pas de plugins)
  • Jump / Change lists (ctrl o / i et g;)
  • Fichier alternatif (^)
  • Le plugin inimpaired de tpope: https://github.com/tpope/vim-unimpaired . Volez entre les différentes listes de tampons avec des mappages.

Voici mon workflow typique:

  • Ouvrez vim et utilisez edit (généralement avec une regex) pour ouvrir un tampon
  • Réalisez que je dois ouvrir un autre fichier. Utilisez également “edit” pour cela. Si je veux basculer entre ce tampon et le tampon actuellement ouvert, j’utiliserai “sp” ou “vsp” pour l’ouvrir dans une fenêtre séparée.
  • Répétez jusqu’à ce que je dispose des 3-5 fichiers que je changerai entre les techniques de la liste à puces ci-dessus pour passer entre vos tampons.
  • Si je veux “recommencer” avec mes tampons, fermez simplement vim et rouvrez-le.

J’ai senti qu’après environ une semaine de forçage de ces nouveaux motifs, il était devenu beaucoup plus facile de visualiser les tampons que j’avais ouverts et comment accéder à l’un d’entre eux en seulement quelques coups automatiques.

L’inconvénient des tabs 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 vue de plusieurs tampons côte à côte, ou même consultez des parties distinctes du même fichier dans des divisions. Par conséquent, beaucoup recommandent d’utiliser des tabs 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 pour pirater un script sur le côté).

Les problèmes que vous décrivez font apparaître que vous utilisez mal Vim. Soit avoir (principalement) une seule instance dédiée. Ensuite, les tampons qui se cachent vont simplement “réapparaître” 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 bien, utilisez des instances Vim séparées par projet / fichier / session d’édition, mais prenez l’habitude de :quit chaque instance lorsque vous en avez terminé avec le fichier.

Autre astuce: lorsque vous utilisez le nom du tampon comme argument de: buffer, vous n’avez pas besoin de spécifier un nom entier. Cependant, si plusieurs tampons correspondent à l’argument donné, les tampons ne seront pas basculés.

Tout fragment du nom du tampon peut être utilisé pour correspondre. Par exemple, si vous avez les tampons queue_manager.java et queue_manager.java alors :buffer que matches ou: b que les deux, mais passera à queue_manager.java au début.

J’utilise les tabs, les sessions CtrlP et Vim dans mon stream de travail depuis plus d’un an:

  • J’ai ) et ( mappé à “aller à l’onglet suivant” et “aller à l’onglet précédent” respectivement. T ouvre un nouvel onglet. Je fais également usage de tabm pour aider à garder les choses organisées.

  • J’utilise les sessions Vim pour des groupes de fichiers liés à l’histoire ou au bogue 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é quelque chose de mieux que CtrlP , mais cela prend un peu de temps pour traiter tous les fichiers pour les trouver.

Ajoutez-les à votre .vimrc et commencez à aimer les tampons:

 :nnoremap  :n :nnoremap  :N 

De cette façon, vous pouvez les parcourir en mode normal via Tab / Tab Shift .

Je charge les tampons “sélectionnés” sous forme d’tabs pour basculer rapidement entre eux (TAB / S-TAB). Le cadre des espaces de travail tient ici car, pour moi, les tabulations VS sont principalement la visibilité. Je peux faire apparaître des fichiers importants / de travail dans des fenêtres et des tabs et masquer ceux que je n’ai pas besoin d’utiliser en arrière-plan sans avoir à me souvenir des chemins ou à prendre le temps de les rechercher et de les charger à nouveau. Cela permet de gérer plusieurs tâches ou projets en une seule session VIM, je suppose que cela était important dans les machines à faible mémoire, mais il est également utile pour concentrer toutes les tâches d’édition sous un seul cadre d’application. J’ai également des raccourcis de décalage de tampon réglés sur Ctrl + Droite / Gauche pour que je puisse aussi rapidement passer d’un tampon à l’autre.

En fin de compte, on ne peut se séparer que de quelques fenêtres pour certaines utilisations, mais on peut conserver plusieurs parameters Windows dans plusieurs tabs, élargissant ainsi son espace de travail et améliorant le stream de travail. .

Pour les fichiers d’échange, vous pouvez indiquer à VIM de les conserver tous dans un dossier de votre désignation. Pour cela, utilisez le :set directory .