¿Por qué los expertos de Vim prefieren los tampones a las pestañas?

243

No entiendo los amortiguadores. Cuando abro 3 archivos en la misma pestaña y cierro mi ventana, generalmente me molesta descubrir la próxima vez que abro uno de esos archivos que hay archivos de intercambio extraños que persisten y me dan mensajes molestos. Pero una y otra vez leí que estas cosas son el nirvana de productividad que me estoy perdiendo y que las pestañas fueron hechas para que las plebeyas las usaran.

Entonces, le pregunto, el experto de Vim: ¿cuáles son las ventajas de usar tampones sobre pestañas? No veo cómo la diferencia podría ser profundamente diferente, pero me consideraría solo en el nivel principiante-intermedio en el funcionamiento de Vim. ¿Es :ls :b#realmente mucho más rápido que gtandar por ahí? Siento que debe ir más profundo que esto.

2c2c
fuente
66
Para aquellos que están aprendiendo Vim o que vienen a Vim influenciados por otros editores basados ​​en GUI, les recomiendo leer primero la respuesta de @Jonathan Brink y luego volver a la respuesta principal aquí.
icc97
1
No te preocupes demasiado por eso. Utilizo pestañas como mi forma principal de navegación entre archivos. Como usted dice, <#> gt es fácil de escribir. Para que sea aún más fácil de usar, personalizo mis datos de tabulación para incluir el número de tabulación. Si necesito ver más de un búfer a la vez, divido una nueva ventana dentro de la pestaña. A pesar de lo que afirma @romaini, esta forma de usar Vim me hace muy productivo porque se ajusta a mis metáforas personales. Tenga en cuenta también que en una carrera de 37 años (hasta ahora) como programador, todavía no he tenido que tener abiertos más de cinco o seis archivos a la vez, y eso es muy raro. Haz lo que te funcione. :)
Tony
Haz lo que funciona. Algunas personas usan muchos archivos en una sesión, por lo que los búferes importan mucho más. Incluso Bram Moolenaar dice "organízalos como quieras". Tener 20 pestañas abiertas no es la forma correcta, pero las pestañas de algunos archivos no son el fin del mundo. La solución de Bram para administrar muchos archivos es abrir varias sesiones de terminal. Él dice que así es como lo hace, pero no es así como todos deberían hacerlo.
artesanal
La única diferencia más obvia que no parece estar resaltada correctamente es que si te quedas en una pestaña puedes ver múltiples buffers al mismo tiempo haciendo :splitclic en "ventanas". Si tiene todos sus buffers (archivos) en pestañas separadas, no obtendrá esa vista simultánea. Recomiendo aprender vim usando 1 pestaña para comenzar y acostumbrarse a las divisiones.
NeilG

Respuestas:

500

Como dijo ZyX en #vim, esta pregunta suena como "¿Por qué los expertos de Vim prefieren sabroso antes que caliente?" .

Los "expertos de Vim" no prefieren los buffers en lugar de las pestañas: usan buffers como los archivos proxy que son y las páginas de pestañas como los espacios de trabajo que son. Los buffers y las páginas de pestañas tienen diferentes propósitos, por lo que preferir uno a otro no tiene ningún sentido.

El problema con los tampones y las pestañas es de confusión , causado por una combinación de hechos independientes.

  1. La mayoría de los editores de texto e IDE "modernos" usan una metáfora de tabulación para representar los archivos cargados. Esa metáfora actúa como un sistema de información, le muestra al usuario qué archivos se abren y su estado, y como un dispositivo interactivo, le permite manipular (reordenar, seleccionar, cerrar ...) esos archivos abiertos. A pesar de sus muchas limitaciones, las pestañas están en todas partes y las personas están acostumbradas a ellas y las esperan en todas partes.

  2. Vim introdujo páginas de pestañas en 7.0 como una forma para que sus usuarios creen "espacios de trabajo" ad-hoc. Nada en sus características, sus opciones específicas, sus comandos específicos o sus :helpsecciones sugiere que las páginas de pestañas podrían o deberían usarse como archivos proxy.

    Nada, excepto el nombre y la apariencia de las "páginas de pestañas", por supuesto, lo que genera mucha confusión.

  3. Sin :set hidden, que está deshabilitado de forma predeterminada y no es muy fácil de encontrar, Vim hace que sea imposible cambiar a otro búfer sin escribir el actual o abandonar sus cambios. Los nuevos usuarios, que desconocen esa opción, no tienen más remedio que recurrir al uso de ventanas pesadas o a la función "similar a una pestaña" más cercana que pueden encontrar: páginas de pestañas.

