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

Plo*_*uff 6 windows vim configuration cygwin

我正在尝试设置我的cygwin环境.由于我是vim用户,我想在cygwin和windows上轻松使用它.

共享vim配置

我首先关心的是在两者之间共享配置(.vimrc/_vimrc和.vim/_vimfiles). 实际上,我最近在github上托管我的vim配置,并尝试通过github更新我的插件.

所以我做了一些谷歌搜索找到最好的方法,但我没有找到一个"好的解决方案"(虽然不容易定义......).无论如何,很多人似乎同意这样一个事实,即最好使用windows-gvim而不是cygwin-gvim(由于X问题我没能使用cygwin-gvim,但我不想再看了).所以第一个问题:这是真的吗?!

然后我试着找到一些基于windows-gvim的解决方案.目前,我已将win env链接起来.在cyg环境中:

.vim -> /cygdrive/d/Program Files/Vim/vimfiles/
.vimrc -> /cygdrive/d/Program Files/Vim/_vimrc
Run Code Online (Sandbox Code Playgroud)

但是当我从cygwin打开gvim时它失败了.我认为win-gvim无法读取cygwin的simlinks.

我试图链接vimfiles目录(所以获胜方),但他们win-gvim也找不到任何东西! 我在这里不明白的是为什么从cygwin发起的win-gvim会查看我的cygwin主目录中的文件?!

我读过可以在windows中声明一个HOME变量来帮助win-vim,但我担心它会产生副作用......

这就是配置配置... 有人有解决方案吗?

启动vim

另外,为了启动gvim,我使用了一个别名来转换winpaths中的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,\" \"$@\""
Run Code Online (Sandbox Code Playgroud)

这是一个很好的实践吗?

谢谢您的帮助 :)

Plouff

ros*_*dia 10

我将我的dotfiles保存在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
Run Code Online (Sandbox Code Playgroud)

这照顾了cygwin中的vim(终端vim和gtk gvim)

Windows方面:

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
Run Code Online (Sandbox Code Playgroud)

这照顾windows vim(两个命令行vim和windows gvim)

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


Plo*_*uff 0

好吧,我终于有时间解决这个问题了!要查找 ./_(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 \"$@\""
Run Code Online (Sandbox Code Playgroud)

结合 Bryan Ross 的解决方案,我现在可以分享我的配置了!感谢您的帮助。

现在我需要解决这个空白问题......