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 gt
andar por ahí? Siento que debe ir más profundo que esto.
:split
clic 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.Respuestas:
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.
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.
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
:help
secciones 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.
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.
Ocho buffers abiertos, solo uno visible:
Cambio por número:
Cambio 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:
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*.vim
así que no puedo hacerlo3gt
y 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!
Ocho buffers abiertos en ocho páginas de pestañas (incorrecto)
Dos pestañas para dos tareas específicas (derecha)
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.
fuente
*.c
,*.h
,scripts/*
ytest/**/*.lua
archivos). Dado que mi terminal tiene solo 239 columnas de ancho, el enfoque de "un archivo por pestaña" es imposible de usar.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:
:b
. Te vuelves sorprendentemente rápido en esto. Ver vim, cambiar rápidamente entre archivos usando Vanilla Vim (sin complementos)Aquí está mi flujo de trabajo típico:
:e
(generalmente con una expresión regular:e src/**/F*Bar.js
) para abrir un búfer:e
para eso también. Si quiero alternar entre este búfer y el búfer abierto actualmente, lo usaré:sp
o:vsp
para abrirlo en una ventana separada.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.
fuente
gT
era el comando para cambiar de pestaña, había estado buscando el reemplazoctrl+tab
. Así que gracias por ayudar realmente a un nuevo usuario en lugar de solo hacer que se sientan estúpidos.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).ctrl N
octrl 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!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
:quit
cada instancia cuando haya terminado con el archivo.fuente
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.java
yqueue_manager.java
luego:buffer que
o:b que
coincide con ambos, pero cambiará a queue_manager.java como coincide al principio.fuente
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.
fuente
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:
:e
ls
TODO el tiempo cuando empiece a obtener un buen modelo mental (no puede asimilar lo que no puede ver, mental o literalmente):q
sopla:b
en 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-filename
primero.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
commitMessage
archivo que anoto mientras trabajo para que no tenga que pensar demasiado cuando llegue el momento de realizar una confirmación.gt
es más rápido que:b com<enter>
(si te sientes con suerte, de lo contrario:b com<tab><enter>
):tabe commitMessage
gt
ogT
también un favorito de la memoria muscularLas 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,
:e
es decir, un archivo de registro, generalmente solo extraigo el contenido en el archivo actual y lo trato allí).:vsp
oC-w v
abre una división vertical, es decir, izquierda | bien, luego use:b
o:e
para obtener el archivo que desea:sp
oC-w s
abrir una división horizontal, es decir, arriba / abajoC-w C-w
es decir, doble Ctrl-w, te rota alrededor de las ventanas disponiblesC-w c
cerrar ventana actualC-w o
cierre todas las demás ventanas, manténgase actualizado SOLOfuente
:b#
y:bd#
!Agregue estos a su
.vimrc
y comience a amar los amortiguadores:De esa manera, puede avanzar / retroceder en modo normal a través de Tab/ ShiftTab.
fuente
<C-I>
. Mapa<C-Tab>
en su lugar si realmente quieres.:n
y se:N
relacionan con la lista de argumentos, no abren buffers. Te gustaría:bn
y:bp
(:bnext
y:bprev
). El intacto de tpope proporciona asignaciones]b
y[b
para 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.Ctrl + Tab
ya que eso es lo que usan la mayoría de los otros editores y navegadores GUI.Me gustaría sugerir una implementación brillante de hace un buen número de años: kien / tabman.vim . Aclara lo siguiente:
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.
fuente
Tabs and Buffers son dos estándares diferentes en Vi. Lea estas tres definiciones:
Lea este artículo para obtener más https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/
fuente
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
.fuente