Usando las pestañas de Vim como búferes

He analizado la capacidad de usar pestañas en Vim (con :tabe, :tabnew, etc.) como reemplazo de mi práctica actual de tener muchos archivos abiertos en la misma ventana en búferes ocultos.

Me gustaría que cada archivo distinto que tengo abierto esté siempre en su propia pestaña. Sin embargo, hay algunas cosas que se interponen en este camino. ¿Cómo soluciono estos?

  1. Cuando comandos como gf y ^] saltar a una ubicación en otro archivo, el archivo se abre en un nuevo búfer en la pestaña actual. ¿Hay alguna manera de que todos estos tipos de comandos abran el archivo en una nueva pestaña, o cambien a la pestaña existente con el archivo si ya está abierto?

  2. Al cambiar de búfer, puedo usar :b <part of filename><tab> y completará los nombres de los archivos en los búferes existentes. <part of filename> incluso puede ser el medio de un nombre de archivo en lugar del principio. ¿Existe un equivalente para cambiar de pestaña?

preguntado el 19 de septiembre de 08 a las 12:09

10 Respuestas

Pará pará pará.

No es así como están diseñadas para usarse las pestañas de Vim. De hecho, están mal nombrados. Un mejor nombre sería "ventana gráfica" o "diseño", porque eso es lo que es una pestaña: es un diseño diferente de las ventanas de todos los de sus búferes existentes.

Tratar de vencer a Vim en 1 pestaña == 1 búfer es un ejercicio inútil. Vim no lo sabe ni le importa y no lo respetará en todos los comandos, en particular, cualquier cosa que use el búfer de corrección rápida (:make, :grepy :helpgrep son los que me vienen a la mente) ignorarán felizmente las pestañas y no hay nada que puedas hacer para detener eso.

En lugar:

  • :set hidden
    Si aún no tiene este conjunto, hágalo. Hace que vim funcione como cualquier otro editor de archivos múltiples del planeta. Puede tener búferes editados que no son visibles en una ventana en algún lugar.
  • Utiliza :bn, :bp, :b #, :b namey ctrl-6 para cambiar entre búferes. Me gusta ctrl-6 yo mismo (solo cambia al búfer utilizado anteriormente, o #ctrl-6 cambia al número de búfer #).
  • Utiliza :ls para enumerar búferes o un complemento como MiniBufExpl or BufExplorer.

Respondido 03 Jul 12, 18:07

Para mí, esto es un error, no un "error de usuario". Buscar en la web 'pestañas vim' indica que casi todos los demás no están de acuerdo con usted o desconocen la forma "real" de usar las pestañas Vim. Además, si las pestañas son realmente vistas de "diseño", ¿por qué los títulos de pestaña predeterminados son el nombre del archivo actual? Si quisiera varias vistas del mismo archivo, entonces todos los títulos de mis pestañas tendrían el mismo nombre (¿no es muy útil?). Entonces, de cualquier manera que lo mire, la implementación de la pestaña predeterminada en Vim es defectuosa. - cmcginty

¿Qué más vas a mostrar en el título de la pestaña? Muestra el nombre del búfer actual (no el "nombre del archivo"). Puede cambiar lo que se muestra en el título de la pestaña de todos modos. - aehlke

@Casey: FWIW, cuando supe por primera vez sobre las pestañas de Vim y tuve que pensar en ellas y para qué eran, pensé exactamente en la definición dada por Zathrus. (Soy un novato de Vim por cierto). Así que no, no estoy de acuerdo en que sea una característica tan rota o poco intuitiva ... y menos estoy de acuerdo en que "casi todos" no están de acuerdo (y creo que al menos una o dos referencias podrían darle más peso a la afirmación). Funciona asombrosamente bien para tener múltiples diseños de pantalla simultáneos. - ATA

Este comentario es incorrecto, no estoy seguro de por qué se votó a favor o se aceptó. Robince a continuación tiene la respuesta correcta: tab sball y: switchbuf son lo que estás buscando. - Roel

+1 para "Detener, detener, detener". Vim es tanto una mentalidad como una herramienta. Es importante enseñar la mentalidad a los nuevos usuarios, para que puedan utilizar la herramienta en todo su potencial. - Encuesta Cody

Un poco tarde para la fiesta aquí, pero me sorprendió no ver lo siguiente en esta lista:

:tab sball - esto abre una nueva pestaña para cada búfer abierto.

:help switchbuf - esto controla el comportamiento de cambio de búfer, intente :set switchbuf=usetab,newtab. Esto debería significar cambiar a la pestaña existente si el búfer está abierto, o crear una nueva si no lo está.

respondido 27 nov., 16:00

