2012-09-29 29 views
15

No puedo ejecutar gvim desde cygwin. Cuando intento abrir un nuevo archivo con:¿Cómo ejecutar windows gvim from cygwin?

nombre de fichero gvim gvim abre un archivo con 'Sin Nombre' y de error como:

Error detected while processing command line 
E492: Not editor command: C:\cygwin\home\chandan\l 
Press enter or type command to continue 

Más problemático es que no puedo abrir archivo existente en la trayectoria

>which gvim muestra /usr/bin/gvim

he puesto alias gvim=/cygdrive/c/Program\Files\(x86\)/Vim/vim73/gvim.exe todavía

Respuesta

6

encontrado este hilo, I encontrar la respuesta de jens inaceptable. No pedimos que nos digan que no lo hagamos. No me gustaban las otras respuestas, siempre había alguna peculiaridad, como configuraciones no utilizadas o una ventana de línea de comando extra apareciendo. Hice algunas excavaciones y esto funciona para mí. Sin caja de línea de comando extra para nada y usa mi configuración de gvim adecuada.

alias gvim='HOME=/cygdrive/p/ cygstart /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim74/gvim.exe' 

Simplemente necesita modificar el INICIO al suyo. Para averiguar qué poner allí, ejecuta gvim desde windows y luego ingresa "echo $ HOME" y presiona enter en mi caso muestra P: \ para que se traduzca en/cygdrive/p/

También si tu gvim.exe está en un directorio/versión diferente que necesitará ajustar.

Ahora cuando escribo 'gvim script.sh' en un símbolo del sistema cygwin, lanza gvim con el archivo, ¡todo bien y limpio!

ACTUALIZACIÓN

He encontrado un poco mejor manera de hacer esto. Usar el alias estaba atando mi sesión de la que ejecuté el gvim, quería que se iniciara como un proceso separado, usar "gvim &" es poco elegante ya que enumera el número de trabajo cuando se inicia y muestra una línea "terminada" cuando se completa. Soy demasiado quisquillosa, así que descubrí cómo hacer que todo esté ordenado usando una función.

Simplemente agregue esto a su archivo .bash_functions, se basa en la sección anterior relacionada con el directorio inicial y el uso de barra diagonal inversa.

gvim() { 
    ORIGHOME=$HOME 
    HOME=/cygdrive/p/ 
    /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim74/gvim.exe $1 & disown 
    HOME=$ORIGHOME 
} 2>/dev/null 

ACTUALIZACIÓN 2 para los usuarios babun!

bien ya haber luchado con este principio que haber terminado el desguace del cygwin instalación original a favor de babun que parece ser un montaje menos problemático para aquellos que quieran funcionalidad de Linux en Windows sin un verdadero virtual. Por supuesto, mi script de inicio de gvim se rompió, y tuve que hacer lo siguiente en mi archivo .zshrc (babun usa zsh, al principio me resistí y lo cambié a bash pero luego cedí ya que pensé que debían tener una razón, y lo hicieron, yo al igual que)

gvim() { 
    OLD_HOME=$HOME 
    OLD_VIMRUNTIME=$VIMRUNTIME 
    export HOME=/cygdrive/c/Users/gmitchell/ 
    export VIMRUNTIME="C:\Program Files (x86)\VIM\vim74" 
    TARGET=$(cygpath -w $1) 
    (/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim74/gvim.exe $TARGET &) 
    export HOME=$OLD_HOME 
    export VIMRUNTIME=$OLD_VIMRUNTIME 
} 

* Nota: los apoyos curvos circundantes() detiene el ID de tarea de echar a perder su cáscara limpia, y ya no necesita el "repudian"

PS La única molestia que queda con esto ahora es que no puedes "salir" del shell babun hasta que todas las instancias gvim que hayas lanzado estén cerradas. Tal vez alguien pueda darse cuenta de eso. He intentado. Cuando escribe exit, simplemente se cuelga allí hasta que haya salido de todos los gvims.

+0

¡Gracias por su irritabilidad! Esto funciona como yo quisiera, con un inconveniente: HOME se deja configurado de la manera que gvim quiere, no de la manera que mi cygwin shell quiere. Además, creo que para C: \ P, querrás usar '/ cygdrive/c/P'. – jspencer

+0

Tiene razón, habría sido/cygdrive/c/P, pero cometí un error cuando lo tipeé de alguna manera, estaba mostrando P: \ ya que mi homedir de Windows se configura en una unidad P. No había notado ese problema con cygwin vs gvim home settings, solo lo probé y está en lo correcto, deja mi shell cygwin con change $ HOME, arreglaré mi script para llevar el $ HOME original a través del comando. – low351

