¿Cómo edito un búfer existente en una nueva pestaña en vim?
51
Supongamos que he empezado vim así:
vim foo bar
Ahora decido que quiero cada uno de esos archivos en su propia pestaña. ¿Hay alguna manera de hacerlo sin salir de vim y agregar la -popción a mi línea de comando?
Probablemente muchos de ustedes estén buscando lo tabe %que se menciona en la respuesta de liuyang1 a continuación.
Mateusz Piotrowski
1
@MateuszPiotrowski Como mencioné en este comentario a esa respuesta , :tabe %no funciona con buffers que no tienen una ruta de archivo válida. :tab sbfunciona todo el tiempo.
JoL
Respuestas:
30
Cuando inicia vim así, no obtiene un cliente vim, el editor de texto está utilizando el terminal o el indicador de cmd: los dos archivos están en dos buffers diferentes. Use :lspara enumerar los buffers:
:ls
1 %a "foo" line 6
2 "bar" line 0
El% a es el búfer activo. Puede usar :b2para cambiar al búfer 2 o usar para pasar al :bnsiguiente o :bpal anterior. Prefiero (CTRL-W v) dividir las ventanas verticalmente, en lugar de (CTRL-W s), que se divide horizontalmente.
Si tiene 2 archivos cargados y no tiene pestañas (todavía), puede hacerlo :tabnewy en el nuevo tipo de pestaña:b2
Si desea tener siempre los buffers cargados en sus propias pestañas, consulte este artículo .
Entonces, ¿ya ha iniciado vim de manera que tenga sus archivos en el cliente vim, no en un shell de cmd / terminal?
DaveParillo el
1
No estoy seguro de lo que quieres decir. Uso el shell para iniciar vim como se describe anteriormente y luego tengo un vim en ejecución.
INNAM
Ah! Supongo que nunca entendí que los buffers no son locales para las pestañas. Siempre pensé (sin pensar mucho) que cada pestaña tiene su propia lista de búfer.
innaM el
En mi máquina, vimlanzaré un editor dentro del shell. Para obtener la interfaz gráfica de usuario vim tengo que usar gvim. Y tiene razón: los buffers son globales para la aplicación vim.
DaveParillo el
47
¿Desea abrir un búfer en una nueva pestaña?
Divide la pantalla (Ctrl-W s), toma una ventana y Ctrl-W T
Hmm No es exactamente lo que tenía en mente, pero no está mal para empezar. Ctrl-w TAún no lo sabía . Por supuesto, la primera pestaña todavía tendrá dos buffers de esa manera.
innaM el
No. Después de dividir la pantalla en dos ventanas y abrir una de ellas en una pestaña nueva, desaparece de la primera pestaña. No permanecerá (al menos no en mi gvim72). En lo que respecta a los buffers, no están conectados a ventanas / pestañas ... son más como memoria donde vim almacena el contenido del archivo.
Torre
Ah! Tienes razón. Estaba malinterpretando la salida de :ls.
innaM el
Además, ctrl-w V divide la ventana verticalmente.
Shannon Nelson el
1
CTRL-w v es el comando correcto para dividir ventanas verticalmente
JRM
27
Puede lograr esto combinando el tabcomando con el sb[uffer]comando.
Primero, necesitará conocer la identificación del búfer que desea abrir en una nueva pestaña. Puedes descubrir esto con el lscomando:
:ls
1 %a "foo" line 1
2 "bar" line 0
Una vez que tenga la identificación, puede abrirla fácilmente en una nueva pestaña usando:
:tab sb 2
El sbcomando normalmente abre el búfer dado en una nueva ventana dividida, pero el tabcomando hace que se abra en una nueva pestaña.
El tabcomando también le permite especificar en qué parte de la lista de pestañas se debe crear la nueva pestaña. Por ejemplo, :0tab sb 2la nueva pestaña 'barra' aparecerá al comienzo de la lista en lugar de después de la pestaña actual.
No necesita el número de búfer, dele una parte inequívoca del nombre del búfer y VIM hace el resto por usted.
postre
1
Esta fue la respuesta que estaba buscando y necesitaba. ¡Estaba consternado cuando :tab buffer part-of-nameno abrí una nueva pestaña! Pero :tab sb part-of-namefuncionó como un encanto. ¡¡¡¡Gracias!!!!
Sukima
Esta no es la pregunta exacta de OP, pero era exactamente lo que estaba buscando :)
jackcogdill
25
Una mejor manera de lograr lo que OP solicitó es esto:
:bufdo tab split
Esto abrirá cada búfer en una pestaña propia, sin importar cuántos haya. Si usa tanto, es fácil convertirlo en un mapeo en su .vimrc. Combinado con algo como este pequeño complemento vim, lo siguiente abrirá cada elemento desde :grep(o : Ack ) en una pestaña propia:
:grep foo
:QuickFixOpenAll
:bufdo tab split
Por supuesto, al recurrir a un complemento, sería bastante fácil modificarlo para abrir el contenido de la lista de soluciones rápidas directamente en pestañas.
ACTUALIZACIÓN : Realmente tengo que dar un agradecimiento al comentario de ggustafsson a continuación. Es de lejos la mejor respuesta del lote e ilustra bellamente la tendencia de Vim hacia el comportamiento compositivo. La sugerencia es:
:tab sball
Vale la pena buscar la ayuda de Vim para : tab y : sball para ver qué está pasando aquí.
Un enfoque similar de una edición anterior, para la posteridad, es :bufdo execute "tabnew %". Creo que el nuevo enfoque es un poco más claro.
John Whitley
Una advertencia: si el búfer de inicio en vim no está vacío, esto parece abrir el último búfer dos veces. Publicaré una actualización si encuentro una solución simple.
John Whitley
12
:tab sballParece funcionar mejor.
ggustafsson
6
1. Abra dos archivos en Vim.
$ vim foo bar
2. Verifique los números de tampones.
: ls
1% un "foo"
2 "barra"
3. Encadena dos comandos: tabnewpara abrir una nueva pestaña y b <buffer_number>cargar el búfer deseado en la pestaña.
El problema con el paso 3 es que primero crea una nueva pestaña con un búfer vacío, y luego abre el búfer 2, lo que resulta en un búfer sin título adicional en la lista de búferes. Mejor usar:tab sb 2
rkjnsn
1
@rkjnsn, debe publicar eso como respuesta: responde mejor a la pregunta '¿cómo edito un búfer existente en una nueva pestaña en vim?'
JonnyRaa
1
@JonnyLeeds hecho.
rkjnsn
4
Solo agrega un punto que otros chicos no mencionaron.
ventana actual a nueva pestaña
Si tiene varias ventanas, <C-W>Tmoverá esta ventana a una nueva pestaña. Sin embargo, este acceso directo solo para "Ventana", no "buffer". Si prefiere este estilo, :spo <C-W>spara duplicar el búfer actual a una ventana más, entonces <C-W>Tmuévalo a una nueva pestaña.
4 pulsaciones de teclas o 7 pulsaciones de teclas.
buffer actual a la nueva pestaña
:tabe % para abrir una nueva pestaña para el búfer actual.
7 pulsaciones de teclas.
buffer a nueva pestaña
Si usa el complemento CtrlP, también podría usar "CtrlPBuffer", luego con <C-t>acceso directo para abrirlo con una nueva pestaña. Este estilo, fácilmente para cambiar a diferentes buffers.
Con acceso directo de "CtrlPBuffer", 4 pulsaciones de teclas o más.
:tabe %es lo que he estado buscando por mucho tiempo, gracias!
pevik
No, :tabe %realmente no abre una nueva pestaña para el búfer actual. Lo que sucede es que %se expande a la ruta del archivo del búfer actual y :tabeabre esa ruta. Vim verá que estás intentando abrir un archivo que ya tienes abierto y reutilizará el búfer que tienes. Esto significa que esto no funciona con buffers que no tienen ruta de archivo. Si abre un nuevo archivo con :newy no lo ha guardado, no puede ponerlo en una nueva pestaña con esto. El verdadero comando que necesita es lo que rkjnsn puso en su respuesta: :tab sb %o más breve::tab sb
tabe %
que se menciona en la respuesta de liuyang1 a continuación.:tabe %
no funciona con buffers que no tienen una ruta de archivo válida.:tab sb
funciona todo el tiempo.Respuestas:
Cuando inicia vim así, no obtiene un cliente vim, el editor de texto está utilizando el terminal o el indicador de cmd: los dos archivos están en dos buffers diferentes. Use
:ls
para enumerar los buffers:El% a es el búfer activo. Puede usar
:b2
para cambiar al búfer 2 o usar para pasar al:bn
siguiente o:bp
al anterior. Prefiero (CTRL-W v) dividir las ventanas verticalmente, en lugar de (CTRL-W s), que se divide horizontalmente.Si tiene 2 archivos cargados y no tiene pestañas (todavía), puede hacerlo
:tabnew
y en el nuevo tipo de pestaña:b2
Si desea tener siempre los buffers cargados en sus propias pestañas, consulte este artículo .
fuente
vim
lanzaré un editor dentro del shell. Para obtener la interfaz gráfica de usuario vim tengo que usargvim
. Y tiene razón: los buffers son globales para la aplicación vim.¿Desea abrir un búfer en una nueva pestaña?
Divide la pantalla (Ctrl-W s), toma una ventana y Ctrl-W T
fuente
Ctrl-w T
Aún no lo sabía . Por supuesto, la primera pestaña todavía tendrá dos buffers de esa manera.:ls
.Puede lograr esto combinando el
tab
comando con elsb[uffer]
comando.Primero, necesitará conocer la identificación del búfer que desea abrir en una nueva pestaña. Puedes descubrir esto con el
ls
comando:Una vez que tenga la identificación, puede abrirla fácilmente en una nueva pestaña usando:
El
sb
comando normalmente abre el búfer dado en una nueva ventana dividida, pero eltab
comando hace que se abra en una nueva pestaña.El
tab
comando también le permite especificar en qué parte de la lista de pestañas se debe crear la nueva pestaña. Por ejemplo,:0tab sb 2
la nueva pestaña 'barra' aparecerá al comienzo de la lista en lugar de después de la pestaña actual.fuente
:tab buffer part-of-name
no abrí una nueva pestaña! Pero:tab sb part-of-name
funcionó como un encanto. ¡¡¡¡Gracias!!!!Una mejor manera de lograr lo que OP solicitó es esto:
:bufdo tab split
Esto abrirá cada búfer en una pestaña propia, sin importar cuántos haya. Si usa tanto, es fácil convertirlo en un mapeo en su .vimrc. Combinado con algo como este pequeño complemento vim, lo siguiente abrirá cada elemento desde
:grep
(o : Ack ) en una pestaña propia:Por supuesto, al recurrir a un complemento, sería bastante fácil modificarlo para abrir el contenido de la lista de soluciones rápidas directamente en pestañas.
ACTUALIZACIÓN : Realmente tengo que dar un agradecimiento al comentario de ggustafsson a continuación. Es de lejos la mejor respuesta del lote e ilustra bellamente la tendencia de Vim hacia el comportamiento compositivo. La sugerencia es:
Vale la pena buscar la ayuda de Vim para : tab y : sball para ver qué está pasando aquí.
fuente
:bufdo execute "tabnew %"
. Creo que el nuevo enfoque es un poco más claro.:tab sball
Parece funcionar mejor.1. Abra dos archivos en Vim.
2. Verifique los números de tampones.
3. Encadena dos comandos:
tabnew
para abrir una nueva pestaña yb <buffer_number>
cargar el búfer deseado en la pestaña.fuente
:tab sb 2
Solo agrega un punto que otros chicos no mencionaron.
Si tiene varias ventanas,
<C-W>T
moverá esta ventana a una nueva pestaña. Sin embargo, este acceso directo solo para "Ventana", no "buffer". Si prefiere este estilo,:sp
o<C-W>s
para duplicar el búfer actual a una ventana más, entonces<C-W>T
muévalo a una nueva pestaña.4 pulsaciones de teclas o 7 pulsaciones de teclas.
:tabe %
para abrir una nueva pestaña para el búfer actual.7 pulsaciones de teclas.
Si usa el complemento CtrlP, también podría usar "CtrlPBuffer", luego con
<C-t>
acceso directo para abrirlo con una nueva pestaña. Este estilo, fácilmente para cambiar a diferentes buffers.Con acceso directo de "CtrlPBuffer", 4 pulsaciones de teclas o más.
fuente
:tabe %
es lo que he estado buscando por mucho tiempo, gracias!:tabe %
realmente no abre una nueva pestaña para el búfer actual. Lo que sucede es que%
se expande a la ruta del archivo del búfer actual y:tabe
abre esa ruta. Vim verá que estás intentando abrir un archivo que ya tienes abierto y reutilizará el búfer que tienes. Esto significa que esto no funciona con buffers que no tienen ruta de archivo. Si abre un nuevo archivo con:new
y no lo ha guardado, no puede ponerlo en una nueva pestaña con esto. El verdadero comando que necesita es lo que rkjnsn puso en su respuesta::tab sb %
o más breve::tab sb