Vim - liste dynamique des tampons ouverts dans une fenêtre

23

J'ai étudié plusieurs façons de maintenir une liste de tampons ouverts dans Vim, et certains d'entre eux sont très bons, mais aucun ne semble se comporter comme je le voudrais. Il est très possible que rien de ce que je veux n'existe, et ça ne fait pas de mal de demander.

J'utilise NERDTree dans GVim, et j'aime l'idée de mettre les informations dans une mince fenêtre de gauche. J'ai mis en place un diagramme pratique pour savoir à quoi je voudrais que mon environnement ressemble:

|--------|---------------------------------------|
|        |                                       | 
|        |                                       | 
|NERDTree|           Windows                     | 
|        |                                       | 
|        |                                       | 
|        |                                       | 
|--------|                                       |
|        |                                       | 
|        |                                       | 
|  List  |                                       | 
|   of   |                                       | 
|  Open  |                                       | 
| Buffers|                                       | 
|        |                                       | 
|        |                                       | 
|--------|---------------------------------------|

Ma question est donc la suivante: existe-t-il un moyen natif ou compatible avec les plugins pour gérer une liste des tampons actuellement ouverts et sélectionner / modifier / fermer à partir de cette liste, dans une fenêtre similaire à NERDTree?

Je comprends que cette approche peut être incongrue avec la façon de faire de Vim , et si vous sentez que je manque quelque chose sur la façon de gérer plusieurs fichiers dans une session Vim, veuillez laisser un commentaire avec des suggestions!

jachères
la source
Je cherche également à avoir une liste de tampons en dessous (ou au-dessus) du volet nerdtree. J'essaierai de me souvenir de mettre à jour ce billet si je trouve une bonne solution (mais merci d'avoir demandé quand même)
Eric Drechsel

Réponses:

7

Avez-vous recherché le référentiel de plugins de vim.org? Il existe des dizaines de plug-ins de commutation de tampons parmi lesquels vous pouvez choisir, comme BufferGator ou SelectBuf . Alternativement, la plupart d'entre eux sont compilés dans une belle liste sur le wiki Vim .


Comme vous l'avez mentionné dans la dernière partie de votre question, ce type de système n'est pas du goût de tout le monde.

Je déteste avoir tous ces menus, boutons et listes de ceci ou cela ouverts à tout moment: une liste de tampons ouverts n'est utile que lorsque vous avez réellement besoin de passer à un autre tampon, laisser une telle liste ouverte me semble être une perte d'espace . La même chose peut également être appliquée aux lignes d'état suralimentées.

J'utilise le même plugin pour basculer rapidement entre les tampons et explorer rapidement le système de fichiers autour du fichier que j'édite actuellement. Appelée avec ,f(fichiers) ou ,b(tampons), la fenêtre disparaît lorsque j'ai terminé. Parfait. Il existe d' autres plugins similaires , essayez-les tous si vous aimez cette idée.

MODIFIER

Je me sens obligé d'ajouter un GIF animé de CtrlP en action, en changeant de tampon:

Changement de tampons avec CtrlP

ENDEDIT

Le natif :sb <Tab>est également assez soigné mais moins sexy. Il ne prend pas en charge la correspondance floue, mais il présente de gros avantages: il est intégré et fonctionne comme :e <Tab>, :vs <Tab>etc.

