Vimの設定ファイル.vimrcはいわゆるdotfilesレポジトリで管理していて 色々な所で共通な物を使っています。
Vimでは dein を使ってプラグインを管理していますが、結構たくさんのプラグインを使っているので 最初に全て用意するのに結構時間がかかります。
1回やれば済むので良いのですが、 新しい環境でパッパと色々とやっていきたい時に、dotfiles導入後でも しばらくプラグインなしでもいいから素早く色々編集していきたいときがあります。
もしくは環境によってはHOMEにあまり色々置きたくないとか。 そういった時に.vimrcを直接編集しなくても deinを使ったり使わなかったりするように出来る設定について。
deinの自動インストール
最初はdeinそのものが入っていないので、自分でgit clone
するなりして
取ってくる必要がありますが、
.vimrcの先頭の方で以下の様な事をすれば
もしdeinがない場合に自動的にインストールすることが出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
これの作業を含めてdeinがインストールされてなかった場合に 外の設定ファイルや対話的な決定で deinを使うかどうか決めたい、ということ。
deinの制御設定
取り敢えず.vimrcは以下の様な感じになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
|
最初のs:use_dein
はこれを0にしたら常に使わない様になります。
次の部分では.vimディレクトリが無ければ作るという作業。
" dein
以下ではまず
- Vimのバージョンが7.4以上(deinの要請)
s:use_dein
が1- ~/.vim_no_deinファイルが無い
という条件を見ています。
s:use_dein
はテスト的なこと以外では通常変えないので、
環境によって使いたくない場合はHOMEディレクトリに~/.vim_no_deinというファイルを
作るとdeinを使わないようになる様にしています。
次にdeinではgit
を使うのでシステムでgit
が使えるかどうかをチェック。
その後はdeinのディレクトリやらレポジトリ情報を入れて、 ローカルにまだインストールされてない場合、
let s:is_clone = confirm("Prepare dein?", "Yes\nNo", 2)
を呼んで対話的にインストールするかどうか聞いています。
confirm
について詳しくは下記参照。
これでy
を選択すればインストールするし、n
もしくはENTER
を押せば
そのままインストールせずに他の設定だけ読み込みます。
新しい環境で取り敢えずdotfilesはインストールしたものの、 色々Vimでパッパと書き換えたい時にはまずはこれでdeinをインストールせずに 使っていきます。
deinがインストールされてるかここでインストールすることを選ぶと
s:dein_enabled
を1にして以下でdeinの設定を使っていくことになります。
まずはプラグインを入れていく設定を書いて、 その後で各プラグインについてPlugin settings以下で設定しています。
confirm()について
今回導入した所なのでちょっと詳しく。
実は今まではHOMEに.vim_deinというファイルがある場合
deinを使う、という形にしてたんですが
1
使うことのが多いのでわざわざ毎回余計なファイルを用意するのは面倒だな、
ということでconfirm
を導入して
一時的にdeinのインストールを回避できる様にしました。
confirm()
は
第一引数が表示されるメッセージで第二引数が選択肢になります。
選択肢は\n
で区切って、最初のものから1, 2, 3…と番号がふられていき、
選択した時にその番号が関数の返り値として帰ってきます。
選択肢を選ぶ際には各項目の先頭の文字が選択肢の文字となって
Prepare dein?
(Y)es, [N]o:
こんな感じの表示になり、Y
/y
を押せば1が、
N
/n
を押せば2が帰って来て関数が終了します。
大文字小文字の区別はありません。
もし選択肢の先頭の文字が被るなどして違う文字を指定したい場合には
confirm("test", "aaa\na&bc", 1)
の様に使いたい文字の前に&
を置くとその文字が選択肢として指定されます。
test
[a]aa, a(b)c:
こんな感じ。
第三引数がデフォルトの返り値で、なにも文字を押さずにENTER
を押した時に
返す値になります。
ヘルプを見るとデフォルト値を設定しない場合は0にしてください、とあるのですが、
0にしておいてENTER
を押すと0を返すだけなのでちょっと注意が必要です。
(バグ?)
この値がない場合はデフォルト値1になります。
また、デフォルト値のところの選択肢の文字がが[]
で囲まれて(上だと2の[N]
の方)他は
()
で囲まれる様になります。
もう一つ第4引数もあってメッセージのタイプ(Generic
とかError
とか)
を選択するものですが余り使うことはないので省略。
詳しくは
:help confirm()
:help confirm
と括弧を省略するとconfirm
というコマンドの項目に飛んでしまうのでちょっと注意。