La "página de pestañas" es una elección de nombre desafortunada para esa función, especialmente en una era dominada por la idea de que leer la documentación es una pérdida de tiempo.

En Vim, las páginas con pestañas son una abstracción construida en la parte superior de las ventanas, una abstracción construida en la parte superior de los buffers. Cada nuevo nivel agrega características útiles pero restringe su flujo de trabajo.

La "forma de amortiguación"

Con un flujo de trabajo basado en búfer, los archivos con los que está trabajando se distribuyen en una sola dimensión. Puede desplazarse por sus búferes, puede acceder a un búfer específico escribiendo parte de su nombre (con finalización) o su número, puede alternar entre búferes, puede orientarlos con bastante facilidad. Básicamente no hay fricción.

  1. Ocho buffers abiertos, solo uno visible:

    Ocho tampones abiertos

  2. Cambio por número:

    Cambio por número

  3. Cambio por nombre:

    Cambiar por nombre

Los buffers son los archivos proxy de Vim. Si piensa en términos de archivos, piensa en términos de buffers.

El "camino de la ventana"

Con un flujo de trabajo basado en ventanas, sus "archivos" se distribuyen a lo largo de la misma dimensión "virtual" como lo harían si solo utilizara buffers y otras dos dimensiones "físicas". Pero los espacios cartesianos en los que se encuentran esas dimensiones están casi completamente separados: moverse a otro búfer todavía significa "moverse a otro archivo", pero no a otra ventana. El búfer que corresponde al archivo deseado puede mostrarse en esa ventana, pero también puede mostrarse en otra, tal vez en otra página de pestañas, o en absoluto.

Con Windows, navegar entre archivos abiertos se vuelve demasiado complejo o demasiado simplista, incluso con 'switchbuf'y :sb. Principalmente porque se ve obligado a usar dos conjuntos de comandos para lo que es esencialmente lo mismo: acceder a un búfer.

Las ventanas tienen su uso, como se describe a continuación, pero no tienen lo necesario para reemplazar las memorias intermedias en el flujo de trabajo de nadie.

Aquí estoy trabajando en un esquema de colores Vim. Las dos ventanas son vistas diferentes del mismo búfer: la superior sirve como referencia, con una tabla de los códigos de color utilizados en el esquema de colores, y la inferior es donde trabajo:

Trabajando en un esquema de colores

Windows no está diseñado como archivos proxy y no se puede convertir en uno: son "contenedores" o "vistas" diseñados para ofrecerle una vista en un búfer. Ni mas ni menos.

La "forma de tabulación"

Con un flujo de trabajo basado en pestañas, esencialmente intentas imitar la experiencia del usuario a la que estás acostumbrado desde tu editor anterior mientras ignoras por completo la naturaleza misma de las páginas de pestañas de Vim. Si olvidamos por un momento que esta estrategia generalmente es muy improductiva, también es imposible, al igual que con Windows, forzar a Vim a adherirse a ese paradigma "un archivo = una pestaña" sin perder mucha flexibilidad.

Todavía trabajando con los mismos archivos que el anterior, la tabla ocupa un espacio significativo prácticamente sin beneficio. Todos mis archivos y todas mis pestañas se llaman, javascript*.vimasí que no puedo hacerlo 3gty estoy seguro de que terminaré en el lugar correcto y es imposible llegar a una pestaña específica por nombre. Agregue a eso el hecho de que su etiqueta puede ser muy inútil pero perfectamente lógica [Quickfix List]... Dado que no hay una forma práctica de vincular un archivo / búfer a una página de pestañas, básicamente solo le queda una forma práctica de navegar entre las páginas de pestañas / buffers / files: ciclismo.

