Pregunta

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 buffers ocultos.

Me gustaría que cada archivo distinto que tengo abierto estuviera 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 ^] salta 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 buffer puedo usar:b <part of filename><tab>y completará los nombres de los archivos en los buffers existentes. <part of filename> incluso puede ser la mitad de un nombre de archivo en lugar del principio.¿Existe un equivalente para cambiar de pestaña?

¿Fue útil?

Solución

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 todo de sus buffers existentes.

Intentar 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, en cualquier cosa que utilice el búfer de corrección rápida (:make, :grep, y :helpgrep son los que me vienen a la mente) ignorarán felizmente las pestañas y no hay nada que puedas hacer para evitarlo.

En cambio:

  • :set hidden
    Si aún no tienes este conjunto, hazlo.Hace que vim funcione como cualquier otro editor de archivos múltiples del planeta.Puede tener buffers editados que no son visibles en una ventana en algún lugar.
  • Usar :bn, :bp, :b #, :b name, y ctrl-6 para cambiar entre buffers.Me gusta ctrl-6 yo mismo (solo cambia al búfer utilizado anteriormente, o #ctrl-6 cambia al número de buffer #).
  • Usar :ls para enumerar buffers, o un complemento como MiniBufExpl o BufExplorador.

Otros consejos

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 conmutación del buffer, prueba :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.

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 múltiples archivos se logra en vim con amortiguadores.En otros editores (p. ej.notepad++) esto se hace con pestañas, por lo que el nombre de la pestaña en vim puede ser engañoso.

ventanas tienen el propósito de dividir el espacio de trabajo y mostrar varios archivos (buffers) juntos en una pantalla.En otros editores, esto podría lograrse abriendo varias ventanas GUI y reorganizándolas en el escritorio.

Finalmente en esta analogía de vim páginas de pestañas Correspondería a múltiples escritorios, es decir, diferentes reordenamientos de ventanas.

como vitalidad help: tab-page explica que se puede utilizar una página de pestañas cuando uno quiere editar temporalmente un archivo, pero no quiere cambiar nada en el diseño actual de ventanas y buffers.En tal caso, se puede utilizar otra página de pestaña solo con el fin de editar ese archivo en particular.

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

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 obligarte a trabajar según parámetros predefinidos.Todos sabemos que a los programadores nos encanta imponer nuestra "ética" a los demás, por lo que este logro es sin duda una característica principal.

<C-w>gf es la pestaña equivalente a buffers gf dominio. <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 cambio, abre los errores de compilación en una ventana dividida.

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

Para la documentación en pestañas, escriba :help tab-page en modo normal.(Después de hacer eso, puedes practicar cómo 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 desees consultar esa documentación también a través de :help windows.

Suma: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 te olvidas de agregar -p, puede agregarlo al final, ya que vim sigue las reglas de análisis de opciones de línea de comando normales.Alternativamente, puede agregar una asignación de alias de bash vim a vim -p.

Tuve el mismo problema.Quería que las pestañas funcionaran como buffers y nunca logro lograrlo.¡La solución que finalmente elegí fue hacer que los buffers se comportaran como pestañas!

Mira el complemento llamado Explorador de minibúfer, una vez instalado y configurado, podrá trabajar con buffers prácticamente de la misma manera que con pestañas sin perder ninguna funcionalidad.

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

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

Lo primero es, como han explicado otros:

Páginas de pestañas, suena muy parecido pestañas, 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 mal modelo mental construido 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 el equivalente a múltiples escritorios.Visto en ese sentido, solo tendrías un par de escritorios abiertos pero tendrías muchas ventanas GUI abiertas dentro de cada uno.

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

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

Cuando los ves así, te das cuenta del poder que tienen: puedes agrupar fácilmente conjuntos de archivos (búferes), p.sus archivos CSS, sus archivos HTML y sus archivos JS en diferentes pestañas.Lo cual es realmente bastante asombroso.

Otras descripciones que me parecen confusas

Ventana gráfica

Esto no tiene ningún sentido para mí.Un viewport que aunque tiene un término definido en el diccionario, solo escuché referirse a las ventanas de Vim en el :help window doc.Viewport no es un término que haya escuchado nunca 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 páginas de pestañas.

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

Espacios de trabajo

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

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

Es como un lugar donde se almacena un grupo de buffers.

Inicialmente no sonaba como El concepto de Sublime Text de un espacio de trabajo que es una lista de todos los archivos que tienes abiertos en tu 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 detenidamente, esto realmente concuerda.Si considera una página de pestaña 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 abrir solo un archivo.

colección de ventanas

El :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 qué es una ventana vim, entonces eso no sirve de mucho, como construir un castillo sobre arena.

Como mencioné anteriormente, una ventana vim es lo mismo que una ventana gráfica y está excelentemente explicada 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 partes del mismo archivo más fácilmente.La documentación de Vim se refiere a esto como ventana gráfica o ventana, indistintamente.

Es posible que ya esté familiarizado con esta función si alguna vez usó la función de ayuda de Vim usando :help topic o presionando la tecla F1.Cuando ingresa a la ayuda, Vim divide la ventana gráfica y abre la documentación de ayuda en la ventana superior, dejando su documento abierto en la ventana inferior.

Me resulta extraño que se haga referencia a una página de pestañas como una colección de ventanas en lugar de una colección de buffers.Pero supongo que puedes tener dos pestañas separadas abiertas, cada una con múltiples ventanas apuntando al mismo búfer, al menos eso es lo que entiendo hasta ahora.

Mirando: pestañas de ayuda, no parece que Vim quiera funcionar como lo hace ...

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

Aunque es una buena idea.

Probablemente podría obtener el efecto que desea usando una terminal que admita pestañas, como multi-gnome-terminal, y luego ejecutando instancias vim en cada pestaña de la terminal.Aunque no es perfecto...

  • Puedes asignar comandos que normalmente manipulan buffers 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 puedes usar Ngt, donde N es el número de pestaña.Lo que me molesta 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 lo pegué aquí porque es largo y no tenía el formato correcto).

Utilizo buffers como pestañas, usando el BufExplorador complemento 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 tienes una barra de pestañas en la parte superior, pero por otro lado ahorra espacio en tu pantalla, además puedes tener un número infinito de archivos/búferes abiertos y la lista de búfer se puede buscar...

Si desea que los buffers funcionen como pestañas, consulte el complemento de tabulación.

Eso usa una sola ventana y agrega una línea en la parte superior para simular las pestañas (solo muestra la lista de buffers).Esto salió a la luz hace mucho tiempo, cuando las pestañas solo eran compatibles con GVim pero no con la línea de comando vim.Como sólo funciona con buffers, todo se integra bien con el resto de vim.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top