¿Por qué los expertos de Vim prefieren los búferes a las pestañas?


No entiendo los búferes. Cuando abro 3 archivos en la misma pestaña y cierro mi ventana, generalmente me molesta saber la próxima vez que abro uno de esos archivos que hay extraños archivos de intercambio persistentes y me dan mensajes molestos. Pero una y otra vez leí que estas cosas son el nirvana de la productividad que me estoy perdiendo y que las pestañas se hicieron para que las usaran los plebeyos.

Así que te pregunto, el experto de Vim: ¿cuáles son las ventajas de usar buffers 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 gting alrededor? Creo que debe ser más profundo que esto.

 158
Author: Vadim Kotov, 2014-11-03

7 answers

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

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

El problema con los búferes y pestañas es uno de confusión , causada por una combinación de independientes hecho.

  1. La mayoría de los editores de texto e IDE "modernos" usan una metáfora tab para representar archivos cargados. Esa metáfora actúa como un sistema de información - muestra al usuario qué archivos se abren y su estado - y como un dispositivo interactivo - permite al usuario manipular (reordenar, seleccionar, cerrar those) 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. Introducción de Vim tab pages 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 secciones :help sugiere que las páginas de pestañas podrían o deberían usarse como proxies de archivos.

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

  3. Sin :set hidden, que está desactivado por defecto y no es muy fácil de encontrar, Vim hace que sea imposible cambiar a otro buffer sin escribir el actual o abandonar sus cambios. Los nuevos usuarios, inconscientes de esa opción, no tienen más remedio que recurrir al uso intensivo de Windows o a la función "similar a una pestaña" más cercana que puedan encontrar: páginas de pestañas.

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

En Vim, las páginas de pestañas son una abstracción construida sobre ventanas, a su vez una abstracción construido sobre topes. Cada nuevo nivel agrega características útiles, pero restringe su flujo de trabajo.

El"camino del búfer"

Con un flujo de trabajo basado en búfer, los archivos con los que está trabajando se distribuyen a lo largo de una sola dimensión. Puede recorrer 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 dirigirlos con bastante facilidad. Básicamente no hay fricción.

  1. Ocho búferes abiertos, solo uno visible:

    Ocho buffers abiertos

  2. Conmutación por número:

    Cambio por número

  3. Cambiando por nombre:

    Cambiar por nombre

Los buffers son proxies de archivos de Vim. Si piensas en términos de archivos, piensas en términos de búferes.

El"camino de la ventana"

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

Con ventanas, 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.

Windows tiene su uso, como se describe a continuación, pero no tienen lo que se necesita para reemplazar los búferes en el flujo de trabajo de nadie.

Aquí estoy trabajando en un esquema de color 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 color, y el de abajo es donde trabajo:

Trabajando en un esquema de color

Windows no está diseñado como proxies de archivos y no se puede convertir en uno: son "contenedores" o "viewports" diseñados para ofrecerle una vista en un búfer. Ni más, ni menos.

El"tab way"

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

Todavía trabajando con los mismos archivos que los anteriores, la tabla ocupa un espacio significativo para prácticamente ningún beneficio. Todos mis archivos y todas mis pestañas se llaman javascript*.vim así que no puedo hacer 3gt y estar seguro 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 muy bien ser la muy inútil pero perfectamente lógica [Quickfix List] Since Ya que no hay una forma práctica de vincular un archivo/búfer a una página de pestañas, básicamente solo queda una forma práctica de navegar entre páginas/búferes/archivos de pestañas: ciclismo.

Y sí, mi tabline se clobbered con solo 8 fichas, imagínese si tuviera 20!

  1. Ocho búferes abiertos en ocho tab pages (incorrecto)

    Equivocada

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

    Derecho

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

En conclusión

"Expertos Vim" (supongamos que puedo hablar como si fuera uno) no prefiera los búferes sobre pestañas: simplemente usan Vim como fue diseñado y son 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 windows porque así es como deben usarse;

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

 348
Author: romainl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 19:00:44

Solía mantener cada búfer en una pestaña separada, pero me cansé de constantemente gt y gT - en todas partes.

También sentí que los buffers 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 como :e src/**/F*Bar.js) para abrir un búfer
  • Me doy cuenta de que necesito abrir otro archivo. Use :e para eso también. Si quiero alternar entre esto búfer y la búfer voy a utilizar :sp o :vsp para que se abra en una ventana separada.
  • Repita hasta que tenga los 3-5 archivos que cambiaré entre el uso de las técnicas en la lista con viñetas anterior para volar entre sus búferes.
  • Si quiero "volver a empezar" con mis búferes, simplemente cierre Vim y vuelva a abrir.

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

 36
Author: Jonathan.Brink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 00:37:49

La desventaja de las pestañas es que solo puedes ver el contenido de una a la vez. Así que si los usas como en un navegador, estás perdiendo la oportunidad de ver varios búferes uno al lado del otro, o incluso ver partes separadas del mismo archivo en divisiones. Por lo tanto, muchos recomiendan usar pestañas solo para separar diferentes espacios de trabajo (por ejemplo, tener uno para un proyecto Java, otro para una lista de tareas pendientes, un tercero para hackear un script en el lateral).

Los problemas que describe hacen que parezca que está usando Vim Equivocada. Cualquiera de los dos tiene (en su mayoría) una sola instancia dedicada. Luego, los búferes que se ocultan simplemente "reaparecerán" si los vuelve a editar (y ahora puede usar la lista de búfer para recuperarlos), y no habrá mensajes de archivo de intercambio. O bien, use instancias Vim separadas por proyecto / archivo / sesión de edición, pero luego haga que sea un hábito completar :quit cada instancia cuando haya terminado con el archivo.

 10
Author: Ingo Karkat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-03 08:05:06

Otro consejo, cuando se utiliza el nombre del búfer como argumento para :buffer, no es necesario especificar el nombre completo. Sin embargo, si más de un búfer coincide con el argumento dado, entonces los búferes no se cambiarán.

Cualquier fragmento del nombre del búfer puede ser usado para coincidir. Por ejemplo, si tiene los búferes request_manager.java y queue_manager.java entonces :buffer que matches o :b que` ambos, pero cambiará a queue_manager.java ya que coincide al principio.

 6
Author: Julius Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 19:38:03

Uso pestañas, Ctrl-P y sesiones Vim en mi flujo de trabajo y tengo desde hace más de un año:

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

  • Utilizo sesiones 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 se tarda un poco para procesar todos los archivos para encontrar.

 3
Author: ShangoThrax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-05 18:22:05

Añadir estos a su .vimrc y empezar a amar buffers:

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

De esa manera puedes ir hacia adelante / atrás a través de ellos en modo normal a través de la pestaña /ShiftTab .

 0
Author: sjas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-18 10:34:09

Cargo los búferes "seleccionados" como pestañas para alternar rápidamente (TAB/S-TAB) entre ellas. El marco de workspaces encaja aquí como para mí buffers VS tabs es sobre todo lo de la visibilidad. Puedo hacer estallar archivos importantes / de trabajo en windows 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 buscar y cargarlos de nuevo 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 accesos directos de desplazamiento de búfer establecidos en Ctrl-Derecha / Izquierda para que pueda cambiar rápidamente a través de varios búferes también.

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

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

 0
Author: elig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-31 17:39:27