+1 para switchbuf - set switchbuf=useopen es genial para evitar el comportamiento molesto de :make, :vimgrep y comandos similares que cambian los búferes en el diseño de la ventana incluso cuando el búfer ya se muestra. - mMontu

¿Por qué no me queda bien? después de la serie :se switchbuf=usetab,newtab, cuando un uso bn para cambiar de búfer, ¿todavía abre el archivo de búfer en la pestaña actual en lugar de cambiar a la pestaña existente? ¿Hay algo mal? - zhiyelee

Empuje :help window explica bastante bien la confusión "pestañas frente a búferes".

Un búfer es el texto en memoria de un archivo.
Una ventana es una ventana gráfica en un búfer.
Una página de pestañas es una colección de ventanas.

La apertura de varios archivos se logra en vim con tampones. En otros editores (por ejemplo, notepad ++) esto se hace con pestañas, por lo que la pestaña de nombre en vim puede ser engañosa.

Windows tienen el propósito de dividir el espacio de trabajo y mostrar varios archivos (búferes) juntos en una pantalla. En otros editores, esto se puede lograr abriendo múltiples ventanas GUI y reorganizándolas en el escritorio.

Finalmente, en esta analogía, vim's páginas de pestañas correspondería a varios escritorios, es decir, diferentes reordenamientos de ventanas.

Como vim help: tab-page explica que se puede usar una pestaña cuando se desea editar temporalmente un archivo, pero no se desea cambiar nada en el diseño actual de ventanas y búferes. En tal caso, se puede utilizar otra pestaña con el único fin de editar ese archivo en particular.

Por supuesto, debe recordar que mostrar el mismo archivo en muchas pestañas o ventanas resultaría en mostrar la misma copia de trabajo (búfer).

respondido 30 mar '17, 17:03

En realidad, esta es una respuesta increíble, pero tomó un par de lecturas para que tuviera sentido. buffers = tabs, windows = gui windows, tab pages = desktops tienen el mejor sentido hasta ahora para alguien que no está familiarizado con los conceptos. icc97

Tiendo a pensar en ellos como si mirasen a través de una ventana a una habitación. buffer = objeto, window = cristaly tab = ventana. Puedo moverme por la habitación y mirar desde diferentes ventanas (tabs). Diferente ventanas puede tener diferente número, disposición y tamaño de paneles. Lo mismo objeto se puede ver simultáneamente desde diferentes paneles En diferente ventanas. - go2null

Si está familiarizado con los espacios de trabajo de Linux y el paradigma de Windows, verá la herencia de vim uso. Al principio solo había un ventana. Los administradores de ventanas le permitieron dividir las ventanas en paneles (WM en mosaico) o en paneles superpuestos (WM flotante), pero todavía se referían a cada panel como una ventana. Ahora agregue el concepto de un espacio de trabajo donde el panel se puede mostrar en varios espacios de trabajo. Entonces, en este paradigma, buffer = applicación, window = ventana y tab = espacio de trabajo. - go2null

Otra forma de pensar en ello, mientras que otras (como NotePad ++) todavía están usando múltiples búferes, las pestañas son solo formas de presentárselo al usuario. Lo que realmente es la diferencia es que Vim's :ls la salida no siempre es visible. (Ver BufExplorer y MiniBufExpl mencionados anteriormente) - Dan

Al contrario de algunas de las otras respuestas aquí, digo que puedes usar las pestañas como quieras. vim fue diseñado para ser versátil y personalizable, en lugar de forzarlo a trabajar de acuerdo con parámetros predefinidos. Todos sabemos que a los programadores nos encanta imponer nuestra "ética" a todos los demás, por lo que este logro es sin duda una característica principal.

<C-w>gf es la pestaña equivalente a búferes gf mando. <C-PageUp> y <C-PageDown> cambiará entre pestañas. (En Byobu, estos dos comandos nunca funcionan para mí, pero funcionan fuera de Byobu / tmux. Las alternativas son gt y gT.) <C-w>T moverá la ventana actual a una nueva pestaña.

Si prefiere que vim use una pestaña existente si es posible, en lugar de crear una pestaña duplicada, agregue :set switchbuf=usetab a su archivo .vimrc. Puedes añadir newtab a la lista:set switchbuf=usetab,newtab) para forzar que los comandos QuickFix que muestran errores de compilación se abran en pestañas separadas. yo prefiero split en su lugar, abre los errores de compilación en una ventana dividida.

Si tiene habilitada la compatibilidad con el mouse con :set mouse=a, puede interactuar con las pestañas haciendo clic en ellas. También hay un + botón de forma predeterminada que creará una nueva pestaña.

