.vimrcおよびプラグイン用のGitHub


21

多くの人が.vimrcをGitHubに保存して、新しいマシンでの作業を簡単に行えるようにしていることを知っています。ただし、使用するプラグインはすでにgitリポジトリであるため、プラグインを含めることには問題があります。.vimrcとインストールされる可能性のあるプラグインの両方を追跡するリポジトリを作成するにはどうすればよいですか?


これはあまりにも意見志向であるように感じます。客観的な「最良」というものはなく、それぞれに長所と短所のある優れたオプションがたくさんあります。また、ネストされたリポジトリに関するビットは、「gitを使用する」カテゴリにより多くの質問をもたらし、vimについてはより少なくします。おそらく、githubに設定を保存しようとしたときにvimまたはvimプラグインで発生した特定の問題に焦点を合わせた場合はどうでしょうか?

3
必要に応じて編集して、最高の結果を出します。私の意図は、「これをどうやってやるのか」をもっと尋ねることでした。質問、私は問題について行くことについて考えていた方法は理想的ではないかもしれないことを認めながら。
トム

それは役立つかもしれませんが、それは単にそれを「物事のリスト」の質問にするかもしれません(これを効果的に行うための多くの異なる方法があります)。現在、この種の質問をどのように扱うべきかについての議論に貢献したい場合、そのような質問についてのメタに関するトピックがあります。

2
編集済み。「これをどうやってやるの?」
トム

1
neobundleのようなプラグインマネージャーを使用するだけです。
フィリップ

回答:


18

リポジトリ内のリポジトリをどのように扱うかは、gitの継続的な疑問です。Gitのサブモジュールは、状況に対処する1つの方法ですが、追跡するためにもう少し複雑さが追加されます。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 addgit 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またはログを見ると(たとえばgit log -1 -u .vim/bundle/vim-elixir)、gitはそれを次のような1行の文字列として表示します:

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

または、呼び出し前に、vimrcファイルにFAQからこのスニペットを追加でき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スクリプトWebサイトからのスクリプトのインストールをサポートしていませんが、それらのスクリプトはGitHubミラーリングされているため、そうする必要はありません。

これには、プラグインの更新が簡単になる、パフォーマンスを向上させるためのオンデマンドロードなど、追加の利点もあります。また、vimrcファイルで配布しているプラ​​グインのライセンス条項に違反する危険もありません。

こちらもご覧ください:


5

vimrcをgithubに、プラグインをリポジトリのサブモジュールとして保存します。

readme.mdファイルに、リポジトリをプルし、セットアップスクリプトを実行する1つのライナーを配置します。これにより、エディターに1行コピーし、すべてをセットアップできます。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をgitの差分ツールとして使用するようにセットアップすることです。Vimdiffは最高のdiffツールです。


5

Pathogenに固執したい場合、1つの方法は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ない変更を行ったりしても、コミットされていない変更や追跡されていないファイルがサブモジュールにあると文句を言います。ファイルのignore = dirtyサブモジュール構成に追加することで、gitにそのような変更を無視させることができ.gitmodulesます。例えば:

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

サブモジュールの利点の1つは、サブモジュールのリビジョンがgitリポジトリに追加されるためgit init、特定のリビジョンのチェックアウトが自動的に処理されることです。それを捨ててignore = all.gitmodulesファイル内の構成に追加することでサブモジュールを追加したら、gitにサブモジュールを無視するように指示できます。例えば:

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

最後に、それらをすべて更新する1つのコマンド!

git submodule foreach git pull

注意事項:サブモジュールは初めてです。私は彼らがどのように振る舞うか本当にわかりません。


vim-pandemicは、サブモジュールを使用せずに病原体を強化する別の方法です。Pandemicは、リモートリポジトリを処理し、Pathogenがruntimepathを処理するようにします。これは、2つのツールが必要であることを意味しますが、個別に処理する必要がある異種のタスクの場合。
-jalanb

誰かが病原体readmeのtpopeがサブモジュールが進むべき道ではない理由を言うかもしれない理由についてコメントできますか 私もサブモジュールを知りません(そして、私のソリューションはプラグインマネージャーさえいなくてもうまく機能します)が、アンチサブモジュールの群衆には何か興味深いことがあると思います。
ダッシュトムバン

1
@彼はと言うと、私はそのビットを読んでいないダッシュトム・バンあなたがサブモジュールを使用しないでください。彼はそれが彼の好みの方法ではないと言っているだけだと思う。
リッチ

1
TBHを数年使用した後、サブモジュールに悩まされました。私は今それらを使用することをお勧めします。私は今vim-plugを使用していますが、それは私の人生を楽にするだけです。
ムール

4

この行をに追加するだけで、.gitignoreすべてのプラグインを無視し、コミットしません。

vim/bundle

また、プラグインコードが既にgithubリポジトリであるため、プラグインコードを含めるのは問題だとおっしゃいました。私はあなたがコードを複製したくないことを意味推測するが、私が聞いた、それはあなたが常にあなたのコード内の特定のポイントに戻ってできるように、あなたが先に行くと依存だ重複コードべきであると述べた知っていることをそれが動作します。ここではジェームズ・ショアいくつかの記事があるということについての話:http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_buildhttp://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle。彼は(vimではなく)プログラミングコードとnpmについて話しているが、議論はまだ当てはまると思う。


1
「この行を.vimrcに追加できます...」という意味は.gitignoreですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.