Y sí, mi línea de pestañas está cubierta con solo 8 pestañas, ¡imagínese si tuviera 20!

  1. Ocho buffers abiertos en ocho páginas de pestañas (incorrecto)

    Incorrecto

  2. Dos pestañas para dos tareas específicas (derecha)

    Correcto

Las páginas con pestañas son "contenedores" o "viewports" diseñados para contener una o más ventanas, también "contenedores" diseñados para contener buffers.

En conclusión

Los "expertos de Vim" (supongamos que puedo hablar como si fuera uno) no prefieren los tampones a las pestañas: solo usan Vim como fue diseñado y están perfectamente cómodos con ese diseño:

  • Los "expertos de Vim" tienen 2, 30 o 97 buffers cargados y están muy contentos de no tener que lidiar con la distribución espacial;

  • cuando necesitan comparar dos archivos o trabajar en una parte del búfer actual mientras mantienen otro como referencia, los "expertos de Vim" usan ventanas porque así es como deben usarse;

  • cuando necesitan trabajar por un tiempo en una parte separada del proyecto sin meterse con su vista actual, los "expertos de Vim" cargan una nueva página de pestañas.

romainl
fuente
10
Para ver algunos enlaces adicionales, consulte mi publicación Usar buffers de manera efectiva
Peter Rincker el
77
@DavidEG, tener 20 buffers no es problemático, por lo que realmente no hay necesidad de un complemento. Por otro lado, 20 páginas de pestañas, ya sean convincentes o no con archivos proxy, no caben en la mayoría de las pantallas, complementos o no.
romainl
2
@Kache, sí, ese es exactamente el núcleo de mi punto: puedes usar ventanas y páginas de pestañas para lo que son, pero no como archivos proxy. Entonces, el argumento no es si las personas deberían usar páginas de tabulación o buffers , es si las personas deberían usar páginas de pestañas como archivos proxy o no.
romainl
14
Como “experto Vim” Puedo decir que más de 4 centenar de buffers “abierta” (en realidad “en la lista, pero sin carga, a excepción de unos pocos”) es una situación normal cuando me ocupo de proyecto como NeoVim (I sólo tiene que abrir todas *.c, *.h, scripts/*y test/**/*.luaarchivos). Dado que mi terminal tiene solo 239 columnas de ancho, el enfoque de "un archivo por pestaña" es imposible de usar.
ZyX
3
Y dado que hay una serie de complementos (Command-T, ...) que hace que el cambio entre buffers y / o archivos sea más fácil usando pestañas para cualquier proyecto relativamente grande no tiene sentido. Y neovim con ≈500 archivos "interesantes" es un gran proyecto, pero no el más grande. Cuando enfrenta la necesidad de lidiar con tales proyectos, siempre usa algún tipo de búsqueda para navegar (búsqueda de archivos / etiquetas con Command-T y amigos, varias formas de ir a la definición de símbolos) y, por lo tanto, no tiene absolutamente ninguna razón para usar pestañas de esta manera: en cualquier caso, no utilizará la funcionalidad de tabulación para navegar por el proyecto.
ZyX
88

Solía ​​mantener cada búfer en una pestaña separada, pero me cansé de estar constantemente gty gTdando vueltas por todas partes.

También sentí que las memorias intermedias eran demasiado difíciles de manejar.

Aquí hay algunas técnicas que cambiaron totalmente mi opinión anterior:

Aquí está mi flujo de trabajo típico:

  • Abra Vim y use :e(generalmente con una expresión regular :e src/**/F*Bar.js) para abrir un búfer
  • Date cuenta de que necesito abrir otro archivo. Úselo :epara eso también. Si quiero alternar entre este búfer y el búfer abierto actualmente, lo usaré :spo :vsppara abrirlo en una ventana separada.
  • Repita hasta que tenga los 3-5 archivos que cambiaré usando las técnicas en la lista con viñetas anterior para volar entre sus buffers.
  • Si quiero "comenzar de nuevo" con mis buffers, simplemente cierre Vim y vuelva a abrir.

