Лучший способ поделиться конфигурацией vim между cygwin-vim и windows-gvim и запустить ее - PullRequest
6 голосов
/ 14 августа 2011

Я пытаюсь настроить мою среду cygwin. Поскольку я являюсь пользователем vim, я хочу легко использовать его в cygwin и windows.

Совместное использование конфигурации vim

Моя первая задача - разделить конфигурацию (.vimrc / _vimrc и .vim / _vimfiles) между ними. В самом деле, я недавно размещаю свою конфигурацию vim на github и пытаюсь обновить свои плагины через github.

Так что я немного погуглил, чтобы найти лучший способ сделать это, но мне не удалось найти «хорошее решение» (хотя определить его нелегко ...). В любом случае, многие люди сходятся во мнении, что лучше всего использовать windows-gvim, а не cygwin-gvim (я не смог использовать cygwin-gvim, вероятно, из-за проблем с X, но я не хотел смотреть дальше). Итак, первый вопрос: это правда?!

Тогда я попытался найти некоторые решения на основе windows-gvim. На данный момент я связал win env. в cyg env.:

.vim -> /cygdrive/d/Program Files/Vim/vimfiles/
.vimrc -> /cygdrive/d/Program Files/Vim/_vimrc

Но когда я открываю gvim из cygwin, он не работает. Я думаю, что win-gvim не может читать симлинки cygwin.

Я пытался связать директорию vimfiles (так что win side), но они win-gvim тоже ничего не могут найти! Что я не понимаю, так это то, почему win-gvim, запущенный из cygwin, просматривает файлы из моего домашнего каталога cygwin?!

Я читал, что можно объявить переменную HOME в Windows, чтобы помочь win-vim, но я боюсь, что она может иметь побочные эффекты ...

Вот и все для конфига, конфиг ... У кого-нибудь есть решение?

Запуск vim

Кроме того, для запуска gvim я использую псевдоним функции, которая переводит сигарет в winpaths:

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,\" \"$@\""

Это хорошая практика?

Спасибо за вашу помощь:)

Plouff

Ответы [ 3 ]

10 голосов
/ 14 августа 2011

Я храню свои точечные файлы в 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

Это заботится о vim в cygwin (и терминал 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)

Это успешно работает для меня уже около двух лет.

1 голос
/ 10 октября 2014

Я использую Homeshick , чтобы хранить мои точечные файлы в GitHub, вместо использования Dropbox, как @ rossipedia , поэтому я предпочитаю сделать настройки Cygwin «авторитетной» и разрешить Windows gVim использовать их.

Вики Vim Tips объясняют, как это сделать. Исходя из этого и обновив для Homeshick, создайте файл %HOMEPATH%\_vimrc в Windows, который содержит следующее:

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
0 голосов
/ 21 августа 2011

Хорошо, я наконец-то нашел время, чтобы исправить эту проблему!Чтобы найти ./_(g)vimrc, (g) vim сначала ищет в каталоге $ HOME.Если он не может найти в нем _ /. (G) vimrc, он смотрит в каталог $ VIM.

Поскольку cygwin устанавливает переменную среды $ HOME, мой win-gvim пытался открыть ссылкув моем домашнем каталоге.Поэтому, чтобы загрузить правильный файл 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 \"$@\""

В сочетании с решением Брайана Росса, теперь я могу поделиться своим конфигом!Спасибо за вашу помощь.

Теперь мне нужно исправить эту проблему с пробелами ......

...