usar tutorial texto insertar español editar curso copiar con como comandos vim editor tabs

tutorial - insertar texto vim



Usando las pestañas de Vim como buffers (10)

Contrariamente a 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 obligarlo a trabajar de acuerdo con parámetros predefinidos. Todos sabemos cómo a los programadores nos encanta imponer nuestra "ética" a todos los demás, por lo que este logro es ciertamente una característica primordial.

<Cw>gf es la pestaña equivalente del comando gf de los buffers. <C-PageUp> y <C-PageDown> cambiarán entre las pestañas. (En Byobu, estos dos comandos nunca funcionan para mí, pero funcionan fuera de Byobu / tmux. Las alternativas son gt y gT ). <Cw>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. Puede agregar newtab a la lista ( :set switchbuf=usetab,newtab ) para forzar que los comandos de QuickFix que muestran errores de compilación se abran en pestañas separadas. Prefiero split lugar, lo que abre los errores de compilación en una ventana dividida.

Si tiene soporte para mouse habilitado con :set mouse=a , puede 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 de las pestañas, escriba :help tab-page en modo normal. (Después de hacer eso, puede practicar mover una ventana a una pestaña usando <Cw>T ). Hay una larga lista de comandos. Algunos de los comandos de ventana tienen que ver con pestañas, por lo que es posible que desee consultar 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 te olvidas de agregar -p , puedes agregarlo al final, ya que vim sigue las reglas de análisis de las opciones de línea de comando normales. Alternativamente, puede agregar un alias de mapeo bash vim a vim -p .

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

Me gustaría que todos los archivos distintos que tengo abiertos estén siempre en su propia pestaña. Sin embargo, hay algunas cosas que se interponen en el camino de esto. ¿Cómo puedo solucionar estos:

  1. Cuando comandos como gf y ^] saltan a una ubicación en otro archivo, el archivo se abre en un nuevo búfer en la pestaña actual. ¿Hay alguna forma 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 los buffers puedo usar :b <part of filename><tab> y completará los nombres de los archivos en los buffers existentes. <part of filename> puede ser incluso la mitad de un nombre de archivo en lugar del principio. ¿Hay un equivalente para cambiar de pestaña?


En cuanto a: pestañas de ayuda, no parece que Vim quiera trabajar de la misma manera que tú ...

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

Aunque es una buena idea.

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


Esta es una respuesta para aquellos que no están familiarizados con Vim y vienen 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 de ir y venir entre las preguntas.

Lo primero es, como han explicado otros:

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

La primera descripción que entendí fue de la respuesta de @crenate es que son equivalentes a múltiples escritorios. Cuando lo veas en ese sentido, solo tendrías un par de escritorios abiertos pero tendrías muchas ventanas GUI abiertas dentro de cada una.

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

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

Cuando los ve así, se da cuenta de la potencia de los mismos que puede agrupar fácilmente conjuntos de archivos (buffers), por ejemplo, sus archivos CSS, sus archivos HTML y sus archivos JS en diferentes páginas de pestañas. Que en realidad es bastante impresionante.

Otras descripciones que me resultan confusas.

Mirador

Esto no tiene ningún sentido para mí. Una ventana gráfica que aunque tiene un término de diccionario definido , solo he escuchado que se refiere a las ventanas de Vim en la :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 lo había escuchado para Vim hasta que empecé a intentar usar las pestañas.

Si ve páginas de pestañas como escritorios múltiples, entonces es extraño que se haga referencia a un escritorio como una sola ventana.

Espacios de trabajo

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

Un dispositivo de almacenamiento de memoria para uso temporal.

Así que es como un lugar donde almacenas un grupo de buffers.

Al principio no me parecía 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 de espacio de trabajo sublime, que contiene datos específicos del usuario, como los archivos abiertos y las modificaciones de cada uno.

Sin embargo, pensando más en esto, esto realmente está de acuerdo. Si consideras una página de pestaña Vim como un proyecto de texto sublime, entonces parece extraño tener un solo archivo abierto en cada proyecto y seguir cambiando de proyecto. Por eso, usar una página de pestañas para tener abierto solo un archivo es impar.

Colección de ventanas

La :help window refiere a las páginas de pestañas de esta manera. Además, muchas otras respuestas utilizan el mismo concepto. Sin embargo, hasta que no entiendes lo que es una ventana, 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 silenciosa, explicada de manera excelente 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 con mayor facilidad. La documentación de Vim se refiere a esto como una ventana gráfica o ventana, de manera intercambiable.

Es posible que ya esté familiarizado con esta función si alguna vez ha usado la función de ayuda de Vim usando: tema de ayuda o presionando la tecla F1. Cuando ingresa 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 parece extraño que una página de pestañas se haga referencia a 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 varias ventanas apuntando al mismo búfer, al menos eso es lo que entiendo hasta ahora.


Pará pará pará.

No es así como las pestañas de Vim están diseñadas para ser utilizadas. De hecho, están mal nombrados. Un nombre mejor sería "viewport" o "layout", porque eso es lo que es una pestaña: es un diseño diferente de las ventanas de todos sus buffers existentes.

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

En lugar:

  • :set hidden
    Si aún no tienes este set, hazlo. Hace que vim funcione como cualquier otro editor de archivos múltiples en el planeta. Puedes tener buffers editados que no son visibles en alguna ventana.
  • Use :bn :bp :b # ctrl-6 :b name y ctrl-6 para cambiar entre buffers. A mí me gusta ctrl-6 (solo cambia al búfer usado anteriormente, o #ctrl-6 cambia al número de búfer # ).
  • Use :ls para listar buffers, o un complemento como MiniBufExpl o BufExplorer .

Poco tarde a la fiesta aquí, pero me sorprendió no haber visto 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, 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á.


Si quieres que los buffers funcionen como pestañas, revisa el complemento de Tabline .

Utiliza una sola ventana y agrega una línea en la parte superior para simular las pestañas (solo muestra la lista de buffers). Esto sucedió hace mucho tiempo cuando las pestañas solo se admitían en GVim pero no en la línea de comandos vim. Como solo funciona con búferes, todo se integra bien con el resto de vim.


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

Echa un vistazo al complemento llamado Mini Buffer Explorer , una vez instalado y configurado, podrás trabajar con búferes de la misma manera que las pestañas sin perder ninguna funcionalidad.


Vim :help window explica bastante bien la confusión "tabs vs buffers".

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ña es una colección de ventanas.

La apertura de múltiples archivos se logra en vim con buffers . 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.

Las 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 múltiples ventanas de GUI y reorganizándolas en el escritorio.

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

Como help: tab-page 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 usar otra página de pestaña con el único fin de editar ese archivo en particular.

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


Yo uso buffers como pestañas, usando el plugin BufExplorer 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 de que puede tener una cantidad infinita de archivos / buffers abiertos y la lista de búferes es accesible ...


  • Puedes asignar comandos que normalmente manipulan búferes para manipular pestañas, como he hecho 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). Uso gt y gT para mover a las pestañas siguiente y anterior, respectivamente. También puede usar Ngt, donde N es el número de la pestaña. Un motivo que tengo es que, de forma predeterminada, el número de la pestaña no se muestra en la línea de la pestaña. Para solucionar esto, coloqué un par de funciones al final de mi archivo .vimrc (no pegué aquí porque es largo y no se formateó correctamente).