Sentí que después de una semana de forzar estos nuevos patrones, se hizo mucho más fácil visualizar qué búferes había abierto y cómo llegar a cualquiera de ellos con solo unos pocos trazos automáticos.

Jonathan.Brink
fuente
24
Es una pena que las amables explicaciones amigables para el usuario / novato como esta obtengan aproximadamente el 3% de los votos a favor de respuestas muy complejas y muy peyorativas, como la más votada aquí. Ni siquiera sabía que ese gTera el comando para cambiar de pestaña, había estado buscando el reemplazo ctrl+tab. Así que gracias por ayudar realmente a un nuevo usuario en lugar de solo hacer que se sientan estúpidos.
icc97
11
Tengo que decir que mi comentario es injusto con la respuesta de @ romainl, estaba muy contento de responder las preguntas que tenía al respecto. Pero ciertamente, como alguien que intenta aprender Vim, su respuesta es mucho más fácil de entender, pero su respuesta es más completa una vez que realmente sabe un poco más.
icc97
3
Creo que la respuesta de @ romainl es extremadamente útil, y nos da una idea clara de cómo están diseñados los búferes, ventanas y pestañas, y cómo están destinados a ser utilizados. Aún así, creo que los usuarios de Vim aprovechan la oportunidad de responder preguntas de una manera que no entiendes , y eso puede ser frustrante.
keyofnight
3
No recuerdo de dónde lo obtuve, pero nnoremap <leader>b :ls<CR>:b<space>es bastante bueno para cambiar rápidamente los búferes, ya que muestra una lista de los búferes abiertos actualmente. Además, se aceptan nombres parciales (siempre que haya una sola coincidencia).
naught101 01 de
1
Este método también tiene el beneficio realmente asombroso del autocompletado de vim (predeterminado, sin complementos adicionales). Como está utilizando múltiples memorias intermedias, cuando está en modo de inserción y hace un ctrl No ctrl P(P es lo que suelo usar), le dará una lista de palabras para terminar lo que estaba escribiendo ... Es inteligente según su actual búfer, los que están divididos, los que estabas viendo, ¡y cualquier otro archivo abierto!
g19fanatic
12

La desventaja de las pestañas es que solo puede ver el contenido de una a la vez. Entonces, si los usa como en un navegador, está perdiendo la vista de múltiples buffers uno al lado del otro, o incluso viendo partes separadas del mismo archivo en divisiones. Por lo tanto, muchos recomiendan usar pestañas solo para segregar diferentes espacios de trabajo (por ejemplo, tener uno para un proyecto Java, otro para una lista de tareas pendientes, un tercero para piratear un script en el lateral).

Los problemas que describe hacen que parezca que está usando Vim incorrectamente. O bien (en su mayoría) una única instancia dedicada. Luego, los buffers que se ocultan simplemente "reaparecerán" si los vuelve a editar (y ahora puede usar la lista de buffer para recuperarlos), y no habrá mensajes de intercambio de archivos. O bien, use instancias de Vim separadas por proyecto / archivo / sesión de edición, pero luego acostúmbrese a completar :quitcada instancia cuando haya terminado con el archivo.

Ingo Karkat
fuente
Yo uso divisiones ocasionalmente. No sabía que se los consideraba 'usando amortiguadores'. Es un concepto misterioso para mí realmente.
2c2c
1
Como un redescubrimiento interesante de pestañas, tabman puede generar un panel lateral tipo NerdTree, que detalla todos los buffers tal como se muestran en cada pestaña.
llinfeng
7

Otro consejo, cuando se usa el nombre del búfer como argumento para: búfer, no tiene que especificar nombres completos. Sin embargo, si más de un búfer coincide con el argumento dado, los búferes no se cambiarán.

