Rinumerazione dell'elenco buffer


29

Dopo aver lavorato su un progetto per un po ', comincio a vedere grandi lacune tra numeri di buffer consecutivi. Questo perché i buffer tra di loro sono stati spazzati via per vari motivi. Sfortunatamente, questo può rendere imbarazzante passare a un determinato buffer o selezionare un intervallo di buffer, dopo aver digitato :ls. C'è un modo per rinumerare tutti i buffer aperti, a partire da uno, senza riaprire tutti i file?

Risposte:


21

No (non senza eliminare i buffer).

Vim non supporta manualmente l'assegnazione dei numeri di buffer o il riordino dei buffer una volta aperti. La sua filosofia è che ogni buffer ottiene un identificatore che è stato fissato per la durata di quel buffer (nella guida per :ls, nota che "ogni buffer ha un numero univoco. Quel numero non cambierà ...").

Tuttavia, è possibile utilizzare l'elenco degli argomenti. Inserisci tutti i buffer aperti nell'elenco degli argomenti, elimina tutti i buffer in sospeso, quindi apri tutto nell'elenco degli argomenti. I seguenti comandi eseguiranno ciò:

  • :argdel * (elimina l'elenco degli argomenti esistenti)
  • :bufdo argadd % (per ciascun buffer, aggiungere il percorso del buffer all'elenco)
  • :1,1000bd (elimina i buffer da 1 a 1000; probabilmente c'è un modo migliore per farlo)
  • :argdo e (per ogni argomento, modifica quell'argomento)

Questo ti lascerà con un buffer vuoto aggiuntivo che vim si apre quando elimini tutti i buffer precedenti, ma è un'approssimazione ragionevolmente della funzionalità che desideri. Puoi solo :bdquel buffer extra.


1
La tua risposta dice di no, ma sembra che funzioni alla grande!
aharris88,

(Volevo dire "no", nel senso che non puoi farlo senza riaprire i file). Tuttavia, rinumera effettivamente da 1 per te? Pensavo lo facesse la prima volta che l'ho provato, ma ora lo vedo non rinumerare per me?

Sì, rinumera per me.
aharris88,

Sì, sono solo stupido, ho trovato il mio errore.

"ogni buffer ottiene un identificatore che è stato corretto per la durata di quel buffer" in realtà sessione!

14

"i numeri del buffer impazziscono" Parlamene! Alla fine della giornata sono facile oltre 100 buffer. Ma per fortuna, come puoi vedere in questa animazione, hai il tabcompletamento per i nomi dei buffer.

Hit: b se <Tab>

Quindi, anche se non puoi rinumerare i buffer, puoi comunque saltare facilmente.

Non so se sia chiaro dall'animazione, ma il "completamento della scheda" è diverso dal completamento della scheda della riga di comando. È più simile a un "sostituto della scheda per la risoluzione delle ambiguità". Il che significa che nella riga di comando che avrei dovuto digitare sctabpoi setabma qui Vim fa una ricerca di 'se' e lo sostituisce con la prima partita (e unico). Se avessi digitato testtab, sarebbe stato associato a "generate_test_data.py" e poi di tabnuovo corrisponderebbe a "script / setup_test_data.sh" e quindi tabsarebbe tornato indietro, ecc.

Il punto è che puoi prendere l'abitudine di scrivere semplicemente :b <minimum amount of unambiguous characters>tabper saltare al documento che desideri. Penso che sia ancora meglio che ricordare "I miei buffer sono 1: pippo 2: barra 3: ecc", che è il modo in cui lo facevo quando ero un principiante.


7

Puoi usare vim-compagnia aerea. Questo plugin ha un comportamento che forse risolve il problema:

Vedi riga 470-479 in airline.txt

Ciò non modificherà i numeri del buffer, ma è possibile selezionare un buffer da sinistra a destra in base al numero di riga nella scheda. Questa è la mia impostazione per la compagnia aerea in .vimrc:

"set airline 
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2

let mapleader=","

let g:airline#extensions#tabline#buffer_idx_mode = 1

nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

La mia scheda: La mia scheda


Stupefacente! Lo adoro :)
Blasco il

Non è la risposta alla domanda, ma risolve il problema con i numeri di buffer folli. Solo una raccomandazione per mostrare solo buffer_numbers: switch_buffers_and_tabs=1ebuffer_idx_mode=0
caligari il

6

Secondo la documentazione, i numeri di buffer non cambiano mai

    Each buffer has a unique number.  That number will not change,
    so you can always go to a specific buffer with ":buffer N" or
    "N CTRL-^", where N is the buffer number.

L'unico modo in cui posso pensare di rinumerare i buffer è riavviare vim.


0

Vecchia domanda, ma dal momento che questo appare in alto nella ricerca di Google, lascerò questo qui per ricerche future. Come ha suggerito Bruno, una ricerca fuzzy che supporta gli elenchi di buffer è la strada da percorrere. Personalmente uso e raccomando fzf-vim . Fornisce il comando :FZFBuffers, che assomiglia a questo:

inserisci qui la descrizione dell'immagine

I numeri di buffer vengono visualizzati a sinistra nel caso in cui siano necessari, ma con un fuzzy finder, potrebbe non essere necessario riutilizzarli. Ricorda solo una parte del nome del file, e di solito è 2-5 sequenze di tasti. Personalmente, ho associato questo comando a una sequenza di tasti e il passaggio da un buffer all'altro è quasi istantaneo per me!

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.