ローカルに置いたプラグインも toml で管理できるのかわからなかったのでやってみました。 ソースを読んだりしていけそうだったのでやってみたら動きました。
参考:
さすがにそろそろシンタックスハイライトが欲しいなと思って調べてみたのですが、
以下、NeoBundleの設定です。 余談ですが NeoBundle から dein.vim に乗り換えると闇の力を得られるそうです。
リポジトリを直接指定できないので、手動でディレクトリを掘りましょう。
簡単のため、こんな感じで
$ mkdir ~/.vim/bundle/manual
ディレクトリ名は何でも大丈夫です。
.vimrc に以下を記述します。
NeoBundle 'apple-swift', {'type': 'nosync', 'base': '~/.vim/bundle/manual'}
今回は
apple-swift
にしてみました。ここは何でも大丈夫です。base
以下もお好みで大丈夫です。
base
で指定したディレクトリに移動し、cloneします$ cd ~/.vim/bundle/manual $ git clone git@github.com:apple/swift.git apple-swift
結構時間かかります。
終わったら以下のコマンドを打ちます。 swift.gitリポジトリからutils/vimだけ取り出します。
$ cd apple-swift $ git filter-branch --subdirectory-filter utils/vim HEAD
これで Syntax highlight が動きます。
このように、 NeoBundle での設定しか出てきませんでした。 普通に dein.vim を利用するだけであれば、上記に加え、 init.vim に
call dein#add('~/.vim/bundle/apple-swift')
で問題なさそうです。しかし toml でローカルのプラグインを 読み込むことってできるのか実証結果が見つかりません。
git filter-branch --subdirectory-filter
も調べておいたほうがよさそうです。
リポジトリのファイルからサブフォルダを抽出するには、 以下の情報を指定して
git filter-branch
を実行します。
FOLDER-NAME
: 別のリポジトリの作成元にしたい、プロジェクト内のフォルダです。BRANCH-NAME
:master
やgh-pages
などの、現在のプロジェクトのデフォルトブランチです。$ git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME BRANCH-NAME # Filter the specified branch in your directory and remove empty commits > Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (89/89) > Ref 'refs/heads/BRANCH-NAME' was rewritten
これで、リポジトリにはサブフォルダ内にあったファイルのみが含まれることになります。
filter-branchとは
これは、大量のコミットの書き換えを機械的に行うオプションです。 (filter-branch自体はシェルスクリプトで書かれています。) これを使うとレポジトリの歴史上からコミットされたファイルを完全に抹消することができます!
今回、ファイルを抹消するために filter-branchの–index-filter オプションを使います。
使うシチュエーション
こんな怖いオプションどこで使うのかというと、例えば下記のようなシチュエーションが考えられます。
- パスワードファイルを間違ってcommitしてしまった or やんごとなき事情により削除したい
- 巨大なファイルを間違ってcommitしてしまった
github のヘルプはかなりフランクに書いてありますが、たいへんなプログラムのようです。 慎重に行います。
dein#local({directory}, [{options}, [{names}]])
dein#local() で自分の書いたプラグインとかをおいてあるディレクトリを指定する _vimrc に以下のように記述する
... if dein#load_state(s:dein_dir) call dein#begin(s:dein_dir) ... call dein#local('~/vim/myplugins', \ {}, \ [ \ 'scrapbox.vim', \ ]) call dein#end() call dein#save_state() endif
scrapbox.vim
というプラグインを読み込んでくれる 第2引数にオプションを指定することも可能
普通に読み込む場合はこのような実証ログを発見することができました。 しかし toml を利用した記事が見当たりません。
- dein#add({repo}[, {options}])
- Initialize a plugin. {repo} is the repository URI or local repository directory path. If {repo} starts with github user name (ex: “Shougo/dein.vim”), dein will install github plugins.
このあたりとか、この辺りのソースを流し読んでみました。
github の時と同様、 repo =
でローカルのディレクトリを指定してあげれば大丈夫そうです。
やってみます。以下を dein.toml に追加しました。
# [local] apple-swift-syntax-----
[[plugins]]
repo = '~/dotfiles/vim_localplugin/apple-swift-syntax'
セーブして再起動させます。
無事入りました。
github からソースをとってきて filter-branch する過程を shell script にしました。
#!/bin/sh
localplugindir="$HOME/dotfiles/vim_localplugin";
swiftdir="${localplugindir}/apple-swift-syntax";
if [ -e $localplugindir ]; then
rm -rf $localplugindir
fi
mkdir $localplugindir
cd $localplugindir
if [ -e $swiftdir ]; then
rm -rf $swiftdir
fi
git clone https://github.com/apple/swift.git $swiftdir
cd $swiftdir
git filter-branch --subdirectory-filter utils/vim HEAD
これで環境が変わってもすぐ復元できそうです。