GitHub для .vimrc та плагінів


21

Я знаю, що багато людей зберігають свій .vimrc на GitHub, щоб полегшити роботу над новими машинами, і це має для мене повний сенс. Однак включення плагінів є проблематичним, оскільки плагіни, які я використовую, вже є сховищами git. Як можна створити репо, яке буде відслідковувати як їх .vimrc, так і будь-які плагіни, які можуть бути встановлені?


Я відчуваю, що це може бути занадто орієнтоване на думку; немає об'єктивних "найкращих", і є багато хороших варіантів, кожен зі своїми плюсами і мінусами. Також біт, що стосується вкладених сховищ, приводить питання більше до категорії "використання git" і менше про vim. Можливо, якщо натомість ви зосередилися на певній проблемі, з якою у вас були плагіни vim чи vim, намагаючись зберегти свою конфігурацію на github?

3
Я можу відредагувати його, щоб вийняти найкраще, якщо вам подобається; мій намір був запитати більше про те, "як це зробити?" питання, хоча визнаю, що спосіб, про який я думав про розгляд проблеми, може бути не ідеальним.
Том

Це може допомогти, але це може просто перетворити на "перелік речей" питання (знову ж таки, існує багато різних способів зробити це ефективно). Наразі існує мета-тема щодо таких питань, якщо ви хочете внести свій внесок у дискусію про те, як ми повинні ставитися до такого роду питань.

2
Відредаговано. Я сподіваюся, що я зрозумів, що я запитую "як це зробити?"
Том

1
Просто використовуйте диспетчер плагінів, як neobundle.
Філіп

Відповіді:


18

Як поводитися з сховищами всередині репозиторіїв, що триває, залишається питанням з git. Підмодулі Гіта - це один із способів вирішення ситуації за рахунок додавання трохи більшої складності для відстеження. Сайт git має вступ до субмодулів .

Основна ідея полягає у збереженні посилання на інший сховище git, пов’язане із шляхом до вашого сховища. Ці посилання зберігаються у файлі .gitmodulesв корені вашого сховища (яким керує git, тому залиште його в спокої). Деякі складності виникають для відтворення під час клонування репо, в якому є підмодулі: потрібно явно git submodule initстворити .gitmodulesфайл, а потім git submodule updateклонувати підмодулі.


Ось детальний вказівки щодо того, як я додам новий плагін vim до мого сховища dotfiles (я цей ~/.vim/псевдонім перейшов .vim/) за допомогою підмодуля:

$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir

Після цього submodule add, a git statusпоказує, що ви змінили (або створили) .gitmodulesфайл, приблизно таким чином:

[submodule ".vim/bundle/vim-elixir"]
    path = .vim/bundle/vim-elixir
    url = https://github.com/elixir-lang/vim-elixir.git

Він також повинен відображатися .vim/bundle/vim-elixirяк новий файл. Git трактує цей шлях спеціально зараз: це звичайний каталог у вашій файловій системі (тому vim завантажує його нормально), але git diffтрактує його як конкретну комісію зі свого сховища. Переглядаючи diff або log для цього шляху (наприклад git log -1 -u .vim/bundle/vim-elixir), git покаже його як однорядковий рядок, як це:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

Оновлення до останньої версії плагіна відповідає заходженню до сховища підмодуля та перевірці нової фіксації, а потім здійснення цього репозиторію:

$ cd .vim/bundle/vim-elixir
$ git remote -v            # note: the submodule repo's origin, not my repo's
origin  https://github.com/elixir-lang/vim-elixir.git (fetch)
origin  https://github.com/elixir-lang/vim-elixir.git (push)

$ git pull
# ...

$ cd -     # back to my repository's root
$ git status
# ...
    modified:   .vim/bundle/vim-elixir (new commits)

$ git diff .vim/bundle/vim-elixir
# ...
-Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
+Subproject commit d59784e7afbd0d55c501e40c43b57cbe6f6e04c2

$ git commit -m "update vim-elixir" .vim/bundle/vim-elixir

Дякую, це схоже на те, що я шукав!
Том

Ах, я не помітив, що ваша відповідь була розміщена, оскільки я певний час редагував свою.
муру

23

Вам не потрібно зберігати плагіни у своєму VCS; ви також можете використовувати менеджер пакунків Vim. З вчорашнього дня я використовую vim-plug :

Ви можете визначити плагіни у своєму vimrc так:

call plug#begin('~/.vim/plugged')

Plug 'embear/vim-localvimrc'
Plug 'kchmck/vim-coffee-script'
" ... etc

call plug#end()

Потім перезапустіть Vim та встановіть плагіни за допомогою:

:PlugInstall

Або ви можете додати цей фрагмент із FAQ до вашого файлу vimrc перед plug#begin()викликом:

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall
endif

Це додасть плагіни ~/.vim/plugged. Вам не потрібно зберігати цей файл у своєму VCS . Якщо ви хочете використовувати цей vimrc на іншій машині, просто зателефонуйте :PlugInstallна цю машину.

