Плюсы и минусы для каждого межплатформенного решения 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 в домашней папке имеет специальный значение).