Abra un búfer como una división vertical en VIM

Si está editando un archivo en VIM y luego necesita abrir un búfer existente (por ejemplo, de su lista de búfer: :buffers) ¿Cómo se puede abrir en una división vertical?

Sé que ya puedes abrirlo con un normal dividir como:

:sbuffer N

donde N es el número de búfer que desea, sin embargo, lo anterior abre que N amortiguar horizontalmente, no verticalmente.

También soy consciente de que puede cambiar la ubicación de la ventana después de abrirla y tener una división vertical así:

Ctrl-W H
Ctrl-W L

Lo que dividirá verticalmente la ventana hacia la derecha o hacia la izquierda.

Me parece que si hay un sbuffer debe haber una vsbuffer pero eso no existe (no que yo sepa)

Además, tenga en cuenta que no estoy buscando un complemento para resolver esta pregunta. Conozco una gran cantidad de complementos que te permitirán hacer esto.

Estoy seguro de que podría estar perdiendo algo que ya está allí.

EDITAR: Con el mejor espíritu de colaboración, he creado una función simple con un mapeo si alguien más se encuentra con este problema y no desea instalar un complemento:

Función:

" Vertical Split Buffer Function
function VerticalSplitBuffer(buffer)
    execute "vert belowright sb" a:buffer 
endfunction

Cartografía:

" Vertical Split Buffer Mapping
command -nargs=1 Vbuffer call VerticalSplitBuffer(<f-args>)

Esto logra la tarea de abrir un búfer en una división derecha, por lo que para el búfer 1, lo llamaría así:

:Vbuffer 1

preguntado el 31 de diciembre de 10 a las 14:12

6 Respuestas

Tratar:

:vert sb N

que abrirá una división vertical izquierda (por defecto, a menos que haya modificado algunas opciones).

Para abrir una división a la derecha, por otro lado:

:vert belowright sb N

Respondido el 31 de diciembre de 10 a las 18:12

¿No parece bastante extraño no tener vsbuffer N ? Molesto. Tu respuesta lo clava. ¡Gracias! - alfredodeza

Siempre siento que debería haber un vsbuffer también, y también a menudo olvido Ctrl-w T para abrir un búfer en una nueva pestaña (o quiero hacerlo con un búfer que no está activo o visible actualmente). Entonces, como alternativa, puede usar una barra para cualquiera de estos casos, que encuentro más fácil de recordar que la respuesta válida de @ Jeet: :vsp | b N y :tabe | b N. - ches

Me gusta que este comando permite N para ser autocompletado (lo que no parece posible con el comando en la otra respuesta). Ambos votaron a favor, sin embargo. - David Rivers

:vsp | b1

1 es un número de búfer. Usar buffers para enumerar todos los búferes.

Aquí hay información adicional sobre divisiones, si está interesado. Enlace

Respondido 18 Feb 14, 17:02

También podrías usar :ls, que parece ser un atajo para :buffers. - dskecse

tu tambien puedes hacer :vsp | b <buffer name> - kenny bambridge

@KennyBambridge aún mejor: solo tiene que escribir parte del nombre del búfer (distingue entre mayúsculas y minúsculas) y luego presionar la pestaña para recorrer la lista filtrada - icc97

Tenga en cuenta que aunque el Enlace proporcionada por @Jerinaw es buena, la terminología en esa página es seriamente engañosa, por lo que deberá leer los comentarios en esa página también para aclarar. - NeilG

Puede aliviar su dolor agregando lo siguiente a su .vimrc

cabbrev vb vert sb

Ahora puedes usarlo de la siguiente manera.

:vb <buffer>

Respondido el 27 de junio de 19 a las 22:06

esto es bueno, la versión extendida también ofrece autocompletado de nombres de búfer Yo tampoco conocía a Cabbrev, gracias. - kidpixo

La respuesta al OP que encontré más útil está incrustada profundamente en la respuesta de Jerinaw y un comentario al respecto, y en la respuesta de Wolfson. Pero sentí que podría sacarse más a relucir. (Tampoco se han votado los más votados, a pesar de que me parecieron los que respondieron mejor a OP).

La respuesta a la pregunta, ¿por qué no hay :vsbuffer, es que hay. Se llama :vsplit y hace el truco como

:vsplit NameOfBuffer

OR

:vsplit #NumberOfBuffer.

(En este segundo uso, tenga cuidado de tener en cuenta que el hash # es significativo. Si desea llegar al búfer número 3, debe decir :vsplit #3, No sólo :vsplit 3 que en su lugar creará un nuevo archivo llamado "3".)

Nuevamente, esta respuesta está incrustada arriba, simplemente no se muestra lo suficientemente clara para el escáner rápido, IMV.

Respondido el 06 de diciembre de 20 a las 13:12

No parece funcionar. Crea un nuevo archivo con el número / nombre. - sutil buscador

Cuando use NumberOfBuffer, diga que es 3, ¿puso :vsplit #3? Sin el hachís :vsplit 3 de hecho hará un nuevo archivo con nombre 3? (Es decir, se requiere el hash.) - danny quah

Sí, tienes razón. No puedo eliminar el voto negativo o positivo. - sutil buscador

@subtleseeker - eso es una lástima. Avíseme si encuentra una manera de eliminar el voto negativo. - danny quah

@subtleseeker: acabo de editar la respuesta para enfatizar el punto que acabamos de discutir. Avísame si ahora puedes eliminar tu voto negativo. - danny quah

También puedes combinar :ls que enumera sus búferes actuales y los comandos para abrir el búfer deseado en cualquier

  1. ventana actual: :b <N/bufname>
  2. división vertical: :vsp | b <N/bufname>
  3. división horizontal: :sp | b <N/bufname>

Para esto, he agregado las siguientes asignaciones a mi ~/.vimrc (el orden de las asignaciones representa la lista anterior de ventanas deseadas)

 nnoremap <leader>b :ls<cr>:b<space>
 nnoremap <leader>v :ls<cr>:vsp<space>\|<space>b<space>
 nnoremap <leader>s :ls<cr>:sp<space>\|<space>b<space>

Basado en esto, puede ver la lista de búfer tan pronto como presione

  1. <leader>b
  2. <leader>v
  3. <leader>s

y luego ingrese el número de búfer deseado N. Esto luego abrirá el búfer en la ventana deseada. Por supuesto, aún puede usar una parte del nombre del búfer bufname también.

Mapeé el <leader> a , basados en

let mapleader = ","

Para algunas personas (por ejemplo, yo), esto podría incluso reemplazar complementos como MiniBufExpl y así ahorrar espacio en la pantalla.

Respondido 21 Abr '20, 12:04

puedes usar Neovim, así:

autocmd FileType python nmap <F5> :rightbelow vertical split <bar> :term python %<cr>

Respondido 12 Feb 16, 11:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.