Cuando necesito trabajar en diferentes proyectos al mismo tiempo, tengo el siguiente flujo de trabajo:
- Creo una pestaña para cada proyecto.
- En cada pestaña abro los archivos que quiero editar, lo que genera varios búferes.
- Opcionalmente, si necesito ver dos (o más) archivos al mismo tiempo, creo ventanas divididas, así que tengo una pestaña que contiene diferentes ventanas que muestra un búfer.
Para navegar entre mis buffers que realmente no uso :ls
y en su :b [name or number of buffer]
lugar creé algunas asignaciones convenientes que me permiten cambiar entre los buffers con :bnext
y:bprevious
Esta forma de trabajar es bastante buena, pero algo me molesta: los buffers se comparten entre las pestañas.
Si abro file1
y file2
en tab1
y file3
adentro tab2
, si tab1
uso varias veces :bnext
, veré file3
en esta pestaña lo que no quiero. El flujo de trabajo que me gustaría obtener es el siguiente :
- Inicie vim (tengo una primera pestaña con un búfer):
$ vim foo
- Agregue un búfer a esta pestaña:
:e bar
- Abra una nueva pestaña y cambie a ella:
:tabnew
- Abra un nuevo búfer en esta pestaña:
:e baz
- Si me quedo en este búfer y hago
:bnext
o:bprevious
me quedaré en elbaz
búfer (ya que es el único en esta pestaña) - Si entro en la pestaña anterior
:tabprevious
y ejecuto varias veces:bnext
, solo cambiaré entrefoo
ybar
buffers, pero no verébaz
Así que aquí viene mi pregunta: ¿es posible vincular un conjunto de buffers a una pestaña y hacer que vim no permita el acceso a algunos buffers desde otra pestaña que no sea en la que están destinados?
Nota: Soy consciente de que usar :b [myBuffer]
sería una manera de mantener un búfer en una pestaña, pero cuando tengo 3 o 4 archivos para editar, siento que soy realmente más rápido usando mis asignaciones que escribiendo el nombre del búfer (incluso si puedo escriba solo algunos caracteres para que coincidan con el nombre del búfer) .
alt+tab
(o peor aún, el mouse) se siente mucho menos fácil que cambiar de pestaña dentro de vim.Respuestas:
Mhh, no encontré ningún complemento, pero puedes escribirlo tú mismo. Necesita aprender vimscript para esto. Acabo de implementar la funcionalidad que puede cambiar entre buffers en una pestaña (aún no se elimina). Puede copiar esto en su vimrc:
Cierre su vimrc y ábralo nuevamente. Para encontrar el siguiente búfer simplemente use
o defina su propio comando o mapeo. Esto funcionará siempre que no cierre ni elimine una pestaña o búfer. Tampoco funcionará para múltiples buffers. Requeriría un poco más de trabajo agregar esas características, pero definitivamente es factible.
fuente
Los buffers son globales y no hay nada que pueda hacer al respecto, excepto escribir su propia capa de abstracción en la parte superior de las páginas de pestañas, ventanas y buffers. La respuesta de philolo1 muestra un enfoque razonable del problema, pero encontrará rápidamente los límites de dicha "solución" y necesitará duplicar muchas funciones integradas como
:bufdo
el archivo alternativo ...Los "argumentos", por otro lado, pueden ser locales en una ventana, por lo que pueden ser más útiles en su flujo de trabajo que los "buffers" (en el sentido más estricto de la palabra):
Los argumentos no son tan flexibles como las memorias intermedias, pero pueden proporcionar una base más confiable para su flujo de trabajo.
Pero trabajar en cada proyecto en su propia instancia de Vim es, en mi opinión, la única solución práctica.
fuente
Entonces, con algo de retraso, creo que he encontrado una respuesta satisfactoria (¡al menos para mí!). Necesitarás dos de los complementos de Shougo:
y un mapa de acceso rápido para usar en lugar de
:ls
, para ver (y seleccionar) solo buffers de la pestaña actual .Por ejemplo, algo como:
Ahora puede moverse por la lista de búferes de pestañas actual (
j
,k
), seleccionar uno (CR
), cancelar (q
), ingresar al modo de "entrada" (insertar) para filtrar rápidamente la selección del búfer escribiendo algunas letras, o incluso presionarTab
para abrir la lista de acciones para el elemento seleccionado actual (por ejemplo, para abrir el búfer por encima del activo actual) - en resumen, usted actúa de manera genérica "Unir".(ver también
:h unite_default_key_mappings
y ayuda de Unite en general).Y ahora para el truco final (pero opcional). Con altercmd , puede crear su propio
ls
comando , habilitado por tabulación, (basado en la funcionalidad Unite anterior):... y cada vez que golpeas
:ls
, Vim realmente correrá tu comando.Tenga en cuenta que tampoco necesitará
:bn
o:bp
, ya que la visualización y selección de los buffers de la pestaña ahora son el mismo comando.fuente
No puedo comentar porque mi cuenta es nueva, lo siento, pero ++++ 1 para ctrl-space.
Me vendieron cuando llegué a la mitad de la ayuda. Ctrlspace tiene una estructura como esta:
Por lo tanto, puede guardar un espacio de trabajo para cada proyecto en el que esté trabajando y luego cargarlo inmediatamente cuando lo desee. Esto significa que cada vez que cierre vim puede guardar todos sus búferes y divisiones de pestañas.
También puedes nombrar tus pestañas. Si eso no es suficiente, también puede cambiar fácilmente los directorios de trabajo y crear marcadores para los directorios que utiliza con frecuencia.
Se conecta muy bien con nerdtree si lo usa (aunque, sinceramente, probablemente ni siquiera sentirá que lo necesita después de una semana con ctrlspace)
Considere este caso de uso:
Tienes un proyecto Implica plantar árboles. Hay árboles frutales y árboles de dinero. Los árboles de dinero contienen dólares y centavos, mientras que los árboles frutales contienen manzanas y naranjas.
En este ejemplo, las manzanas, naranjas, dólares y centavos son "amortiguadores".
Ctrlspace le permite separar manzanas y naranjas en una "pestaña" que puede etiquetar como "fruta". Esta etiqueta aparecerá en la línea de etiqueta en la parte superior de su ventana. Del mismo modo, dólares y centavos van a la pestaña "dinero".
El espacio de trabajo "árboles" guarda toda esta configuración y le permite acceder a ella inmediatamente cada vez que abra vim.
Ahora que soy consciente de su existencia, realmente no puedo imaginar hacer un desarrollo orientado a objetos en vim sin este complemento. Por si acaso, aquí está el enlace: https://github.com/szw/vim-ctrlspace
fuente
Así que finalmente decidí crear mi propio complemento para resolver mi problema, está disponible en github .
Utilicé la idea de @ philolo1 e intenté completarla, en el momento en que escribo esta respuesta todavía es un trabajo en progreso.
EDITAR Ya no mantengo el complemento a medida que mi flujo de trabajo evolucionó y me di cuenta de que vincular los búferes a una pestaña agrega más problemas de los que resuelve.
El complemento une las memorias intermedias a las pestañas: cuando el usuario abre una memoria intermedia, se "almacena" automáticamente en la pestaña y no se puede acceder desde otra pestaña.
La instalación debe ser "amigable para el administrador de complementos" (al menos funciona bien con Vim-Plug and Vundle )
Algunas de las características principales son:
:NextBuf
y:PrevBuf
reemplazar:bn
y:bN
mantener un estado constante de las pestañas:ListBuf
permite enumerar los búferes de manera similar a la:ls
excepción de que están separados en pestañas y un signo permite al usuario ver fácilmente en qué pestaña se encuentra actualmente.:ChangeBuf
aceptar un número de búfer o un nombre de búfer para cambiar de búfer y cambiar de pestaña automáticamente:CloseBuf
:CloseTab
Para otras operaciones, el usuario debe poder usar las funciones integradas (como
:tabopen
,:tabnext
, etc ...)Para cada comando se proporcionan algunas asignaciones predeterminadas y se pueden deshabilitar fácilmente agregando
let g:betterTabsVim_map_keys = 0
a su.vimrc
.También intenté hacer un archivo de ayuda explícito (
:h betterTabs.txt
): aún no está completo, pero los usuarios deberían encontrar el mínimo para usar el complemento.Todavía tengo muchas pruebas que hacer para asegurarme de que el complemento no altere ningún comportamiento nativo.
Finalmente, si alguien quiere ayudar, siempre es posible crear problemas en la página de Github o crear solicitudes de extracción.
fuente
Echa un vistazo a este complemento. Me parece que se adapta perfectamente a tus necesidades. https://github.com/szw/vim-ctrlspace
fuente