Para la documentación sobre pestañas, escriba :help tab-page en modo normal. (Después de hacer eso, puede practicar mover una ventana a una pestaña usando <C-w>T.) Hay una larga lista de comandos. Algunos de los comandos de la ventana tienen que ver con pestañas, por lo que es posible que desee ver esa documentación también a través de :help windows.

Adición: 2013-12-19

Para abrir varios archivos en vim con cada archivo en una pestaña separada, use vim -p file1 file2 .... Si eres como yo y siempre olvidas agregar -p, puede agregarlo al final, ya que vim sigue las reglas normales de análisis de opciones de la línea de comandos. Alternativamente, puede agregar una asignación de alias de bash vim a vim -p.

Respondido 14 Jul 14, 19:07

+1 para vim -p sin embargo, tenga en cuenta que solo se mostrarán hasta 10 pestañas de forma predeterminada. Los archivos adicionales se cargan en búferes, pero no se muestran en su propia pestaña. - IANB

@IanB: ¿cómo puedo superar la configuración predeterminada de limitarlo a 10 pestañas? - 0xC0000022L

@ 0xC0000022L ver tabpagemax configuración - IANB

Tuve el mismo problema. Quería que las pestañas funcionaran como búferes y nunca logré que lo hicieran. ¡La solución que finalmente me decidí fue hacer que los búferes se comportaran como pestañas!

Mira el complemento llamado Mini explorador de búfer, una vez instalados y configurados, podrá trabajar con los búferes de forma similar a las pestañas sin perder ninguna funcionalidad.

Respondido el 19 de Septiembre de 08 a las 16:09

Esta es una respuesta para aquellos que no están familiarizados con Vim y que vienen de otros editores de texto (en mi caso, Sublime Text).

Leí todas estas respuestas y todavía no estaba claro. Si los lee lo suficiente, las cosas comienzan a tener sentido, pero me tomó horas ir y venir entre preguntas.

Lo primero es, como han explicado otros:

Páginas de pestañas, suena mucho a fichas, actúan como pestañas y se parecen mucho a las pestañas en la mayoría de los demás editores de GUI, pero no lo son. Creo que es un modelo mental malo que se construyó en Vim, que desafortunadamente nubla el poder adicional que tienes dentro de una página de pestañas.

La primera descripción que entendí fue de La respuesta de @crenate es que son equivalentes a varios escritorios. Visto en ese sentido, solo tendría un par de escritorios abiertos, pero tendría muchas ventanas GUI abiertas dentro de cada uno.

Yo diría que son similares a otros editores / navegadores:

  1. Agrupaciones de pestañas
  2. Espacios de trabajo de Sublime Text (es decir, una lista de los archivos abiertos que tiene en un proyecto)

Cuando los ve así, se da cuenta del poder de ellos que puede agrupar fácilmente conjuntos de archivos (búferes) juntos, por ejemplo, sus archivos CSS, sus archivos HTML y sus archivos JS en diferentes páginas de pestañas. Lo que en realidad es bastante impresionante.

Otras descripciones que encuentro confusas

Ventana gráfica

Esto no tiene ningún sentido para mí. Una ventana gráfica que, aunque tiene un término de diccionario definido, Solo escuché referencias a las ventanas de Vim en el :help window Doc. Viewport no es un término que haya escuchado con respecto a editores como Sublime Text, Visual Studio, Atom, Notepad ++. De hecho, nunca había oído hablar de Vim hasta que comencé a intentar usar las páginas de pestañas.

Si ve páginas de pestañas como varios escritorios, entonces referirse a un escritorio como una sola ventana parece extraño.

Espacios de trabajo

Esto posiblemente tenga más sentido, la Definición del diccionario es:

Una instalación de almacenamiento de memoria para uso temporal.

Es como un lugar donde almacena un grupo de búferes.

Al principio no sonaba como El concepto de Sublime Text de un espacio de trabajo que es una lista de todos los archivos que tiene abiertos en su proyecto:

el archivo sublime-workspace, que contiene datos específicos del usuario, como los archivos abiertos y las modificaciones de cada uno.

Sin embargo, pensándolo más, esto realmente está de acuerdo. Si considera una página de pestañas de Vim como un proyecto de Sublime Text, entonces parecería extraño tener solo un archivo abierto en cada proyecto y seguir cambiando entre proyectos. Por lo tanto, es extraño usar una página de pestañas para tener abierto un solo archivo.

Colección de ventanas

La :help window se refiere a las páginas de pestañas de esta manera. Además, muchas otras respuestas utilizan el mismo concepto. Sin embargo, hasta que entiendas lo que es una ventana vim, entonces eso no sirve de mucho, como construir un castillo en la arena.

