16

cygwinからgvimを実行できません。で新しいファイルを開こうとすると:

gvim filename gvimは、「名前なし」のファイルを開き、次のようにエラーを表示します。

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じっとしました

4

11 に答える 11

9

私はこの唯一の目的のためにcyg-wrapper.shを書きました。

それはサポートします:

  • シンボリックリンク
  • パス名として解釈してはならないオプション(-cgvim、またはマイナス記号で始まるフラグを参照)。

つまり、次のように入力できます。

  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で次の関数を使用して、cyg-wrapper.shでgvimを実行します

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 "$@"
}

編集:現在(2014年9月26日、Vim 7.4を使用)、WindowsgVimはC:\Windows\gvim.batコマンドラインからgVimを起動するために使用します。gvim.exe関数内のパスをこのスクリプトに置き換えるgvim()と、現在のVimバージョン(実際にはにある可能性があります)に一致するようにパスを変更せずにgvimを起動できますProgra~2。ただし、余分なcmd.exeウィンドウも開いているように見えます。

于 2012-09-30T12:38:17.690 に答える
8

好意を持ってください。cygwinからwindowsgvimを実行しようとしないでください。環境変数のセットは完全に異なる可能性があり、バックスラッシュディレクトリセパレータの苦痛、ファイル名の空白、/ cygwinパスを理解できないことにより、これは無駄になります。

じゃあ何?cygwinバージョンのgvimをインストールして、これらすべての問題を忘れてください。

于 2012-09-29T19:03:53.270 に答える
8

このスレッドを見つけました、私はジェンスからの答えを受け入れられないと思います。私たちはそれをしないように言われることを求めていません。設定が使用されていない、追加のコマンドラインウィンドウがポップアップするなど、常にいくつかの癖があったため、他の回答が気に入らなかった。私はいくつか掘りました、そしてこれは私のために働きます。追加のコマンドラインボックスは無料で、適切なgvim設定を使用します。

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

HOMEを自分のものに変更するだけです。そこに何を置くかを見つけるには、Windowsからgvimを実行し、「:echo $ HOME」を入れて、私の場合はEnterキーを押すと、P:\が表示され、/ cygdrive /p/に変換されます。

また、gvim.exeが別のディレクトリ/バージョンにある場合は、調整する必要があります。

cygwinコマンドプロンプトで「gvimscript.sh」と入力すると、ファイルとともにgvimが起動します。

アップデート

私はこれを行うための少し良い方法を見つけました。エイリアスを使用すると、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

babunユーザー向けのUPDATE2!

もともとこれに取り組んできたので、私は元のcygwinインストールを破棄して、本格的な仮想化なしでWindowsでLinux機能を必要とする人にとってはそれほど面倒ではないように見えるbabunを採用することになりました。もちろん、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
} 

*注:周囲の湾曲した中括弧()は、ジョブIDがクリーンなシェルを台無しにするのを防ぎ、「disown」は不要になります。

PSこれで残っている唯一の厄介な問題は、起動したすべてのgvimインスタンスが閉じられるまで、babunシェルを「終了」できないことです。多分誰かがそれを理解することができます。私はもう試した。exitと入力すると、すべてのgvimsを終了するまでそこにハングします。

于 2015-04-03T19:27:48.343 に答える
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"
于 2014-06-04T19:06:42.773 に答える
3

$ SHELL varのため、同じ問題が発生します

だから、私は単純にこのようにします

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

それは私のために働きます、これはあなたにも役立つかもしれません。

そして多分あなたはvimに同じエイリアスを使いたいでしょう。

于 2013-04-18T00:46:09.630 に答える
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を起動できます。

スペースのあるファイルでも問題なく動作します...

于 2013-08-13T07:34:00.500 に答える
1

これはlow351の答えの離陸です。cygwinターミナルでHOMEを変更したままにしておくことに不満がありました。これは、WindowsのホームではなくcygwinHOMEにローカルで使用しているためです。ただし、gvimはすべてWindowsHOMEを使用してセットアップされます。これを.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を使用して実行すると、Windowsgvimが理解できるファイルパスになります。また、ウィンドウパス(例C:/tmp/foo.txt)を使用できますが、UNIXの'/'区切り文字が付いているため、を省略できます/cygdrive/c。これはすべてbashと互換性があると思います。これにより、次の出力が得られます。

> gvim
[2] 5060
>
于 2016-01-22T19:03:36.683 に答える
0

標準のWin32vimgvim.batインストールに付属している名前をgvim/usr/binに変更しました。

この記事を参照して、Win32GVimとCygwinVIMの間で設定を共有しています。

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

このようにして、VimとWin32Gvimの両方を同じプラグインと設定で実行できます。

于 2013-12-15T17:53:04.437 に答える
0

これらすべてを試し、問題が発生したので、使用しているものを示します。私はそれをrubyで書きました、そしてそれは私がそれに投げるすべて(ファイル、ディレクトリ、または何も)をエラー/ポップアップなどなしで処理します。

gvim〜/ Dropbox / bin / 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
于 2014-04-07T20:58:04.113 に答える
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 "$@" | 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"

テクニックに対するこの回答に特に感謝します。explorer.exe

于 2015-08-13T19:58:35.733 に答える
0

主な問題は、Windows gvimの実行時にcygwin環境に適したHOME変数とVIM変数がエクスポートされ、Windows gvimがcygwinを認識しないため、問題が発生することです。これはそれを修正します:

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

多くのファイルタイプのデフォルトアプリケーション(Windows)としてWindows gvimを設定しているため、Windowsgvimはopenエイリアスを介して頻繁に開かれます。これにより、そのユースケースが修正されます。

alias open='env -u HOME -u VIM cygstart'
于 2016-10-17T13:04:01.767 に答える