Vim - elenco dinamico di buffer aperti in una finestra


23

Ho studiato alcuni modi per mantenere un elenco di buffer aperti in Vim, e alcuni di loro sono molto buoni, ma nessuno di loro sembra comportarsi come vorrei. È molto probabile che non esista nulla di simile a ciò che voglio, e non può far male chiedere.

Sto usando NERDTree in GVim e mi piace l'idea di mettere le informazioni in una sottile finestra a sinistra. Ho messo insieme un diagramma utile per come vorrei che il mio ambiente fosse:

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

Quindi la mia domanda è: esiste un modo vim nativo o abilitato per plugin per mantenere un elenco di buffer attualmente aperti e selezionare / modificare / chiudere da quell'elenco, all'interno di una finestra simile a NERDTree?

Capisco che questo approccio potrebbe essere incongruo con il modo in cui Vim fa le cose , e se senti che mi manca qualcosa su come gestire più file in una sessione Vim, lascia un commento con suggerimenti!


Sto anche cercando di avere un elenco di buffer sotto (o sopra) il riquadro nerdtree. Cercherò di ricordare di aggiornare questo post se trovo una buona soluzione (ma grazie per averlo chiesto comunque)
Eric Drechsel,

Risposte:


7

Hai cercato nel repository di plugin di vim.org? Ci sono dozzine di plugin di commutazione del buffer tra cui scegliere come BufferGator o SelectBuf . In alternativa, la maggior parte di essi è compilata in una bella lista sul wiki di Vim .


Come hai accennato nell'ultima parte della tua domanda quel tipo di sistema non è per tutti i gusti.

Io Odio avere tutti i menu, tasti quelle e gli elenchi di questa o quella aperta a tutti i tempi: un elenco di buffer aperti è utile solo quando è effettivamente necessario per passare a un altro buffer, lasciando una tale lista aperta sembra uno spreco di spazio per me . Lo stesso può essere applicato anche alle statusline sovralimentate.

Uso lo stesso plug-in per passare rapidamente da un buffer all'altro e per esplorare rapidamente il filesystem attorno al file che sto attualmente modificando. Richiamato con ,f(file) o ,b(buffer), la finestra scompare quando ho finito. Perfezionare. Ci sono altri plugin simili , provali tutti se ti piace quell'idea.

MODIFICARE

Mi sento in dovere di aggiungere una GIF animata di CtrlP in azione, cambiando buffer:

Cambio buffer con CtrlP

EndEdit

Il nativo :sb <Tab>è anche abbastanza pulito ma meno sexy. Non supporta la corrispondenza fuzzy ma ha alcuni grandi vantaggi: è integrato e funziona come :e <Tab>, :vs <Tab>e così via.


Grazie per i vostri suggerimenti. Sembra che BufferGator e SelectBuf siano entrambi vicini alla funzionalità che sto cercando, anche se potrebbero aver bisogno di qualche modifica per far funzionare le cose. Apprezzo decisamente la preoccupazione di sprecare spazio, ma con il mio caso d'uso corrente ho un'istanza GVim aperta per ore alla volta con molti file aperti contemporaneamente, saltando tra di loro secondo necessità. Per queste circostanze, un elenco di buffer persistente è estremamente utile. Tuttavia, mi prenderò del tempo per conoscere gli approcci Vim più tipici alla gestione dei buffer.
Asfallows

Immagino che lavori su un grande monitor. Qualunque sistema scegliate, dovreste comunque 1. passare all'elenco buffer, 2. selezionare un buffer, 3. premere un tasto per passare a esso se l'elenco buffer è già visibile o meno. L'uso di uno switcher buffer "su richiesta" è quindi altrettanto efficace quanto mantenere aperta una lista buffer e consente di risparmiare spazio.
Romainl

Apprezzo sicuramente questo ragionamento, motivo per cui non sono troppo preoccupato della possibilità che l'esatta configurazione che sto descrivendo qui potrebbe non essere possibile. L'unico vantaggio principale di un elenco di buffer persistente è che bastano 0 sequenze di tasti per verificare quali buffer sono aperti, un'informazione che ritengo preziosa e che mi trovo molto male a conservare nella memoria a breve termine. (E sì, lavoro su un monitor abbastanza grande.)
Asfallows

@romainl, quale comando vimrc hai usato per mappare ,bi buffer di ricerca con ctrlp?
snowbound

1
@snowbound, FWIW Ho smesso di usare CtrlP o altri plugin simili qualche tempo fa. Comunque, il mio comando era nnoremap ,b :CtrlPBuffer<CR>.
Romainl,

5

Consiglio vivamente MiniBufExplorer . Vedi anche un'alternativa a minibufexplorer?

Immagine dello schermo


Grazie per la risposta: ho trovato MiniBufExplorer e sembra che sia estremamente bravo in quello che fa, ma non soddisfa le condizioni che ho descritto per come mi piacerebbe gestire i buffer. Se si scopre che non c'è un buon modo per fare quello che sto cercando di fare, o decido che non è il modo giusto per farlo, MBE è piuttosto in cima alla mia lista per le cose da provare dopo.
Asfallows

1
L'unica condizione che non viene soddisfatta è che l'elenco si trova sulla sinistra. Sono d'accordo, MiniBufExplorerè in alto (dove non spreca tanto spazio quanto a sinistra). O forse ho frainteso le tue esigenze.
Marco,

Con la mia configurazione attuale, avere l'elenco dei buffer sulla sinistra come rappresentato è in realtà un miglioramento dell'utilizzo dello spazio, perché NERDTree è sempre aperto ma non sempre ci mantiene completamente verticale. Condividere quello spazio con un elenco di buffer sarebbe bello. Vale la pena notare che è così che uso GVim e non vorrei una colonna sinistra persistente se avessi usato Vim nella console. La maggior parte dell'utilizzo di Vim da parte della mia console è "apri file, modifica rapida, chiudi vim"
asfallows,

1

C'è un modo per farlo esattamente usando il plugin winmanager . In questo screenshot combino entrambi i plug-in NERDTree e MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, ultimo commit atm 349a9fbb) sulla stessa divisione verticale e lo commuto con F4. In teoria questa soluzione dovrebbe funzionare con qualsiasi altra combinazione di plugin.

Esempio del mio .vimrc

"{{{Configurazione MiniBufExpl
let g: miniBufExplVSplit = 20 "aperto in verticale
let g: miniBufExplSplitToEdge = 0 "open rispetto alla finestra precedente (NERDTree)
"}}} Config MiniBufExpl

"{{{configurazione winmanager
"registra i plugin
let g: NERDTree_title = 'Albero NERD'
let g: MiniBufExpl_title = 'MiniBufExpl'

"imposta il layout
let g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"gestore per NERDTree
funzione! NERDTree_Start ()
    exec 'NERDTree'
endfunction

"gestore per MiniBufExpl
funzione! MiniBufExpl_Start ()
    exec 'MBEOpen'
endfunction

"mapping per attivare / disattivare la divisione in F4
nmap <F4>: WMToggle
"}}} configurazione winmanager

I problemi:

  • NERDTree non usa il buffer creato da winmanager ma si apre nel suo ...
  • ... pertanto il buffer di winmanager rimane inutilizzato
  • MiniBufExpl non si aggiorna correttamente quando salta tra i buffer

Il comportamento che ho raggiunto è tutt'altro che perfetto, ma è un buon inizio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.