Cualquier fragmento del nombre del búfer se puede usar para hacer coincidir. Por ejemplo, si tiene los almacenamientos intermedios request_manager.javay queue_manager.javaluego :buffer queo :b quecoincide con ambos, pero cambiará a queue_manager.java como coincide al principio.

Julius Martin
fuente
3

Puedo utilizar pestañas, Ctrl- Py sesiones de Vim en mi flujo de trabajo y desde hace más de un año:

  • Tengo )y (asignado a "ir a la pestaña siguiente" y "ir a la pestaña anterior", respectivamente. tnabre una nueva pestaña. También hago uso de tabm para ayudar a mantener las cosas organizadas.

  • Utilizo sesiones de Vim para grupos de archivos relacionados con la historia / error actual en el que estoy trabajando, generalmente por categoría. Estas sesiones se sobrescriben durante el curso del proceso.

  • Todavía tengo que encontrar algo mejor que Ctrl- P, pero sí tener un poco de procesar todos los archivos para encontrar.

ShangoThrax
fuente
1

Lanza 2c en la pila.

TLDR; :b *part-of-filename*es la mejor manera de encontrar un archivo que necesita en la lista de búfer, es decir, es MÁS RÁPIDO y tiene MENOS carga cognitiva que los números de búfer, pestañas o ventanas para rastrear archivos.

No es nada para mí tener 30 buffers abiertos (es decir, no he estado haciendo la limpieza), y la belleza de los buffers utilizados, bueno, es que no me frena en absoluto. De hecho, acelera las cosas cuando cuatro días después de abrir el archivo lo necesito, lo llamo :b *part-of-filename*y aparece mágicamente, impresionando a los compañeros de trabajo y a los colectivistas.

Los buffers son para archivos.

Ser efectivo:

  • Abra un primer archivo importante desde un directorio raíz diabólicamente bien elegido
  • Abrir archivos posteriores con :e
  • Use lsTODO el tiempo cuando empiece a obtener un buen modelo mental (no puede asimilar lo que no puede ver, mental o literalmente)
  • Nunca :qsopla
  • Entra :ben tu memoria muscular
  • :b1 es bueno para el primer archivo que sabe que abrió, de lo contrario, los números y las letras se vuelven torpes rápidamente
  • :b# es bueno para cambiar a su último archivo, que es una necesidad común
  • :bd#es bueno para cuando cambiaste a un archivo temporal, hiciste lo que debías hacer, volviste a cambiar :b#y ahora quieres cerrar ese archivo temporal
  • :b *part-of-filename* de lo contrario, es la mejor manera de encontrar un archivo que necesita en la lista, es decir, es MÁS RÁPIDO y tiene MENOS carga cognitiva que los números de búfer, pestañas o ventanas para rastrear archivos.

La única molestia :b *part-of-filename*es que a veces aún no ha abierto el archivo, y necesita regresar y :e path/to/full-filenameprimero.

Las pestañas son para diferenciar archivos verdaderamente no relacionados.

O mantener a mano un diseño particular de Windows (descargo de responsabilidad: nunca lo he usado para esto)

O para archivos raramente utilizados, pero previsiblemente necesarios. Para mí, ese es generalmente un commitMessagearchivo que anoto mientras trabajo para que no tenga que pensar demasiado cuando llegue el momento de realizar una confirmación. gtes más rápido que :b com<enter>(si te sientes con suerte, de lo contrario :b com<tab><enter>)

  • :tabe commitMessage
  • gto gTtambién un favorito de la memoria muscular

Las divisiones de ventanas son para comparar visualmente información

O tener acceso inmediato a información importante (sinceramente, a menos que esa información sea de alguna manera algo que necesito para actualizar en vivo, :ees decir, un archivo de registro, generalmente solo extraigo el contenido en el archivo actual y lo trato allí).

  • :vspo C-w vabre una división vertical, es decir, izquierda | bien, luego use :bo :epara obtener el archivo que desea
  • :spo C-w sabrir una división horizontal, es decir, arriba / abajo
  • C-w C-w es decir, doble Ctrl-w, te rota alrededor de las ventanas disponibles
  • C-w c cerrar ventana actual
  • C-w o cierre todas las demás ventanas, manténgase actualizado SOLO
Paul Parker
fuente
Respuesta increíblemente útil, debería tener muchos más votos a favor. Gracias por los consejos, especialmente la información sobre su flujo de trabajo con :b#y :bd#!
Alacritas
0

Agregue estos a su .vimrcy comience a amar los amortiguadores:

:nnoremap <Tab> :n<cr>
:nnoremap <S-Tab> :N<cr>

De esa manera, puede avanzar / retroceder en modo normal a través de Tab/ ShiftTab.

sjas
fuente
55
No hagas eso. Perderás el mapeo para <C-I>. Mapa <C-Tab>en su lugar si realmente quieres.
66
Además, :ny se :Nrelacionan con la lista de argumentos, no abren buffers. Te gustaría :bny :bp( :bnexty :bprev). El intacto de tpope proporciona asignaciones ]by [bpara esto (y otras cosas buenas) si lo desea. (y ), o <left>y <right>flechas, podría decirse que son teclas menos útiles para anular que la pestaña, si realmente desea un mapeo corto.
Vaz
1
@jeyoung estuvo de acuerdo: también tiene mucho más sentido usarlo, Ctrl + Tabya que eso es lo que usan la mayoría de los otros editores y navegadores GUI.
icc97
0

Me gustaría sugerir una implementación brillante de hace un buen número de años: kien / tabman.vim . Aclara lo siguiente:

  • Uno puede tener tantos buffers que están cuidadosamente ocultos, en algún lugar;
  • Por diseño, las pestañas están destinadas a mostrar bufferes de manera creativa.
    • Con algún complemento de tabulación adecuado, se pueden mostrar todos los búferes ocultos en la fila superior (tabulación);
    • Según mi experiencia con vim-airline , la pestaña mostrará muy poca información relevante cuando cree una pestaña nueva.
    • Dos etiquetas ocuparán la ranura de la tabla, una al lado de la otra, desperdiciando el resto de los espacios horizontales
    • Peor aún, ya no tengo idea de cuáles son los búferes que están ocultos.

Ha sido un maravilloso redescubrimiento de este complemento mágico, que también debería haber permanecido en mi configuración de Vim durante un buen número de años. Si bien continuaría buscando algo que también muestre todos los búferes ocultos, TabMan es mi superhombre cuando se trata de tener una vista panorámica de cómo se organizaron los búferes en diferentes pestañas.

llinfeng
fuente
0

Cargo buffers "seleccionados" como pestañas para alternar rápidamente (TAB / S-TAB) entre ellos. El marco de los espacios de trabajo encaja aquí, ya que para mí, las pestañas VS pestañas es principalmente lo de la visibilidad. Puedo abrir archivos importantes / de trabajo en ventanas y pestañas y ocultar los que actualmente no necesito utilizar en segundo plano sobre la marcha sin tener que recordar rutas o tomar tiempo para buscarlas y cargarlas nuevamente una vez que surja la necesidad. Esto permite manejar varias tareas o proyectos en una sesión VIM, supongo que esto solía ser importante en máquinas con poca memoria, pero también es bueno para concentrar todas las tareas de edición en un marco de aplicación. También tengo atajos de cambio de búfer configurados en Ctrl-Derecha / Izquierda para que también pueda cambiar rápidamente a través de varios búferes.

En pocas palabras, solo se puede dividir en algunas ventanas para sus usos tanto como el estado de la pantalla, pero se pueden mantener múltiples configuraciones de ventanas en varias pestañas, expandiendo así el espacio de trabajo y mejorando el flujo de trabajo permitiendo la división conveniente de tareas complicadas que giran en más de un archivo .

Para los archivos de intercambio, puede decirle a VIM que los mantenga en una carpeta de su designación. Para este uso :set directory.

eleg
fuente