Плюсы и минусы для каждого межплатформенного решения vimrc?

Когда вы работаете с конфигурационными файлами .vimrc в Linux и Windows (две системы, которые я использовал до сих пор) и пытаюсь сохранить межплатформенные конфигурации, я нашел в основном два решения:

  • Создайте новую папку для файлов vim в /home/user, поэтому обе системы имеют одинаковое имя vim (вместо стандартного .vim в linux и vimfiles в Windows) и используйте set runtimepath для получения эта новая папка;

    установить runtimepath = ~/vim_local, $VIMRUNTIME источник ~/vim_local/vimrc

    Источник

  • Создайте кучу условий os (например, has("32")) в .vimrc, когда это необходимо, на основе платформы или возможностей, но сохраняя исходный unix имена и создание символических ссылок в домашней папке Windows для исходных файлов (vimfiles to .vim где-то, возможно, .vim dir в Windows home или даже папка dropbox). (Я не тестировал этот подход в более старых версиях Windows, таких как XP).

Какое решение вы предпочитаете и почему? Каковы недостатки каждого решения? Какие другие решения у вас есть? (Вы можете разместить свой собственный .vimrc здесь, чтобы обсудить.)

Если вы используете какой-либо элемент управления источником в конфигурационных файлах .vimrc, вы также обновляете свои файлы плагинов (поэтому, когда "развертывание" вашей конфигурации на компьютерах, вы делаете только checkout/clone из своего репозитория)? Многие люди используют патоген и сохраняя каждый плагин внутри собственной папки (обычно git repo от github). Имеет ли смысл контролировать версию плагина, который уже является хранилищем из других источников?

Ответы

Ответ 1

Я использую что-то, приближающееся к опции 2, но, вероятно, рассмотрел вариант 3. Я держу все в одной папке с именем ~/.vim или c:\vim\vimfiles. Это версия с Bazaar и поддерживается на сервере с доступом sftp. При установке vim на новую машину Windows (с Bazaar) я помещаю ее в c:\vim\vim73 и делаю:

bzr co sftp://<username>@<server>/path/to/vimfiles
copy vimfiles\vimrc_linker.vim _vimrc

На машинах Linux я:

cd
bzr co sftp://<username>@<server>/path/to/vimfiles .vim
ln -s .vim/vimrc_linker.vim .vimrc

vimrc_linker.vim содержит одну строку:

runtime vimrc

который открывает файл с именем vimrc, который хранится в .vim (или vimfiles в Windows). Это позволяет мне поддерживать vimrc под тем же контролем версий, что и остальная часть каталога .vim. Поскольку я обычно использую cygwin Bazaar для Windows, я сохраняю все плагины с окончанием строки unix, чтобы избежать проблем с совместимостью (как Windows, так и Linux vims справляются с окончанием строк в Unix в плагинах, но Linux не подходит для окончаний строк Windows).

Использование контроля версий позволяет мне легко поддерживать все ПК, которые я использую в синхронизации, и если я установлю плагин и не люблю его, я могу очень легко вернуть изменения, не задумываясь о том, какие файлы были установленный этим плагином (VCS говорит мне).

Что касается условий os, я использую has("win32") и т.д., чтобы различать. Тем не менее, существует очень мало ситуаций, требующих этой дифференциации, поэтому это небольшое неудобство. Мой vimrc имеет длину 1000 строк (у него есть довольно много функций, которые я никогда не получал, чтобы раскалываться в плагины), и только около 10-15 находятся внутри блоков has:

  • Конфигурация шрифта
  • Путь к ctags/cscope, поскольку у меня есть исполняемый файл Windows в vimfiles, чтобы упростить его работу на нескольких ПК без большой установки.
  • Отменить расположение dir
  • Отображение (,x) для максимизации окна GVim: это делается по-разному в Windows и Linux
  • В Windows некоторые сопоставления для vimtweak.dll будут полностью полны (без заголовка или чего-либо еще). Не нашли эквивалент для Linux.

Ответ 2

Я помещаю это в свой .vimrc:

set runtimepath^=~/.vim  "Use instead of "vimfiles" on windows

поэтому имя каталога .vim остается на обеих платформах. Я мог бы использовать условие os, чтобы запускать его только в окнах.

Я обнаружил, что лучше всего быть как можно скорее, даже на окнах. Я использую unix-строки по умолчанию (вы не хотите, чтобы CR в конфигурации vim, особенно):

set fileformats=unix,dos,mac

И специфичные для платформы шрифты:

set guifont=Consolas:h12,Monaco:h15,Inconsolata:h12

Я также использую управление версиями (git/github) для dotfiles/config/etc в моем домашнем каталоге, и он отлично работает. Единственный трюк - правильно настроить проигнорированные файлы, чтобы я не постоянно рассказывал обо всех файлах там, где я не хочу версии (мне пришлось использовать .git/info/exclude, потому что .gitignore в домашней папке имеет специальный значение).