+0

@jspencer, acabo de notar que ha publicado una corrección, bien hecho. Gracias por ser tan quisquilloso como yo :) Estoy usando tu versión ... – low351

9

Hazte un favor, no intentes ejecutar un gvim de windows de cygwin. Es probable que el conjunto de variables de entorno sea completamente diferente, y el dolor de los separadores de directorios de barras invertidas, los espacios en blanco en los nombres de archivos, la incapacidad de comprender/rutas de cygwin hace que este ejercicio sea inútil.

Entonces, ¿qué? Instale la versión cygwin de gvim y olvídese de todos estos problemas.

+0

Gracias Jens. Después de> startxwin, puedo abrir archivos con gvim en una nueva ventana. Pero el archivo .gvimrc que está en mi directorio personal no está siendo reconocido. Por favor, hágale saber cómo hacerlo. –

+0

Es probable que usted y gvim no estén de acuerdo con el directorio en el que se encuentra su directorio particular. ¿Funciona el 'gvim -u .gvimrc'? – Jens

+0

sí gvim -u .gvimrc.vim nombre de archivo abre un archivo con el nombre de archivo backgroud oscuro.Pero ahora, después de configurar el alias como figura en la página de Luc, está trabajando con los complementos de sintaxis que instalé anteriormente, así que prefiero eso. –

7

Escribí cyg-wrapper.sh con este único propósito.

Es compatible con:

  • enlaces simbólicos
  • opciones que no deben ser interpretadas como trayectorias (ver -c con gvim, o de cualquier indicador que comienzan con un signo menos).

En otras palabras, nos permite escribir:

gvim /etc/profile -c /PS1 -c "echo 'correctly opened'" 
# or even: 
    cd ~/tmp ; ln -s ~/bin/cyg-wrapper.sh 
    gvim -d http://hermitte.free.fr/cygwin/cyg-wrapper.sh cyg-wrapper.sh 

    explorer -e 
    explorer "$vim" 
    explorer http://hermitte.free.fr/ 

Nota: Yo uso la siguiente función en mi .profile para funcionar con gvim cyg-wrapper.sh

gvim() { 
    opt='' 
    if [ `expr "$*" : '.*tex\>'` -gt 0 ] ; then 
    opt='--servername LATEX ' 
    fi 
    cyg-wrapper.sh "C:/Progra~1/Edition/vim/vim73/gvim.exe" --binary-opt=-c,--cmd,-T,-t,--servername,--remote-send,--remote-expr --cyg-verbose --fork=2 $opt "[email protected]" 
} 

EDITAR: Actualmente (26 de septiembre de 2014, utilizando Vim 7.4), Windows gVim usa C:\Windows\gvim.bat para ejecutar gVim desde el comando lin mi. Reemplazar la ruta gvim.exe en la función gvim() con este script permite iniciar gvim sin cambiar la ruta para que coincida con la versión actual de Vim (que en realidad puede estar en Progra~2); sin embargo, parece que también abre una ventana cmd.exe superflua.

+0

muchas gracias Luc ... funcionó finalmente –

+0

Esto es increíble. Gracias. –

3

que tienen el mismo problema debido a la $ SHELL var

así, sencilla gusta este

alias gvim='cmd /c "set SHELL=cmd & start gvim"'

Funciona para mí, puede ser que esto le puede ayudar también.

y tal vez desee utilizar el mismo alias para vim.

2

puse la siguiente función en mi .bashrc:

function gvim 
{ 
    GVIM_CMD=/cygdrive/c/path/to/gVimPortable.exe 
    if [[ -z "$1" ]] 
    then 
     $GVIM_CMD 
    else 
     $GVIM_CMD `cygpath -w $1` 
    fi 
} 

Esto me permite para lanzar gVim desde cualquier lugar.

Funciona bien para los archivos con espacios, también ...

+0

Vale la pena señalar que la única forma en que pude hacer que esto funcionara fue con la ruta corta de windows (/ cygdrive/c/PROGRA ~ 2/Vim/vim74 en lugar de/cygdrive/c/Program \ Files \ \ (x86 \)/Vim/vim74). Puede usar cygpath para obtener la ruta correcta para su sistema: $ cygpath -d/cygdrive/c/Program \ Files \ \ (x86 \)/Vim/vim74/ – roguenet

0

simplemente Retitulé gvim.bat que viene con la instalación estándar vim Win32 para gvim y lo puso en/usr/bin.

Yo también estoy compartiendo configuración beetween Win32 GVim y Cygwin VIM referencia a este artículo:

