在cygwin vim和windows gvim之间共享vim配置并启动它的最佳方式

在cygwin vim和windows gvim之间共享vim配置并启动它的最佳方式,windows,vim,configuration,cygwin,Windows,Vim,Configuration,Cygwin,我正在尝试设置cygwin环境。 因为我是一个vim用户,所以我想在cygwin和windows上轻松使用它 共享vim配置 我首先关心的是在它们之间共享配置(.vimrc/_vimrc和.vim/_vimrc文件)。 事实上,我最近在github上托管了我的vim配置,并试图通过github更新我的插件 所以我在谷歌上搜索了一下,想找到最好的方法,但没能找到“好的解决方案”(虽然不容易定义…)。 无论如何,很多人似乎都同意这样一个事实,即最好使用windows gvim而不是cygwin gv

我正在尝试设置cygwin环境。 因为我是一个vim用户,所以我想在cygwin和windows上轻松使用它

共享vim配置 我首先关心的是在它们之间共享配置(.vimrc/_vimrc和.vim/_vimrc文件)。 事实上,我最近在github上托管了我的vim配置,并试图通过github更新我的插件

所以我在谷歌上搜索了一下,想找到最好的方法,但没能找到“好的解决方案”(虽然不容易定义…)。 无论如何,很多人似乎都同意这样一个事实,即最好使用windows gvim而不是cygwin gvim(我没能使用cygwin gvim,很可能是因为X问题,但我不想看得更远)。 所以第一个问题:这是真的吗

然后我试图找到一些基于WindowsGVIM的解决方案。 目前,我已链接到win env。在cyg环境中:

.vim -> /cygdrive/d/Program Files/Vim/vimfiles/
.vimrc -> /cygdrive/d/Program Files/Vim/_vimrc
但当我从cygwin打开gvim时,它失败了。我想win gvim看不懂cygwin的simlinks

我试图链接vimfiles目录(所以win-side),但是他们win-gvim也找不到任何东西! 我不明白的是,为什么从cygwin启动的win gvim会查看我的cygwin home目录中的文件

我读到有可能在windows中声明一个主变量来帮助赢得vim,但我担心它会有副作用

这就是配置文件的配置文件。。。 有人有解决方案吗?

发射vim 此外,要启动gvim,我使用一个别名来转换WinPath中的cigpaths:

winfilepath () {
  # Extract command
  cmd="$1"
  shift
  # Computes file paths
  allfiles=""
  if [[ ! -z "$@" ]]; then
    while read f
    do
      newpath=`cygpath -w $f`
      allfiles="$allfiles $newpath"
    done < <(echo "$@" )
  fi

  # Launch command
  echo "winfilepath: "$cmd $allfiles
  $cmd $allfiles
}

alias gvim="winfilepath gvim \"$@\""
alias gvimdiff="winfilepath gvimdiff \"$@\""

# Open Windows explorer with file
alias winopen="winfilepath \"explorer.exe /select,\" \"$@\""
winfilepath(){
#提取命令
cmd=“$1”
转移
#计算文件路径
allfiles=“”
如果[!-z“$@”];则
读f时
做
newpath=`cygpath-w$f`
allfiles=“$allfiles$newpath”

完成<我将我的点文件保存在Dropbox中。文件夹是C:\Dropbox\dotfiles。为了在windows和cygwin之间使用它们,我做了以下工作:

Cygwin侧:

~ $ ln -s /cygdrive/c/Dropbox/dotfiles/.vimrc
~ $ ln -s /cygdrive/c/Dropbox/dotfiles/.gvimrc
~ $ ln -s /cygdrive/c/Dropbox/dotfiles/.vim
负责cygwin中的vim(终端vim和gtk gvim)

窗口端:

C:\Users\Bryan>mklink _vimrc C:\Dropbox\dotfiles\.vimrc
C:\Users\Bryan>mklink _gvimrc C:\Dropbox\dotfiles\.gvimrc
C:\Users\Bryan>mklink /D vimfiles C:\Dropbox\dotfiles\.vim
负责windows vim(通信线路vim和windows gvim)


这已经成功地为我工作了大约两年了。

好的,我终于有时间解决这个问题了! 要找到一个./(g)vimrc,(g)vim首先在$HOME目录中查找。如果在其中找不到./(g)vimrc,则在$vim目录中查找

因为cygwin设置了$HOME环境变量,所以我的win gvim试图在我的主目录中打开simlink。 因此,要加载正确的rc文件,我需要正确设置$HOME变量。我最终使用了以下新函数:

#
# Compute windows file path and launch command in argument
#
winfilepath () {
  # Extract command
  cmd="$1"
  shift
  # Computes file paths
  allfiles=""
  if [[ ! -z "$@" ]]; then
    while read f
    do
      newpath=`cygpath -w "$f"`
      allfiles="$allfiles $newpath"
    done < <(echo "$@" )
  fi

  # Launch command
  echo "winfilepath: "$cmd $allfiles
  $cmd $allfiles
}

#######
# Launching VIM
#######
winvim () {
  # HOME env var management
  myhomebak=$HOME
  export HOME="/cygdrive/d/Program\ Files/Vim"
  # Extract command
  cmd="$1"
  shift
  winfilepath $cmd "$@"
  export HOME=$myhomebak
}

alias gvim="winvim gvim \"$@\""
alias gvimdiff="winvim gvimdiff \"$@\""
#
#计算windows文件路径并在参数中启动命令
#
winfilepath(){
#提取命令
cmd=“$1”
转移
#计算文件路径
allfiles=“”
如果[!-z“$@”];则
读f时
做
newpath=`cygpath-w“$f”`
allfiles=“$allfiles$newpath”
done<我使用GitHub保存我的点文件,而不是像那样使用Dropbox,因此我更喜欢将我的Cygwin设置设置为“权威”版本,并让Windows gVim使用这些设置

说明了如何执行此操作。基于此,并针对HomeHick进行了更新,在Windows中创建一个包含以下内容的
%HOMEPATH%\\u vimrc
文件:

set runtimepath+=c:/cygwin/home/username/.homesick/repos/dotfiles/home/.vim
source c:/cygwin/home/username/.homesick/repos/dotfiles/home/.vimrc
或者,更一般地说,让存储库的文件优先于运行时路径中的其他文件:

let &runtimepath = $HOME . "/.homesick/repos/dotfiles/home/.vim," . &runtimepath
source $HOME/.homesick/repos/dotfiles/home/.vimrc

我喜欢你的别名来启动gvim。我使用了一种稍有不同的方法,因为我在处理路径中有空格的文件时遇到了问题。你对此有什么问题吗?嗨,不幸的是,我在这个启动器上遇到了问题。我仍然需要调试这个…空格太烦人了!!!你对空格的解决方案是什么?它仍然失败。我犯了错误vim文件夹和我的win user文件夹中的nks,但win gvim抱怨simlink…我不理解win gvim的行为。我认为它仍在尝试从cygwin端打开.vim*!可能我的win设置不同,我使用的是Win7…我刚刚编辑了我的答案。你需要一个a/D开关来打开.vim文件夹链接,所以Windows知道我需要它是一个目录符号链接,而不是一个文件符号链接link@Plouff显然,您确实需要使用windows cmd提示符和
mklink
来创建windows链接。如果您使用cygwin的
ln-s
来创建_vimrc和vimfiles链接,gvim将在启动时抛出符号链接错误。@Matthew:谢谢您的更新。I stop目前正在使用cygwin。但我可能在不久的将来再次需要它。我希望它能帮助我!