romainl
la source
Merci pour vos suggestions. Il semble que BufferGator et SelectBuf soient tous deux au moins proches des fonctionnalités que je recherche, bien qu'ils puissent avoir besoin de quelques ajustements pour faire avancer les choses. J'apprécie vraiment le souci de gaspiller de l'espace, mais avec mon cas d'utilisation actuel, j'ai une instance GVim ouverte pendant des heures à la fois avec de nombreux fichiers ouverts à la fois, en sautant entre eux si nécessaire. Dans ces circonstances, une liste de tampons persistants est extrêmement utile. Je vais cependant prendre un peu de temps pour en savoir plus sur les approches Vim les plus typiques de la gestion des tampons.
jachères
J'imagine que vous travaillez sur un grand moniteur. Quel que soit le système que vous choisissez, vous devrez toujours 1. basculer vers la liste des tampons, 2. sélectionner un tampon, 3. appuyer sur une touche pour y accéder, que la liste des tampons soit déjà visible ou non. L'utilisation d'un sélecteur de tampon "à la demande" est donc tout aussi efficace que de maintenir une liste de tampons ouverte et d'économiser de l'espace.
romainl
J'apprécie vraiment ce raisonnement, c'est pourquoi je ne crains pas trop la possibilité que la configuration exacte que je décris ici ne soit pas possible. Le seul avantage majeur d'une liste de tampons persistants est qu'il faut 0 frappe pour vérifier quels tampons sont ouverts, une information que je trouve précieuse et qui me trouve également très mal à garder en mémoire à court terme. (Et oui, je travaille sur un assez gros moniteur.)
asfallows
@romainl, quelle commande vimrc avez-vous utilisée pour mapper ,bpour rechercher des tampons avec ctrlp?
enneigé
1
@snowbound, FWIW J'ai cessé d'utiliser CtrlP ou tout autre plugin similaire il y a quelque temps. Quoi qu'il en soit, ma commande était nnoremap ,b :CtrlPBuffer<CR>.
romainl
5

Je peux fortement recommander le MiniBufExplorer . Voir aussi une alternative à minibufexplorer?

Capture d'écran

Marco
la source
Merci pour la réponse - j'avais trouvé MiniBufExplorer, et il semble qu'il soit extrêmement bon dans ce qu'il fait, mais il ne remplit pas les conditions que j'ai décrites pour la façon dont je voudrais gérer les tampons. S'il s'avère qu'il n'y a pas de bonne façon de faire ce que j'essaie de faire, ou que je décide que ce n'est pas la bonne façon de le faire, MBE est assez haut sur ma liste pour les choses à essayer ensuite.
jachères
1
La seule condition qui n'est pas remplie est que la liste se trouve à gauche. Je suis d'accord, MiniBufExplorerest en haut (où il ne perd pas autant d'espace que sur la gauche). Ou peut-être que j'ai mal compris vos exigences.
Marco
Avec ma configuration actuelle, avoir la liste des tampons à gauche comme illustré est en fait une amélioration de l'utilisation de l'espace, car NERDTree est ouvert à tout moment mais ne nous utilise pas toujours complètement verticalement. Partager cet espace avec une liste de tampons serait bien. Il convient de noter que c'est ainsi que j'utilise GVim, et je ne voudrais pas d'une colonne gauche persistante si j'utilisais Vim dans la console. La plupart de mon utilisation de Vim sur console est "ouvrir un fichier, faire une modification rapide, fermer vim"
asfallows
1

Il existe un moyen de faire exactement cela en utilisant le plugin winmanager . Dans cette capture d'écran, je combine les plug-ins NERDTree et MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, le dernier commit atm 349a9fbb) sur le même split vertical et le bascule avec F4. En théorie, cette solution devrait fonctionner pour toute autre combinaison de plugins.

Exemple de mon .vimrc

"{{{Configuration MiniBufExpl
Soit g: miniBufExplVSplit = 20 "ouvert en vertical
laissez g: miniBufExplSplitToEdge = 0 "ouvert par rapport à la fenêtre précédente (NERDTree)
"}}} Configuration MiniBufExpl

"{{{winmanager config
"enregistrer les plugins
soit g: NERDTree_title = 'Arbre NERD'
soit g: MiniBufExpl_title = 'MiniBufExpl'

"définir la mise en page
soit g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"gestionnaire pour NERDTree
une fonction! NERDTree_Start ()
    exec 'NERDTree'
fonction d'extrémité

"gestionnaire pour MiniBufExpl
une fonction! MiniBufExpl_Start ()
    exec 'MBEOpen'
fonction d'extrémité

"mappage pour basculer la division en F4
nmap <F4>: WMToggle
"}}} config winmanager

Problèmes:

  • NERDTree n'utilise pas le tampon créé par winmanager mais s'ouvre de lui-même ...
  • ... donc le tampon winmanager reste inutilisé
  • MiniBufExpl ne se met pas à jour correctement lors du saut entre les tampons

Le comportement que j'ai réalisé est loin d'être parfait mais c'est un bon début.

svlasov
la source