source - vim code
¿Cómo ejecutar windows gvim desde cygwin? (11)
Acabo de renombrar gvim.bat
que viene con la instalación estándar de Win32 vim a gvim
y lo puse en / usr / bin.
También estoy compartiendo configuraciones entre Win32 GVim y Cygwin VIM refiriéndose a este artículo:
http://vim.wikia.com/wiki/Synchronize_configuration_to_many_computers
De esta manera puedo tener tanto Vim como Win32 Gvim ejecutándose con los mismos complementos y configuraciones.
No puedo ejecutar gvim desde cygwin. Cuando intento abrir un nuevo archivo con:
gvim filename gvim abre un archivo con ''No name'' y muestra el 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 el archivo existente en la ruta
>which gvim
muestra /usr/bin/gvim
He puesto el alias gvim=/cygdrive/c/Program/Files/(x86/)/Vim/vim73/gvim.exe
aún
Aquí está el script que uso para ~/bin/gvim
. Se ejecuta como si llamara a gvim FOO
desde el cuadro de diálogo "Ejecutar" (gracias al archivo por lotes que invoca explorer.exe
). No se puede jugar muy bien con la línea de comandos, pero un archivo por lotes que se borra automáticamente 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 "$@" | 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"
Un agradecimiento especial a esta respuesta por la técnica explorer.exe
.
Aquí está todo lo que necesitas hacer:
alias gvim="run.exe /cygdrive/c/Programming/Tools/Vim/vim74/gvim.exe"
Funciona también con Notepad ++, así:
alias np="run.exe /cygdrive/c/Programming/Tools/Notepad++/notepad++.exe"
Encontré este hilo, encuentro la respuesta de jens inaceptable. No estamos pidiendo que nos digan que no lo hagamos. Tampoco me gustaron las otras respuestas, siempre hubo alguna peculiaridad, como la configuración no utilizada o una ventana de línea de comandos adicional que se abre. Hice algunas excavaciones y esto me funciona. No hay cuadro de línea de comando adicional 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 necesitas modificar el HOGAR a tu propio. Para saber qué poner allí, ejecute gvim desde Windows, luego coloque ": echo $ HOME" y presione enter en mi caso, muestra P: /, de modo que se traduce a / cygdrive / p /
Además, si su gvim.exe está en un directorio / versión diferente, deberá ajustar.
Ahora, cuando escribo ''gvim script.sh'' en un indicador de comando de cygwin, se inicia gvim con el archivo, ¡todo está bien!
ACTUALIZAR
Encontré una forma ligeramente mejor de hacer esto. Usar el alias fue vincular mi sesión desde la que ejecuté el gvim, quería que se iniciara como un proceso separado, el uso de "gvim &" no es elegante, ya que enumera el número de trabajo cuando se inicia y muestra una línea de "listo" cuando se completa. Soy demasiado exigente, así que me di cuenta de cómo obtener todo eso ordenado usando una función.
Solo agregue esto a su archivo .bash_functions, se basa en la sección anterior con respecto al uso del directorio de inicio y la barra invertida.
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 usuarios de babun!
Bueno, ya que luché con esto originalmente, terminé desechando la instalación original de cygwin en favor de babun, que parece ser una configuración menos problemática para aquellos que desean la funcionalidad de Linux en Windows sin un virtual completo. Por supuesto, mi script de lanzamiento 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í porque pensé que debían tener razón, y así fue. gusta)
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: las llaves curvadas circundantes () evitan que la ID del trabajo arruine la cáscara limpia, y ya no necesita el "rechazo"
PD La única molestia que queda con esto ahora es que no puedes "salir" del shell de babun hasta que todas las instancias de gvim que hayas iniciado estén cerradas. Tal vez alguien pueda darse cuenta de eso. He intentado. Cuando escribes exit, simplemente se cuelga allí hasta que hayas salido de todos los gvims.
Escribí cyg-wrapper.sh con este único propósito.
Es compatible con:
- enlaces simbólicos
- opciones que no deben interpretarse como rutas de acceso (consulte
-c
con gvim, o cualquier marca que comience 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: uso la siguiente función en mi .profile para ejecutar gvim con 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 "$@"
}
EDITAR: Actualmente (26 de septiembre de 2014, usando Vim 7.4), Windows gVim usa C:/Windows/gvim.bat
para iniciar gVim desde la línea de comandos. 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 de cmd.exe
superflua.
Esto es un despegue de la respuesta de . No estaba contento con el cambio de HOME en la terminal de cygwin, ya que lo uso localmente para una HOME de cygwin, no para mi Windows. Pero gvim está todo configurado utilizando 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
En realidad, simplemente almacenando y restaurando el HOGAR. Al ser local, OLD_HOME desaparece cuando la función regresa, por lo que no contamina el entorno. 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 con separadores de / unix ''/'', para que pueda prescindir de /cygdrive/c
. Creo que todo esto es compatible con bash. Esto da el siguiente resultado:
> gvim
[2] 5060
>
Hazte un favor, no intentes ejecutar un gvim de windows desde cygwin. Es probable que el conjunto de variables de entorno sea completamente diferente, y el dolor de los separadores de directorio de barra invertida, espacios en blanco en los nombres de archivo, la incapacidad de entender / las rutas de cygwin hace que esto sea un ejercicio inútil.
¿Y que? Instala la versión cygwin de gvim y olvídate de todos estos problemas.
Parece que el principal problema es que las variables HOME y VIM que son apropiadas para el entorno cygwin se exportan cuando se ejecuta Windows gvim, lo que causa 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 gvim de Windows configurado como la aplicación predeterminada (en Windows) para muchos tipos de archivos, por lo que Windows gvim se abre con frecuencia a través del alias open
. Esto soluciona ese caso de uso:
alias open=''env -u HOME -u VIM cygstart''
Pongo 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 lanzar gVim desde cualquier lugar.
Funciona bien para archivos con espacios, también ...
Tengo el mismo problema debido a la variante $ SHELL
así que, simplemente me gusta esto
alias gvim=''cmd /c "set SHELL=cmd & start gvim"''
Funciona para mí, puede ser que esto te ayude también.
y tal vez quieras usar el mismo alias para vim.
Ya que probé todo esto y tuve problemas, mostraré lo que estoy usando. Lo escribí en ruby y maneja todo lo que le lanzo (archivos, directorios o nada) sin errores / ventanas emergentes / etc.
Lo gvim
como gvim
en ~ / Dropbox / bin / cygwin / (que está en mi RUTA)
#!/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