2012-09-29 15 views
15

Non riesco a eseguire gvim da cygwin. Quando provo ad aprire un nuovo file con:Come eseguire windows gvim da cygwin?

gvim nome gvim si apre un file con 'No name' e di errore come:

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

Più problematico è che non posso aprire file esistente nel percorso

>which gvim mostra /usr/bin/gvim

ho messo alias gvim=/cygdrive/c/Program\Files\(x86\)/Vim/vim73/gvim.exe ancora

risposta

6

trovato questa discussione, ho trovato la risposta da jens inaccettabile. Non stiamo chiedendo di sentirsi dire di non farlo. Non mi piacevano le altre risposte o c'era sempre qualche stranezza, come le impostazioni non utilizzate o un'ulteriore finestra della riga di comando che si apriva. Ho scavato e questo funziona per me. Nessuna casella della riga di comando in più per niente e usa le mie corrette impostazioni di gvim.

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

È sufficiente modificare la CASA a proprio. Per scoprire cosa mettere lì lancia gvim da windows poi inserisci ": echo $ HOME" e premi invio nel mio caso mostra P: \ così che si traduce in/cygdrive/p/

Anche se gvim.exe è in una directory/versione diversa che dovrai modificare.

Ora quando digito "gvim script.sh" a un prompt dei comandi di cygwin, avvia gvim con il file, tutto bello e pulito!

UPDATE

ho trovato un modo leggermente migliore per farlo. L'utilizzo dell'alias stava vincolando la mia sessione da cui ho eseguito gvim, volevo che avviasse come processo separato, usando "gvim &" non è inelegante in quanto elenca il numero del lavoro all'avvio e visualizza una riga "completata" una volta completata. Sono troppo pignolo quindi ho capito come ottenere tutto in ordine usando una funzione.

Basta aggiungere questo al file .bash_functions, si basa sulla sezione precedente riguardante la directory home e l'uso di backslash.

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

UPDATE 2 per gli utenti Babun!

Ok poiché dopo aver lottato con questo in origine ho finito per la demolizione del cygwin originale installazione a favore di Babun che sembra essere una configurazione meno fastidioso per coloro che desiderano funzionalità Linux in Windows senza un pieno soffiato virtuale. Naturalmente il mio script di lancio di gvim si è rotto, e ho dovuto fare quanto segue nel mio file .zshrc (babun usa zsh, all'inizio ho resistito e lo ho passato a bash ma poi ho ceduto perché pensavo che dovevano avere una ragione, e lo hanno fatto, io come esso)

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: circostanti parentesi curve() si ferma l'ID del processo di fare scherzi il tuo guscio pulito, e non è più necessario il "rinnegare"

PS L'unico fastidio rimanente ora è che non puoi "uscire" dalla shell di babun finché tutte le istanze di gvim che hai lanciato non vengono chiuse. Forse qualcuno può capirlo da solo. Ho provato. Quando digiti exit, si blocca lì finché non avrai terminato tutti i gvims.

+0

Grazie per la tua pignoleria! Funziona proprio come vorrei, con uno svantaggio: HOME è lasciato impostato come vuole gvim, non come vuole la mia shell cygwin. Inoltre, penso per C: \ P, dovresti usare '/ cygdrive/c/P'. – jspencer

+0

Sei corretto sarebbe stato/cygdrive/c/P, ma ho incasinato quando ho digitato che in qualche modo, stava mostrando P: \ come il mio windows homedir viene impostato su un disco P. Non avevo notato il problema con le impostazioni di cygwin vs gvim home, l'ho appena provato e sei corretto che lascia la mia shell cygwin con change $ HOME, correggerò il mio script per portare il $ HOME originale attraverso il comando. – low351

+0

@jspencer, ho appena notato che hai postato una correzione, ben fatto. Grazie per essere così pignolo come me :) Sto usando la tua versione ... – low351

9

Fatevi un favore, non tentare di eseguire windows gvim da cygwin. L'insieme di variabili di ambiente è probabilmente completamente diverso, e il dolore dei separatori di directory backslash, spazi vuoti nei nomi di file, impossibilità di comprendere/percorsi cygwin rende questo esercizio inutile.

Quindi, che cosa? Installa la versione cygwin di gvim e dimenticati di tutti questi problemi.

+0

Grazie Jens. Dopo> startxwin, posso aprire i file con gvim in una nuova finestra. Ma il file .gvimrc che si trova nella mia home directory non viene riconosciuto. Si prega di sapere come. –

+0

Probabilmente tu e gvim non siete d'accordo su quale directory è la vostra home directory. 'Gvim -u .gvimrc' funziona? – Jens

+0

yes gvim -u .gvimrc.vim nomefile apre un file con il nome backgroud dark.Ma ora dopo aver impostato l'alias come indicato nella pagina di Luc sta lavorando con i plugin di sintassi che ho installato in precedenza, quindi preferisco quello. –

7

Ho scritto cyg-wrapper.sh per questo solo scopo.

Supporta:

  • link simbolici
  • opzioni che non devono essere interpretati come nomi di percorso (vedi -c con gvim, o qualsiasi bandiere che iniziano con un segno meno).

In altre parole, ci permette di digitare:

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: io uso la seguente funzione nel mio .profile per eseguire 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 "[email protected]" 
} 

MODIFICA: Attualmente (26 settembre 2014, utilizzando Vim 7.4), Windows gVim utilizza C:\Windows\gvim.bat per avviare gVim dal comando lin e. La sostituzione del percorso gvim.exe nella funzione gvim() con questo script consente di avviare gvim senza modificare il percorso in modo che corrisponda alla versione Vim corrente (che potrebbe essere effettivamente in Progra~2); tuttavia, sembra che apra anche una finestra superflua .

+0

grazie mille Luc .. ha funzionato finalmente –

+0

Questo è fantastico. Grazie. –

3

Ho lo stesso problema a causa del var $ SHELL

così, semplice piace questa

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

Funziona per me, potrebbe essere questo sarà aiutare anche voi.

e forse si desidera utilizzare lo stesso alias per vim.

2

ho messo la seguente funzione nel mio .bashrc:

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

Questo mi permette di lanciare gVim da qualsiasi luogo.

Funziona bene per i file con spazi, anche ...

+0

Vale la pena notare che l'unico modo per farlo funzionare era con il breve percorso di Windows (/ cygdrive/c/PROGRA ~ 2/Vim/vim74 invece di/cygdrive/c/Program \ Files \ \ (x86 \)/Vim/vim74). Puoi usare cygpath per ottenere il percorso corretto per il tuo sistema: $ cygpath -d/cygdrive/c/Program \ Files \ \ (x86 \)/Vim/vim74/ – roguenet

0

Ho appena rinominato gvim.bat che viene fornito con l'installazione standard vim Win32 per gvim e la mettono in/usr/bin.

Sono anche impostazioni di condivisione beetween Win32 GVim e Cygwin VIM si riferiscono a questo articolo:

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

In questo modo posso avere sia Vim e Win32 Gvim esecuzione con le stesse plugin e le impostazioni.

0

Dal momento che ho provato tutti questi problemi e ho riscontrato che mostrerò quello che sto usando. L'ho scritto in ruby ​​e gestisce tutto ciò che lancio (file, directory o niente) senza errori/popup/etc.

ho salvato come gvim in ~/Dropbox/bin/Cygwin/(che è nel mio PATH)

#!/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

Ecco tutto quello che dovete fare:

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

funziona anche con Notepad ++, in questo modo:

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

Questo sembra funzionare, ma per me non carica il _vimrc nella mia home directory di Windows correttamente. Neanche carica il .vimrc nella mia home directory cygwin. –

0

Ecco lo script che uso per ~/bin/gvim. Lo esegue come se chiamassi gvim FOO dalla finestra di dialogo "Esegui" (grazie al file batch richiamato da explorer.exe). Non è possibile giocare troppo bene con la riga di comando, ma un file batch che si autoelette viene in soccorso.

#!/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" 

Un ringraziamento speciale a this answer per la tecnica explorer.exe.

1

Questo è un take off sulla risposta di low351. Non ero contento di aver lasciato HOME cambiato nel terminale cygwin, poiché lo usavo localmente per una casa cygwin, non per la mia casa di Windows. Ma gvim è tutto configurato usando Windows HOME. Ho aggiunto questo al mio .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 

davvero, solo memorizzare e ripristinare HOME. Essendo locale, OLD_HOME scompare quando la funzione ritorna, quindi non inquina l'ambiente. Se stai modificando un file cygwin, eseguirlo attraverso cygpath -w lo renderà un percorso file che Windows Gvim capirà. Consente inoltre di utilizzare i percorsi finestra (ad esempio C:/tmp/foo.txt) ma separatori '/' w/unix, quindi è possibile fare a meno di /cygdrive/c. Credo che questo sia tutto compatibile con bash. Questo dà il seguente risultato:

> gvim 
[2] 5060 
> 
0

Sembra che il problema principale è la casa e VIM variabili che sono appropriate per l'ambiente Cygwin vengono esportati durante l'esecuzione di Windows gvim, causando problemi perché Windows gvim non sa nulla di Cygwin. Questo lo ripara:

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

Ho Windows gvim impostata come applicazione predefinita (in Windows) per molti tipi di file, in modo che Windows gVim spesso viene aperto tramite l'alias open. Questo risolve il caso d'uso:

alias open='env -u HOME -u VIM cygstart' 
Problemi correlati