Renumerar la lista de búfer

29

Después de haber estado trabajando en un proyecto durante un tiempo, empiezo a ver grandes brechas entre los números de búfer consecutivos. Esto se debe a que los buffers entre ellos fueron eliminados por varias razones. Desafortunadamente, esto puede hacer que sea incómodo saltar a un búfer en particular, o seleccionar un rango de búferes, después de escribir :ls. ¿Hay alguna forma de renumerar todos los búferes abiertos, comenzando por uno, sin abrir todos los archivos nuevamente?

puntero vacío
fuente

Respuestas:

21

No (no sin eliminar buffers).

Vim no admite la asignación manual del número de búfer ni el reordenamiento de los búferes una vez que los abre. Su filosofía es que cada búfer obtiene un identificador que se fija durante la vida útil de ese búfer (en la ayuda :ls, se observa que "cada búfer tiene un número único. Ese número no cambiará ...").

Sin embargo, podría usar la lista de argumentos. Coloque todos los búferes abiertos en la lista de argumentos, elimine todos los búferes pendientes, luego abra todo en la lista de argumentos. Los siguientes comandos lograrán eso:

  • :argdel * (eliminar la lista de argumentos existente)
  • :bufdo argadd % (para cada búfer, agregue la ruta del búfer a la lista)
  • :1,1000bd (elimine los búferes 1 a 1000; probablemente haya una mejor manera de hacerlo)
  • :argdo e (para cada argumento, edite ese argumento)

Esto te dejará con un búfer vacío adicional que vim se abre cuando eliminas todos los búferes anteriores, pero es una aproximación razonable de la funcionalidad que deseas. Puedes simplemente :bdese búfer extra.


fuente
1
Su respuesta dice que no, ¡pero parece que funciona muy bien!
aharris88
(Quise decir "no" en el sentido de que no puedes hacerlo sin volver a abrir los archivos). ¿Realmente se renumera de 1 para ti? Pensé que lo hizo cuando lo probé por primera vez, pero ahora veo que no se renumera para mí.
Sí, se renumera para mí.
aharris88
Sí, soy tonto, encontré mi error.
"cada búfer obtiene un identificador que está fijo para la vida útil de ese búfer" en realidad sesión!
14

"los números del búfer se vuelven locos" ¡ Cuéntamelo! Al final del día, soy fácil con más de 100 buffers. Pero afortunadamente, como puede ver en esta animación, tiene tabfinalización para los nombres de búfer.

Hit: b se <Tab>

Por lo tanto, aunque no pueda renumerar los búferes, aún puede saltar fácilmente.

No sé si está claro en la animación, pero la "finalización de la pestaña" es diferente a la finalización de la pestaña de la línea de comandos. Es más como un "reemplazo de pestaña de resolución de ambigüedad". Lo que significa que en la línea de comando habría tenido que escribir sctab, setabpero aquí vim hace una búsqueda 'se' y la reemplaza con la primera (y única) coincidencia. Si hubiera escrito testtab, habría coincidido con 'generate_test_data.py' y, de tabnuevo, habría coincidido con 'scripts / setup_test_data.sh' y, de tabnuevo, habría cambiado de nuevo, etc.

El punto es que puedes acostumbrarte a escribir simplemente :b <minimum amount of unambiguous characters>tabpara saltar al documento que deseas. Creo que esto es incluso mejor que recordar "Mis buffers son 1: foo 2: bar 3: etc", que es como solía hacerlo cuando era un novato.

Bruno Bronosky
fuente
7

Puedes usar vim-airline. Este complemento tiene un comportamiento que quizás solucione su problema:

Ver línea 470-479 en airline.txt

Esto no cambiará los números del búfer, pero puede seleccionar un búfer de izquierda a derecha por el número de fila en la tabulación. Esta es mi configuración para la aerolínea en .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

Mi línea de tabulación: Mi línea de tabulación

HJIahu
fuente
¡asombroso! Me encanta :)
Blasco
No es la respuesta a la pregunta, pero soluciona el problema con los números de búfer locos. Solo una recomendación para mostrar solo buffer_numbers: switch_buffers_and_tabs=1ybuffer_idx_mode=0
caligari
6

Según la documentación, los números del búfer nunca cambian

    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.

La única forma en que puedo pensar en renumerar los búferes es reiniciar vim.

aharris88
fuente
0

Antigua pregunta, pero como esto aparece en la parte superior de la búsqueda de Google, lo dejaré aquí para futuras búsquedas. Como Bruno sugirió, un buscador difuso que admita listas de búfer es el camino a seguir. Yo personalmente uso y recomiendo fzf-vim . Proporciona el comando :FZFBuffers, que se parece a esto:

ingrese la descripción de la imagen aquí

Los números de búfer se muestran a la izquierda en caso de que los necesite, pero con un buscador difuso, es posible que nunca necesite volver a usarlos. Solo recuerde parte del nombre del archivo, y generalmente está a 2-5 pulsaciones de teclas. Personalmente, he asignado este comando a una pulsación de tecla, ¡y cambiar entre buffers es casi instantáneo para mí!

verboze
fuente