我无法从cygwin运行gvim。当我尝试使用以下命令打开新文件时
gvim文件名 gvim打开一个带有“No name”的文件,并将错误显示为:
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
置于
答案 0 :(得分:8)
帮自己一个忙,不要试图从cygwin运行windows gvim。环境变量集可能完全不同,反斜杠目录分隔符的痛苦,文件名中的空白,无法理解/ cygwin路径使得这一操作变得徒劳无功。
那么,什么?安装cygwin版本的gvim并忘记所有这些问题。答案 1 :(得分:8)
我出于这个目的写了cyg-wrapper.sh。
它支持:
-c
或任何以减号开头的标记)。换句话说,它使我们能够输入:
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 with 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 "$@"
}
编辑:目前(2014年9月26日,使用Vim 7.4),Windows gVim使用C:\Windows\gvim.bat
从命令行启动gVim。使用此脚本替换gvim.exe
函数中的gvim()
路径允许启动gvim而不更改路径以匹配当前Vim版本(实际可能在Progra~2
中);但是,它似乎也打开了一个多余的cmd.exe
窗口。
答案 2 :(得分:7)
找到这个帖子,我发现jens的答案是不可接受的。我们并没有要求被告知不要这样做。我不喜欢其他答案,或者总是有一些怪癖,比如没有使用的设置或弹出额外的命令行窗口。我做了一些挖掘,这对我有用。没有额外的命令行框,它使用我正确的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位于不同的目录/版本中,则需要进行调整。
现在当我输入' gvim script.sh'在cygwin命令提示符下,它启动gvim文件,一切都很好,整洁!
<强> 更新 强>
我发现了一种更好的方法。使用别名占用了我运行gvim的会话,我希望它作为一个单独的进程启动,使用&#34; gvim&amp;&#34;因为它在启动时列出了工作号并且显示了一个&#34;完成&#34;线完成后。我太挑剔了所以我想通过使用一个函数来弄清楚如何整理。
只需将其添加到.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用户UPDATE 2!
好了,因为最初我已经打破了原来的cygwin安装,取而代之的是babun,这对于那些想要在Windows中没有完全虚拟的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
}
*注意:周围的弧形括号()会阻止作业ID弄乱你的干净外壳,而你不再需要&#34; disown&#34;
P.S。现在唯一剩下的烦恼就是你不能退出&#34; babun shell直到你发起的所有gvim实例都关闭了。也许有人能想出自己的想法。我试过了。当您输入exit时,它会挂起,直到您退出所有gvims。
答案 3 :(得分: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"
答案 4 :(得分:3)
我有同样的问题 因为$ SHELL var
所以,我很简单就喜欢这个
alias gvim='cmd /c "set SHELL=cmd & start gvim"'
它适用于我,也许这对你也有帮助。
也许你想为vim使用相同的别名。
答案 5 :(得分: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。
它也适用于带空格的文件......
答案 6 :(得分:1)
这是low351的回答。因为我在本地使用cygwin HOME而不是我的windows home,我很不高兴离开HOME在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
。我相信这是完全兼容的w / bash。这给出了以下输出:
> gvim
[2] 5060
>
答案 7 :(得分:0)
我刚刚将标准Win32 vim安装附带的gvim.bat
重命名为gvim
并将其放入/ usr / bin。
我还在Win32 GVim和Cygwin VIM之间共享设置,参考这篇文章:
http://vim.wikia.com/wiki/Synchronize_configuration_to_many_computers
这样我可以使用相同的插件和设置运行Vim和Win32 Gvim。
答案 8 :(得分:0)
由于我已经尝试了所有这些并且遇到了问题,我将展示我正在使用的内容。我在ruby中编写它,它处理我抛出的所有内容(文件,目录或什么都没有),没有任何错误/弹出/等等。
我将它保存为〜{Dropbox / bin / cygwin /中的gvim
(在我的路径中)
#!/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
答案 9 :(得分:0)
这是我用于~/bin/gvim
的脚本。它就像我从&#34; Run&#34;中调用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
技术的this answer。
答案 10 :(得分: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 gvim设置为许多文件类型的默认应用程序(在Windows中),因此Windows gvim经常通过open
别名打开。这修复了用例:
alias open='env -u HOME -u VIM cygstart'