buffers – ¿Cómo vincular un conjunto de búferes a una pestaña?

Pregunta:

Cuando necesito trabajar en diferentes proyectos al mismo tiempo, tengo el siguiente flujo de trabajo:

  • Creo una pestaña para cada proyecto.
  • En cada pestaña abro los archivos que quiero editar, lo que crea varios búferes.
  • Opcionalmente, si necesito ver dos (o más) archivos al mismo tiempo, creo ventanas divididas, por lo que tengo una pestaña que contiene diferentes ventanas que muestran un búfer.

Para navegar entre mis búferes, realmente no uso :ls y :b [name or number of buffer] lugar, creé algunas asignaciones convenientes que me permiten cambiar entre los búferes con :bnext y :bprevious

Esta forma de trabajar es bastante buena pero algo me molesta: los búferes se comparten entre las pestañas.

Si abierta file1 y file2 en tab1 y file3 en tab2 , si en tab1 utilizo varias veces :bnext veré file3 en esta pestaña, que yo no quiera. El flujo de trabajo que me gustaría obtener es el siguiente :

  • Inicie vim (tengo una primera pestaña con un búfer): $ vim foo
  • Agregue un búfer a esta pestaña :e bar
  • Abra una nueva pestaña y cambie a ella :tabnew
  • Abra un nuevo búfer en esta pestaña :e baz
  • Si me quedo en este búfer y hago :bnext o :bprevious , me quedaré en el búfer baz (ya que es el único en esta pestaña)
  • Si voy a la pestaña anterior :tabprevious y ejecuto varias veces :bnext , :bnext solo entre foo y bar buffers, pero no veré baz

Entonces aquí viene mi pregunta: ¿Es posible vincular un conjunto de búferes a una pestaña y hacer que vim no permita el acceso a algunos búferes desde otra pestaña que no sea la que deben estar?

Nota: Soy consciente de que usar :b [myBuffer] sería una forma de mantener un búfer en una pestaña, pero cuando tengo 3 o 4 archivos para editar, siento que soy más rápido usando mis asignaciones que escribiendo el nombre del búfer. (incluso si puedo escribir solo algunos caracteres para que coincidan con el nombre del búfer) .

Respuesta:

Mhh, no encontré ningún complemento, pero puedes escribirlo tú mismo. Necesita aprender vimscript para esto. Acabo de implementar la funcionalidad de que puede cambiar entre búferes en una pestaña (aún sin eliminar). Puede copiar esto en su vimrc:

if !exists("g:WindowBufManager") 
  let g:WindowBufManager= {}
endif

function! StoreBufTab()
  if !has_key(g:WindowBufManager, tabpagenr())
    let  g:WindowBufManager[tabpagenr()] = []
  endif

  " add the new buffer to our explorer
  if index(g:WindowBufManager[tabpagenr()], bufname("%")) == -1 && bufname("%") != ""
    call add (g:WindowBufManager[tabpagenr()],bufname("%"))
  endif
endfunction

function! WindowBufManagerNext() 
  " find the next index of the buffer
  let s = index(g:WindowBufManager[tabpagenr()], bufname("%"))
  if (s!= -1)
    let s = (s +1) % len(g:WindowBufManager[tabpagenr()])
    execute 'b ' . g:WindowBufManager[tabpagenr()][s]
  endif
endfunction

augroup WindowBufManagerGroup
  autocmd! BufEnter * call StoreBufTab()
augroup END

Cierre su vimrc y ábralo de nuevo. Para encontrar el siguiente búfer solo usa

:call WindowBufManagerNext()

o defina su propio comando o mapeo. Esto funcionará siempre que no cierre ni elimine una pestaña o búfer. Tampoco funcionará para varios búferes. Se necesitaría un poco más de trabajo para agregar esas características, pero definitivamente es factible.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım