2012-09-29 2 views
15

Я не могу запустить gvim из cygwin. Когда я пытаюсь открыть новый файл с:Как запустить windows gvim из cygwin?

GVim файла Gvim открывает файл с именем «No» и отображает ошибки как:

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

Более проблематичным является то, что я не могу открыт существующий файл на пути

>which gvim показывает /usr/bin/gvim

Я поставил alias gvim=/cygdrive/c/Program\Files\(x86\)/Vim/vim73/gvim.exe еще

ответ

6

Найдено в этой теме, я нахожу ответ от jens недопустимой. Мы не просим, ​​чтобы мне сказали не делать этого. Мне не нравились другие ответы, либо всегда была какая-то причуда, например, настройки не использовались или появилось дополнительное окно командной строки. Я сделал некоторые копания, и это работает для меня. Нет лишней строки командной строки для ничего, и она использует мои собственные настройки gvim.

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

Вам просто нужно изменить ДОМОЙ к себе. Чтобы узнать, что положить туда запустить gvim из окон, введите «: echo $ HOME» и нажмите Enter, в моем случае он отобразит P: \, чтобы перевести на/cygdrive/p/

Также, если ваш gvim.exe находится в другом каталоге/версии, которую вам нужно будет настроить.

Теперь, когда я набираю «gvim script.sh» в командной строке cygwin, он запускает gvim с файлом, все красиво и аккуратно!

UPDATE

Я нашел немного лучший способ сделать это. Использование псевдонима заключало в связывании моей сессии, из которой я запускал gvim, я хотел, чтобы он запускался как отдельный процесс, используя «gvim &», является неэлегантным, поскольку при запуске он отображает номер задания и отображает «завершенную» линию по завершении. Я слишком суетливый, поэтому я понял, как все это сделать, используя функцию.

Просто добавьте это в свой .bash_functions файл, он основывается на предыдущем разделе, касающемся домашнего каталога и использования обратной косой черты.

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

UPDATE 2 для пользователей Babun!

Ok, так как то, боролся с этим первоначально я в конечном итоге слом оригинальный Cygwin установить в пользу Babun который, кажется, менее хлопотно настройки для тех, кто хочет функциональность Linux в окнах без полномасштабной виртуальной. Конечно, мой скрипт запуска gvim сломался, и я должен был сделать следующее в моем файле .zshrc (babun использует zsh, сначала я сопротивлялся и переключил его на bash, но затем смягчился, поскольку я решил, что у них должен быть разум, и они это сделали, я нравится)

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 
} 

* Примечание: окружающая изогнутые фигурные скобки() останавливает идентификатор задания из портя вашу чистую оболочку, и вам больше не нужно «откреститься»

PS Единственная оставшаяся досада с этим сейчас заключается в том, что вы не можете «выйти» из оболочки babun до тех пор, пока все запущенные вами экземпляры gvim не будут закрыты. Может быть, кто-то может понять это. Я пробовал. Когда вы вводите exit, он просто висит там, пока вы не выйдете из всех gvims.

+0

Спасибо за вашу суетливость! Это работает так же, как я бы хотел, с одним недостатком: HOME остается установленным способом gvim, а не тем, как хочет моя оболочка cygwin. Кроме того, я думаю, что для C: \ P вам нужно использовать '/ cygdrive/c/P'. – jspencer

+0

Вы правы, это было бы/cygdrive/c/P, но я испортил, когда я набрал это, так или иначе, он показывал P: \, так как мой windows homedir установлен на диск P. Я не заметил эту проблему с домашними настройками cygwin vs gvim, я просто попробовал, и вы правы, что она оставляет мою оболочку cygwin с изменением $ HOME, я исправлю свой скрипт, чтобы нести исходный $ HOME с помощью команды. – low351

+0

@jspencer, только что заметил, что вы опубликовали исправление, хорошо сделано. Спасибо, что я такой же суетлив, как и я :) Я использую вашу версию ... – low351

9

Сделай себе одолжение, не пытайтесь запускать windows gvim из cygwin. Набор переменных среды, вероятно, совершенно другой, и боль от разделителей каталогов обратной косой черты, пробелов в именах файлов, невозможность понять/пути cygwin делает это упражнение бесполезным.

Тогда, что? Установите cygwin версию gvim и забудьте обо всех этих проблемах.

+0

Thanks Jens. После> startxwin я могу открывать файлы с gvim в новом окне. Но файл .gvimrc, который находится в моем домашнем каталоге, не распознается. Пожалуйста, дайте знать, как это сделать. –

+0

Вероятно, вы и gvim не согласны с каталогом вашего домашнего каталога. Работает ли 'gvim -u .gvimrc'? – Jens

+0

yes gvim -u .gvimrc.vim filename открывает файл с именем файла backgroud dark.Но теперь, после установки псевдонима, как указано на странице Люка, работает с плагинами синтаксиса, которые я установил ранее, поэтому я предпочитаю это. –

7

Я написал cyg-wrapper.sh для этой единственной цели.

Он поддерживает:

  • символические ссылки
  • параметры, которые не должны быть истолкованы как имен путей (см -c с Gvim, или любые флаги, начинающиеся со знаком минус).

Другими словами, это позволяет нам печатать:

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/ 

Примечание: Я использую следующую функцию в моей .profile для запуска 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]" 
} 

EDIT: В настоящее время (26 сентября 2014 года, с использованием Vim 7.4), Windows gVim использует C:\Windows\gvim.bat для запуска gVim из командной строки е. Замена пути gvim.exe в функции gvim() с помощью этого скрипта позволяет запускать gvim без изменения пути в соответствии с текущей версией Vim (которая может фактически находиться в Progra~2); однако, похоже, также открывается избыточное окно cmd.exe.

+0

спасибо большое Люк .. он работал наконец –

+0

Это потрясающе. Благодарю. –

3

У меня такая же проблема из вар $ SHELL

так, я просто нравится этот

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

Это работает для меня, может быть, это будет помочь вам тоже.

и, возможно, вы хотите использовать тот же псевдоним для vim.

2

я поставил следующую функцию в моей .bashrc:

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

Это позволяет мне запустить GVim из любого места.

Он отлично работает для файлов с пробелами тоже ...

+0

Стоит отметить, что единственный способ, которым я мог заставить это работать, - это путь с короткой формой окна (/ cygdrive/c/PROGRA ~ 2/Vim/vim74 вместо/cygdrive/c/Program \ Files \ \ (x86 \)/Вим/vim74). Вы можете использовать cygpath, чтобы получить правильный путь для вашей системы: $ cygpath -d/cygdrive/c/Program \ Files \ \ (x86 \)/Vim/vim74/ – roguenet

0

Я просто переименовал gvim.bat, который поставляется со стандартной Win32 установки VIM в gvim и поместить его в/USR/ведро.

Я также параметры общего Разногласия между Win32 GVim и Cygwin VIM, относящиеся к этой статье:

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

Таким образом, я могу иметь как Vim и Win32 Gvim работают с теми же плагиными и настройками.

0

Поскольку я пробовал все это и имел проблемы, я покажу, что я использую. Я написал его в ruby, и он обрабатывает все, что я бросаю в него (файлы, каталоги или ничего) без каких-либо ошибок/всплывающих окон/и т. Д.

Я сохранил его как gvim в ~/Dropbox/бен/Cygwin/(который находится в моих 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

Вот все, что вам нужно сделать:

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

Работает также с Notepad ++, например, так:

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

Это похоже на работу, но для меня он не загружается _vimrc в моем домашнем каталоге Windows правильно. Он не загружает .vimrc в мой домашний каталог cygwin. –

0

Вот сценарий, который я использую для ~/bin/gvim. Он запускает его, как если бы я вызывал gvim FOO из диалога «Выполнить» (благодаря пакетному файлу, вызываемому explorer.exe). Невозможно сыграть слишком хорошо с командной строкой, но спасенный пакетный файл приходит на помощь.

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

Особая благодарность this answer для explorer.exe техники.

1

Это взлет на ответ low351. Я был недоволен тем, что HOME изменился на терминале cygwin, поскольку я использую его локально для дома cygwin, а не для моего окна. Но gvim настроен с помощью Windows HOME. Я добавил это в мой .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 

действительно, просто хранение и восстановление HOME. Будучи локальным, OLD_HOME уходит, когда функция возвращается, поэтому она не загрязняет окружающую среду. Если вы редактируете файл cygwin, запускайте его через cygpath -w, это сделает путь к файлу, который понимает Windows gvim. Он также позволяет использовать оконные дорожки (например, C:/tmp/foo.txt), но w/unix '/' разделители, поэтому вы можете обойтись без /cygdrive/c. Я считаю, что это все совместимо с bash. Это дает следующий результат:

> gvim 
[2] 5060 
> 
0

Похоже, главная проблема заключается в HOME и VIM переменные, которые подходят для Cygwin среды экспортируются при запуске Windows, GVIM, вызывая проблемы, поскольку для Windows Gvim ничего не знает о Cygwin. Это фиксирует это:

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

У меня есть Windows, GVim установить в качестве приложения по умолчанию (в Windows) для многих типов файлов, поэтому для Windows GVim часто получает открыто с помощью open псевдонима. Это исправляет этот случай использования:

alias open='env -u HOME -u VIM cygstart' 
Смежные вопросы