щоб видалити плагін, видаліть його з файлу vimrc та запустіть:

:PlugClean

Зауважте, що vim-plug не підтримує встановлення скриптів з веб-сайту скриптів Vim, але ці сценарії відображаються в GitHub , тому не потрібно цього робити.

Також є деякі додаткові переваги до цього, такі як легше оновлення плагіна та завантаження на вимогу для кращої продуктивності. Ви також не ризикуєте порушити ліцензійні умови плагінів, які ви поширюєте з вашими файлами vimrc.

Дивись також:


5

Я зберігаю свій vimrc у github та плагінах як підмодулі мого сховища.

У файл readme.md я поміщаю один вкладиш, який витягує сховище, потім запускає сценарій налаштування, таким чином я можу скопіювати один рядок у редактор, і він налаштовує все. Це робить трохи більше, ніж просто vim (але не багато).

https://github.com/Loki-Astari/UnixConfig

Щоб використовувати його:

cd
git clone git@github.com:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd

PS. Готовий прийняти будь-яку пораду (як я це робив століття тому і з тих пір не торкався).

Примітка. Моя улюблена частина полягає в тому, що вона також налаштовує git і налаштовує її на використання vim як інструмент diff для git. Vimdiff - найкращий інструмент різниці.


5

Якщо ви хочете дотримуватися патогена, одним із способів може бути використання підмодулів Git . Коли ви додасте підмодуль, git розпізнає його як з іншого сховища та залишає його вміст у спокої (якщо він не був змінений; у такому випадку він відображатиметься як вміст без відстеження, коли ви це робите git status). Якщо у вас є всі ваші плагіни на основі Github bundle/, додавання їх у підмодулі - це досить просте завдання з хорошою оболонкою:

for f in bundle/*/ 
do 
    git submodule add $(awk '/url =/{print $3}' "$f/.git/config") "$f"
done

Ви можете подивитися, як з’являються субмодулі в моєму репортажі vimrc .


Якщо ви додасте файл до підмодулю або внесете деякі зміни, які не впливають на сховище, git statusвсе одно буде скаржитися на те, що підмодуль має незапущені зміни або незахищені файли. Ви можете зробити git ігнорувати такі зміни, додавши ignore = dirtyдо конфігурації підмодуля у .gitmodulesфайлі. Наприклад:

[submodule "bundle/LaTeX-Box"]
    path = bundle/syntastic
    url = https://github.com/scrooloose/syntastic.git
    ignore = dirty

Однією з переваг субмодулів є те, що перегляд підмодуля додається до сховища git, щоб git initавтоматично піклуватися про перевірку саме цієї версії. Ви можете викинути це і сказати git ігнорувати підмодулі після додавання їх, додавши ignore = allїх конфігурацію у .gitmodulesфайл. Наприклад:

[submodule "bundle/LaTeX-Box"]
    path = bundle/LaTeX-Box
    url = https://github.com/LaTeX-Box-Team/LaTeX-Box.git
    ignore = all

Нарешті, одна команда оновити їх усіх!

git submodule foreach git pull

Слово застереження: Я новачок у підмодулях. Я не дуже впевнений, як вони поводяться.


vim-пандемія - ще один спосіб посилення патогена без необхідності використання підмодулів. Пандемія обробляє віддалені сховища, залишаючи Pathogen для обробки маршруту. Це означає, що потрібні два інструменти, але для різних завдань, які "слід" обробляти окремо.
jalanb

Хто-небудь може прокоментувати, чому tpope в readme патогена може сказати, чому субмодулі - це не так? Я також не знаю підмодулів (і моє рішення чудово працює для мене навіть без диспетчера плагінів), але я здогадуюсь, що в натовпі антимодулів є щось цікаве.
Даш-Том-Банг

1
@ dash-tom-bang Я не читаю цей біт, як він говорить, що не слід використовувати підмодулі. Я думаю, що він просто говорить, що це не його кращий метод.
Багатий

1
ТБК після декількох років їх використання я роздратувався субмодулями. Зараз я б рекомендував не використовувати їх. Зараз я використовую vim-plug, і це лише полегшило мені життя.
муру

4

Ви можете просто додати цей рядок до свого, .gitignoreщоб ігнорувати всі ваші плагіни та не виконувати їх:

vim/bundle

Крім того, ви сказали, що проблематично, що він буде включати код плагіна, оскільки вони вже є репозиторіями github. Я думаю, ви маєте на увазі, що ви не хочете дублювати код, але я чув, що це говорило, що ви повинні продовжувати і дублювати код, це залежність, щоб ви завжди могли повернутися до певної точки свого коду і знати це це спрацює. Ось деякі статті Джеймса Шора, які розповідають про це: http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . Він говорить про код програмування та npm (на відміну від vim), але я думаю, що аргумент все-таки застосовується, ви хочете, щоб надійне середовище кодувало або писало.


1
"Ви можете просто додати цей рядок до свого .vimrc ..." Ви мали на увазі .gitignore?
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.