2009-05-21 26 views
38

he puesto algunos alias en mi .bashrc para abrir un grupo de archivos de proyecto en gvim, cada uno en su propia pestaña:Abrir archivos en Gvim existente en múltiples (nuevo) pestañas

gvim -p <list of file names using absolute paths> 

Todo esto está muy y bueno, excepto que hay varios grupos de archivos en los que me gustaría moverme en cualquier momento dado (mi proyecto actual usa Ruby on Rails, eso lo explica). Lo que sería realmente increíble es si pudiera agregar las nuevas pestañas a una instancia existente de gvim. En mi último puesto trabajé en Vista; Lo solucioné abriendo un montón de pestañas vacías en gvim, lo que me permitió hacer clic con el botón derecho en un nombre de archivo y elegir "Abrir en gvim sin nombre existente". Ahora uso Ubuntu y no hay tal cosa en el menú contextual. ¿Hay alguna forma de hacer esto desde la línea de comando?

Respuesta

64

Si vim se compila con la opción clientserver, puede hacerlo. Iniciar la instancia vim con el siguiente indicador:

$ gvim --servername GVIM # GVIM is the server name. It can be anything. 

Para abrir más pestañas en este caso, puede ejecutar el comando:

$ gvim --servername GVIM --remote-tab file1 file2 file3 ... 

La característica ClientServer en vim es muy práctico. No está limitado a abrir archivos; se puede usar para enviar cualquier comando a vim usando la línea de comando. Por ejemplo, para cerrar una instancia remota vim, puede utilizar:

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>' 
+0

ver -h vim para otras opciones remotas –

+0

he añadido mi opción -geom al comando inicial para iniciar gvim. También tuve que eliminar la opción -p (para pestañas) de todos los alias. ¡Entonces funcionó genial! – kajaco

+0

Bueno, funciona muy bien, excepto por una cosa: si tengo más de una instancia de gvim, la primera es el servidor uno y la segunda (o más) creada desde la CL o haciendo clic en un icono o seleccionando un archivo para abrir con gvim, luego intento abrir una pestaña en el servidor uno (tengo los alias configurados como se menciona), las nuevas pestañas _todas_ entran en la * segunda * instancia, sin importar cómo se creó o qué instancia estuvo activa por última vez. ¿Algunas ideas? – kajaco

18

Desde el interior de Gvim, tipo :tabe {file_name}. Esto abre el archivo nombrado en una nueva pestaña. Si no es aficionado a escribir los nombres de archivo largos, intente esto:

:tabnew 
:e . 

Esto abrirá una nueva página de pestaña en blanco y abrir un explorador de archivos. Puede hacer clic en el mouse o usar el teclado. Haga clic o presione la tecla Intro en el archivo que desea abrir. Intente usar el teclado para colocar el cursor sobre el archivo que desea abrir y luego presione 't'. Esto abre el archivo seleccionado en una nueva pestaña, manteniendo el buscador de archivos abierto en la primera pestaña. Esta podría ser una forma rápida de abrir un grupo de archivos.

Hay muchas cosas que puede hacer con las pestañas que pueden hacer la vida más fácil. Para acceder a la sección correspondiente en el manual de ayuda en línea de Vim, ingrese :h tabpage.

+0

Este es también un gran truco para abrir un archivo en una instancia existente de gvim. Lo uso para cosas que no necesito con frecuencia para crear un alias, y cuando solo quiero un archivo en lugar de una gran cantidad de ellos. – kajaco

+1

¡Espera, hay más! Puede hacerlo con un solo comando: : tabnew% –

+0

Dado el comando ': tabnew%', Gvim abrió una nueva pestaña que contiene el búfer (nombre de archivo) de la pestaña anterior desde la que ingresé el comando. ¿Es este el comportamiento correcto? –

1

Hay camino:

n*.cpp|tab ba 

o si se quiere dividir:

n*.cpp|sba 

Si desea saber más:

:help ba 

y no sé lo que es n, pero no funcionaría sin él.

usuarios
5

de Linux pueden utilizar este tipo de script:

#!/bin/bash 

ANS=`pgrep -fx "gvim --servername GVIM"` 

echo [email protected] 

if [[ ! $ANS ]]; then 
    gvim --servername GVIM 
fi 

if [[ $1 ]]; then 
    gvim --servername GVIM --remote-tab "${@}" 
fi 

Y entonces el archivo de edición gvim.desktop para el uso de este script:

Exec=/home/user/bin/my_gvim_script.sh %F 
9

¿Quiere que su menú contextual de Windows para que pueda abrir archivos en una nueva pestaña de la ventana de gvim actualmente abierta?

Guárdelo como un archivo llamado temp.reg y haga doble clic en él para agregar la configuración a su registro. Asegúrese de modificar la ruta a vim si la suya es diferente.

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim] 
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim\command] 
@="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\"" 

que ahora tendrá un menú contextual como esto:

vim context menu

+0

La pregunta era cómo hacer esto en Ubuntu. – kajaco

+1

si el usuario de Ubuntu es lo suficientemente inteligente como para elegir la línea de comando de la respuesta, también podría funcionar para él. (Comprobado en Arch Linux :)) – Slava

1

Aquí está mi gvim script de arranque. Es una extensión de respuestas anteriores. Asegura una sola instancia gvimgvim se ejecutará cuando se llama en todas las circunstancias:

  • gvim se llama sin nombre cuando no hay gvim instancia se está ejecutando; gvim se inicia.
  • gvim se llama sin nombre de archivo en presencia de una instancia gvim; Se abre una nueva pestaña vacía.
  • gvim se llama con un nombre de archivo con o sin una instancia gvim; se abre una pestaña que muestra el archivo.

Esto imitará el comportamiento estándar de otros editores.

#!/bin/bash 
exec=/usr/bin/gvim #the path to gvim 
if [ $# -eq 0 ] 
    then # no filename given 
    if [ -z $($exec --serverlist) ] 
     then # no filename given and no gvim instance 
     $exec -f --servername GVIM > /dev/null 2>&1 
     else # no filename given, but a gvim instance exists 
     $exec -f --servername GVIM --remote-send ':tabnew<CR>' > /dev/null 2>&1 
    fi 
    else # filenames given 
    $exec -f --servername GVIM --remote-tab "[email protected]" > /dev/null 2>&1 
fi 
Cuestiones relacionadas