Como mencioné anteriormente, una ventana vim es lo mismo que una ventana gráfica y silenciosa se explica excelentemente en este artículo de linux.com:

Una característica realmente útil en Vim es la capacidad de dividir el área visible entre uno o más archivos, o simplemente dividir la ventana para ver dos bits del mismo archivo más fácilmente. La documentación de Vim se refiere a esto como una ventana o ventana, indistintamente.

Es posible que ya esté familiarizado con esta función si alguna vez ha utilizado la función de ayuda de Vim utilizando: tema de ayuda o presionando la tecla F1. Cuando ingresa a la ayuda, Vim divide la ventana y abre la documentación de ayuda en la ventana superior, dejando su documento abierto en la ventana inferior.

Me parece extraño que una página de pestañas se denomine una colección de ventanas en lugar de una colección de búferes. Pero supongo que puede tener dos páginas de pestañas separadas abiertas, cada una con varias ventanas apuntando al mismo búfer, al menos eso es lo que entiendo hasta ahora.

Respondido el 20 de junio de 20 a las 10:06

Finalmente, después de un año completo de uso de Vim a tiempo completo, me encontré con un caso en el que quería usar más de una página de pestañas. Actualmente, los búferes funcionan perfectamente para mí, ya que usaría pestañas en otros editores. Pero al tener un monitor grande, estaba comparando un montón de 3-4 búferes diferentes. Luego, un colega me pidió que buscara algún código en otra parte de la base de código. En lugar de perder mi conjunto de ventanas de comparación, podría simplemente crear una nueva página de pestañas que luego me permita hacer una búsqueda por separado como lo haría cuando solo uso Vim normalmente y luego podría cerrar la página de pestañas una vez hecho y volver a mi conjunto inicial - icc97

Mirando: pestañas de ayuda, no parece que vim quiera trabajar como tú ...

Los búferes se comparten entre pestañas, por lo que no parece posible bloquear un búfer determinado para que aparezca solo en una pestaña determinada.

Sin embargo, es una buena idea.

Probablemente pueda obtener el efecto que desea utilizando un terminal que admita pestañas, como multi-gnome-terminal, y luego ejecutando instancias de vim en cada pestaña del terminal. Aunque no perfecto ...

Respondido el 19 de Septiembre de 08 a las 15:09

Intenté eso, el problema con eso, además de dificultar la navegación entre pestañas, es que el texto extraído no se puede compartir entre pestañas de terminal, ya que son esencialmente dos terminales / shells diferentes - puk

@puk: Prueba el complemento vim YankRing. Guarda el texto extraído en un archivo, por lo que se puede compartir entre instancias de vim. - pixelado

@Pixelastic Encontré una solución adecuada aquí para tirar al portapapeles del sistema. Además, Vim funciona mejor en un caso. Dejé de hacer que hiciera lo que quería y aprendí a usar vim correctamente :-) stackoverflow.com/a/8757876/654789 - puk

@puk: Gracias, no se me ocurrió que usar el portapapeles del sistema significa compartirlo también entre instancias de vim :) - pixelado

  • Puede asignar comandos que normalmente manipulan búferes para manipular pestañas, como lo hice con gf en mi .vimrc:

    map gf :tabe <cfile><CR>
    

    Estoy seguro de que puedes hacer lo mismo con [^

  • No creo que vim admita esto para pestañas (todavía). Utilizo gt y gT para pasar a las pestañas siguiente y anterior, respectivamente. También puede utilizar Ngt, donde N es el número de pestaña. Un inconveniente que tengo es que, de forma predeterminada, el número de pestaña no se muestra en la línea de pestaña. Para solucionar este problema, puse un par de funciones al final de mi archivo .vimrc (No pegué aquí porque es largo y no formateé correctamente).

Respondido el 19 de Septiembre de 08 a las 15:09

<c-w>gf abrirá el nombre del archivo debajo del cursor en una nueva pestaña - Pedro Rincker

Yo uso búferes como pestañas, usando el BufExplorer plugin y algunas macros:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

Con BufExplorer no tiene una barra de pestañas en la parte superior, pero por otro lado ahorra espacio en su pantalla, además puede tener una cantidad infinita de archivos / búferes abiertos y la lista de búfer se puede buscar ...

Respondido el 19 de Septiembre de 08 a las 23:09

Si desea que los búferes funcionen como pestañas, consulte la complemento de tablillas.

Eso usa una sola ventana y agrega una línea en la parte superior para simular las pestañas (solo muestra la lista de búferes). Esto salió hace mucho tiempo cuando las pestañas solo eran compatibles con GVim pero no en la línea de comandos vim. Dado que solo funciona con búferes, todo se integra bien con el resto de vim.

Respondido el 28 de junio de 17 a las 13:06

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