Lorsque j'ai besoin de travailler sur différents projets en même temps, j'ai le flux de travail suivant:
- Je crée un onglet pour chaque projet.
- Dans chaque onglet, j'ouvre les fichiers que je souhaite modifier, ce qui crée plusieurs tampons.
- En option, si j'ai besoin de voir deux (ou plus) fichiers en même temps, je crée des fenêtres divisées, j'ai donc un onglet contenant différentes fenêtres qui affiche un tampon.
Pour naviguer entre mes tampons, je ne l'utilise pas vraiment :ls
et :b [name or number of buffer]
j'ai plutôt créé des mappages pratiques me permettant de basculer entre les tampons avec :bnext
et:bprevious
Cette façon de travailler est plutôt bonne mais quelque chose me dérange: les tampons sont partagés entre les onglets.
Si j'ouvre file1
et file2
dedans tab1
et file3
dedans tab2
, si tab1
j'utilise plusieurs fois :bnext
je verrai file3
dans cet onglet que je ne veux pas. Le flux de travail que je voudrais obtenir est le suivant :
- Démarrez vim (j'ai un premier onglet avec un tampon dedans):
$ vim foo
- Ajoutez un tampon à cet onglet:
:e bar
- Ouvrez un nouvel onglet et passez-y:
:tabnew
- Ouvrez un nouveau tampon dans cet onglet:
:e baz
- Si je reste dans ce tampon et que je le fais
:bnext
ou:bprevious
je reste sur lebaz
tampon (car c'est le seul dans cet onglet) - Si je vais dans l'onglet précédent
:tabprevious
et que j'exécute plusieurs fois,:bnext
je basculerai uniquement entre les tamponsfoo
etbar
mais ne verrai pasbaz
Voici donc ma question: est-il possible de lier un ensemble de tampons à un onglet et de faire vim interdire l'accès à certains tampons d'un autre onglet que celui dans lequel ils sont censés être?
Remarque: je sais que l'utilisation :b [myBuffer]
serait un moyen de conserver un tampon dans un onglet, mais lorsque j'ai 3 ou 4 fichiers à modifier, j'ai l'impression que je suis vraiment plus rapide à utiliser mes mappages qu'à taper le nom du tampon (même si je peux ne tapez que quelques caractères pour correspondre au nom du tampon) .
alt+tab
(ou pire encore la souris) est beaucoup moins facile que de changer d'onglet dans vim.Réponses:
Mhh, je n'ai trouvé aucun plugin, mais vous pouvez l'écrire vous-même. Vous devez apprendre vimscript pour cela. Je viens de mettre en œuvre la fonctionnalité que vous pouvez basculer entre les tampons dans un onglet (pas encore de suppression). Vous pouvez copier ceci dans votre vimrc:
Fermez votre vimrc et ouvrez-le à nouveau. Pour trouver le tampon suivant, utilisez simplement
ou définissez votre propre commande ou mappage. Cela fonctionnera tant que vous ne fermez pas ou ne supprimez pas un onglet ou un tampon. Cela ne fonctionnera pas non plus pour plusieurs tampons. Il faudrait un peu plus de travail pour ajouter ces fonctionnalités, mais c'est définitivement faisable.
la source
Les tampons sont globaux et vous ne pouvez rien y faire à part écrire votre propre couche d'abstraction au-dessus des pages à onglet, des fenêtres et des tampons. La réponse de philolo1 montre une approche raisonnable du problème mais vous trouverez rapidement les limites d'une telle "solution" et devrez dupliquer de nombreuses fonctionnalités intégrées comme
:bufdo
ou le fichier alternatif ...Les «arguments», d'autre part, peuvent être locaux dans une fenêtre et peuvent donc être plus utiles dans votre flux de travail que les «tampons» (au sens le plus strict du mot):
Les arguments ne sont pas aussi flexibles que les tampons, mais ils peuvent fournir une base plus fiable pour votre flux de travail.
Mais travailler sur chaque projet dans sa propre instance Vim est à mon avis la seule solution pratique.
la source
Donc, avec un peu de retard, je pense avoir trouvé une réponse satisfaisante (du moins pour moi!). Vous aurez besoin de deux des plugins de Shougo:
et une carte d'accès rapide à utiliser à la place de
:ls
, pour afficher (et sélectionner) uniquement les tampons de l' onglet actuel .Par exemple, quelque chose comme:
Vous pouvez maintenant vous déplacer dans la liste de tampons de l'onglet actuel (
j
,k
), en sélectionner un (CR
), annuler (q
), entrer en mode "entrée" (insérer) pour filtrer rapidement la sélection de tampon en tapant quelques lettres, ou même appuyer surTab
pour ouvrir la liste d'actions pour l'élément actuellement sélectionné (par exemple pour ouvrir le tampon au - dessus de l'actuel actif) - en bref, vous agissez de la manière générique "Unite".(voir aussi
:h unite_default_key_mappings
et Aide Unite en général).Et maintenant, pour l'astuce finale (mais facultative). Avec altercmd , vous pouvez créer votre propre
ls
commande , activée par onglet, (basée sur la fonctionnalité Unite ci-dessus):... et chaque fois que vous frappez
:ls
, Vim exécutera votre commande à la place.Notez que vous n'aurez pas non plus besoin de
:bn
ou:bp
, car la visualisation et la sélection des tampons d'onglet sont désormais la même commande.la source
Je ne peux pas commenter car mon compte est nouveau, désolé, mais ++++ 1 pour ctrl-espace.
J'ai été vendu au moment où je l'ai fait à mi-chemin de l'aide. Ctrlspace a une structure comme celle-ci:
Ainsi, vous pouvez enregistrer un espace de travail pour chaque projet sur lequel vous travaillez, puis le charger immédiatement quand vous le souhaitez. Cela signifie qu'à chaque fois que vous fermez vim, vous pouvez enregistrer tous vos tampons et séparations d'onglets.
Vous pouvez également nommer vos onglets. Si cela ne suffit pas, vous pouvez également modifier très facilement les répertoires de travail et créer des signets pour les répertoires que vous utilisez fréquemment.
Il s'interface parfaitement avec nerdtree si vous l'utilisez (même si honnêtement, vous n'aurez probablement même pas l'impression d'en avoir besoin après une semaine avec ctrlspace)
Considérez ce cas d'utilisation:
Vous avez un projet. Il s'agit de planter des arbres. Il y a des arbres fruitiers et des arbres d'argent. Les arbres d'argent contiennent des dollars et des cents tandis que les arbres fruitiers contiennent des pommes et des oranges.
Dans cet exemple, les pommes, les oranges, les dollars et les cents sont tous des "tampons".
Ctrlspace vous permet de séparer les pommes et les oranges dans un "onglet" que vous pouvez étiqueter "fruits" - cette étiquette apparaîtra dans la ligne d'étiquette en haut de votre fenêtre. De même, les dollars et les cents vont dans un onglet "argent".
L'espace de travail "Arbres" enregistre toute cette configuration et vous permet d'y accéder immédiatement chaque fois que vous ouvrez vim.
Maintenant que je suis conscient de son existence, je ne peux vraiment pas imaginer faire du développement orienté objet dans vim sans ce plugin. Juste au cas où, voici le lien: https://github.com/szw/vim-ctrlspace
la source
Alors finalement décidé de créer mon propre plugin pour résoudre mon problème, il est disponible sur github .
J'ai utilisé l'idée de @ philolo1 et j'ai essayé de la compléter, au moment où j'écris cette réponse, c'est encore un travail en cours.
EDIT Je ne maintiens plus le plugin au fur et à mesure que mon flux de travail évolue et j'ai réalisé que la liaison des tampons à un onglet ajoute plus de problèmes qu'il n'en résout.
Le plugin lie les tampons aux onglets: lorsque l'utilisateur ouvre un tampon, il est automatiquement "stocké" dans l'onglet et n'est pas accessible à partir d'un autre onglet.
L'installation doit être «conviviale pour le gestionnaire de plugins» (au moins, elle fonctionne bien avec Vim-Plug et Vundle )
Certaines des caractéristiques principales sont:
:NextBuf
et:PrevBuf
remplacer:bn
et:bN
garder un état cohérent des onglets:ListBuf
permet de lister les tampons de manière similaire à l':ls
exception qu'ils sont séparés dans des onglets et un signe permet à l'utilisateur de voir facilement dans quel onglet il se trouve actuellement.:ChangeBuf
accepter un numéro de tampon ou un nom de tampon pour changer de tampon et changer d'onglet automatiquement:CloseBuf
:CloseTab
Pour d' autres opérations que l'utilisateur doit être en mesure d'utiliser les fonctionnalités intégrées (comme
:tabopen
,:tabnext
, etc ...)Pour chaque commande, certains mappages par défaut sont fournis et peuvent être facilement désactivés en les ajoutant
let g:betterTabsVim_map_keys = 0
à votre.vimrc
.J'ai également essayé de créer un fichier d'aide explicite (
:h betterTabs.txt
): il n'est pas encore terminé mais les utilisateurs devraient trouver le minimum pour utiliser le plugin.J'ai encore beaucoup de tests à faire pour être sûr que le plugin ne gâche aucun comportement natif.
Enfin, si quelqu'un veut aider, il est toujours possible de créer des problèmes sur la page github ou de créer des demandes d'extraction.
la source
Découvrez ce plugin. Il me semble que cela correspond parfaitement à vos besoins. https://github.com/szw/vim-ctrlspace
la source