http://vim.wikia.com/wiki/Synchronize_configuration_to_many_computers

este modo puede tener tanto Vim y Win32 Gvim funcionando con los mismos complementos y configuraciones.

0

Como he probado todo esto y tuve problemas, mostraré lo que estoy usando. Lo escribí en ruby ​​y maneja todo lo que arrojo (archivos, directorios o nada) sin ningún error/ventanas emergentes/etc.

I guardado como gvim en ~/Dropbox/bin/cygwin/(que está en mi camino)

#!/usr/bin/env ruby 

args='' 
filepath='' 
arg=ARGV[0] 

if arg 
    if File.exist? arg 
     if File.file? arg 
      args+="--remote-tab-silent " 
     end 
     filepath=`cygpath -w '#{arg}'`.strip 
     filepath="'#{filepath}'" 
    end 
else 
end 


exe="'/c/Program\ Files\ \(x86\)/vim/vim73/gvim.exe' #{args} #{filepath}" 
spawn exe 
4

Aquí es todo lo que tiene que hacer:

alias gvim="run.exe /cygdrive/c/Programming/Tools/Vim/vim74/gvim.exe" 

Works también con Notepad ++, así:

alias np="run.exe /cygdrive/c/Programming/Tools/Notepad++/notepad++.exe" 
+0

Esto parece funcionar, pero para mí no carga el _vimrc en mi directorio de inicio de Windows correctamente. Tampoco carga el .vimrc en mi directorio home de cygwin. –

0

Aquí está el script que uso para ~/bin/gvim. Lo ejecuta como si llamara al gvim FOO desde el cuadro de diálogo "Ejecutar" (gracias al archivo por lotes invocado por explorer.exe). No se puede jugar muy bien con la línea de comandos, pero un archivo por lotes de eliminación automática viene al rescate.

#!/bin/bash 

TEMPFILE_NAME=gvim-`date +%s`-${RANDOM}.bat 
TEMPFILE=$TMP/$TEMPFILE_NAME 
TEMPFILE_W=`cygpath --windows --absolute --long-name "$TEMPFILE"` 
TARGET= 

if [ "$1" = "" ] ; then 
    TARGET=`cygpath --windows --absolute --long-name "."` 
else 
    TARGET=`cygpath --windows --absolute --long-name "[email protected]" | tr '\n' ' '` 
fi 

WIN_GVIM=`where gvim.exe | tr -d '\r\n'` 
WIN_GVIM=`cygpath "$WIN_GVIM" --windows --absolute --long-name` 

unix2dos > $TEMPFILE << EOF 
start "gvim" "$WIN_GVIM" $TARGET 
DEL %~f0 
EOF 
chmod +x $TEMPFILE 

explorer.exe "$TEMPFILE_W" 

agradecimiento especial a this answer para la técnica de explorer.exe.

1

Esto es un despegue en la respuesta low351. No estaba contento con dejar HOME en el terminal cygwin, ya que lo uso localmente para un cygwin HOME, no para mi casa de Windows. Pero gvim está configurado con Windows HOME. Agregué esto a mi .zshrc:

# run windows gvim from command line 
gvim() { 
    local OLD_HOME=$HOME 
    HOME=/cygdrive/c/Users/jason/ 
    local TARGET=$(cygpath -w $1) 
    /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim74/gvim.exe $TARGET & disown 
    HOME=$OLD_HOME 
} 2>/dev/null 

realmente, simplemente almacenando y restaurando HOME. Siendo local, OLD_HOME desaparece cuando la función regresa, por lo que no contamina el medio ambiente. Si está editando un archivo cygwin, ejecutarlo a través de cygpath -w lo convertirá en una ruta de archivo que windows gvim entiende. También le permite usar rutas de ventana (por ejemplo, C:/tmp/foo.txt) pero w/unix '/' separadores, por lo que puede prescindir de /cygdrive/c. Creo que todo esto es compatible con w/bash. Esto da el siguiente resultado:

> gvim 
[2] 5060 
> 
0

Parece que el problema principal es las variables PRINCIPAL y VIM que son apropiadas para el medio ambiente cygwin consiguen exportar cuando se ejecuta Windows gvim, causando problemas porque Windows gvim no sabe nada de cygwin. Esto lo arregla:

alias gvim='env -u HOME -u VIM /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim74/gvim.exe' 

Tengo Windows gVim establece como la aplicación por defecto (en Windows) para muchos tipos de archivos, por lo que Windows frecuencia gVim se abre a través de la open alias. Esto corrige ese caso de uso:

alias open='env -u HOME -u VIM cygstart' 
Cuestiones relacionadas