Re:ゼロから始めるvim拡張生活

Adways Advent Calendar 13日目の記事です。

http://blog.engineer.adways.net/entry/advent_calendar/archive


どうもこんにちは!入社1年目インフラの奥村です。

今日はタイトルの通り

Re:ゼロから始めるvim拡張生活をしていきたいと思います。

Re:ゼロから始める異世界生活というアニメが超面白くてとても影響を受けた人物の一人です。
このアニメは主人公の少年が突如異世界に飛ばされ、死に戻り(死んで時間を戻す力)を使って様々な困難に立ち向かっていくという物語です。
と、急なアニメの紹介はさておき、

僕は会社に入るまでvimを使ったことがありませんでした。もちろんEmacsも使ったことがありませんでした。今でもEmacsがどういうものかわかっていません。僕にとってvimは異世界だったのです。

使い始めて8ヶ月間標準のvimしか使ってこなかったので、そろそろ拡張しようと思いvim advent calenderを読んでいると

qiita.com

こちらの記事でvim bootstrapなるものが紹介されていました。

http://vim-bootstrap.com/ (vim bootstrapのURL)

vim bootstrapを使うと選択した言語に適した.vimrc を作成してくれるのです!

とりあえずvim bootstrapを利用し、強化された.vimrc をながめてvim拡張の世界に飛び込んでいこうと考えました。

いろいろいじった末に設定ミスって元にもどせなかったら嫌だなと思い、vim bootstrapで作成されたvimrc を初期状態にもどすansibleを書きました。

今回は best practiceに合わせるためvimのroleを作りました。

ファイル構成

構成はこのようになりました

├── files
│   └── vimrc #何も書いていないvimrc
└── tasks
    ├── get_vimrc.yml #vim bootstrapで作成されるvimrcをダウンロードしてくるタスク
    └── main.yml

group_vars/all

---
vim:
  bootstrap:
    active: True
    use: python
    download_vimrc:
      - javascript
      - perl
      - python
      - ruby
  plane:
    insert:
      - "set nonumber"
      - "syntax on"
      - "set tabstop=4"
      - "set expandtab"

ansible

中身はこんな感じです

taska/main.yml

---
- name: Install vim by yum
  yum: name=vim state=present

- block:
    - name: get .vimrc files
      include: get_vimrc.yml 
    - name: copy .vimrc 
      copy: src={{ vim.bootstrap.use }} dest=~/.vimrc
 
    - name: PlugInstall
      shell: bash -lc "vim +PlugInstall +qall"
  become: no
  when: vim.bootstrap.active == True #vim bootstrapを使うならこのブロックが適用される

- block:
    - name: copy default vimrc
      copy: src=vimrc dest=~/.vimrc

    - name: insert farst settings
      lineinfile: line={{ item }} dest=~/.vimrc insertafter=yes
      with_items: "{{ vim.plane.insert }}"
  become: no
  when: vim.bootstrap.active == false #vim bootstrapを使わないならこのブロックが適用される

vim bootstrapを使う場合とvim bootstrapを使わない場合で分けれるようにしました。 vim.bootstrap.activeTrueFalse で使い分けるようにします。

tasks/get_vimrc.yml

---
- name: get vimrc files
  become: no
  local_action: shell bash -lc "curl 'http://vim-bootstrap.com/generate.vim' --data 'langs={{ item }}&editor=vim' > {{ playbook_dir }}/roles/vim/files/{{ item }}"
  with_items: "{{ vim.bootstrap.download_vimrc }}"

vim bootstrapはcurlで落としてくることができるので

vim.bootstrap.download_vimrc でダウンロードしてくるvimrcを指定できるようにします。 上記のvarsファイルだと

 ── files
    ├── javascript
    ├── perl
    ├── python
    ├── ruby
    └── vimrc

こんな感じになります。

vim bootstrapを使わない場合のvimrcvim.plane.insert に書いた設定を一行一行追加していくようになっています。

さぁこれで準備はできました。

拡張のためにいろいろ編集した.vimrc をfilesのvimrcに上書きすれば良いのです。そしてそのvimrcをgit管理すればバージョン管理もできますね。

さらに作ってから気づいたんですが、ansibleで初期状態に戻したりできることによって複数のマシンで同じ拡張のvimが使えるようになるんです!

実行

今回はvim bootstrapでpython用のvimrcを有効化したいと思います。

vim.bootstrap.active: True
vim.bootstrap.use: python

こうなるようにvarsファイルをセット そしてansibleを実行すると

f:id:AdwaysEngineerBlog:20161219094251p:plain

これから

f:id:AdwaysEngineerBlog:20161219094305p:plain

になりました!

まとめ

僕はこれで、間違って進んでしまったvim拡張を元の状態に戻すことができるようになりました。vimrcが死に戻りするわけですね。

まずは、vim bootstrapのvimrcを眺めたり変更したりしていきたいとおもいます。

さぁ始めよう!

ゼロから始める異世界(vim)生活を!


次は菊池さんの記事です。

http://blog.engineer.adways.net/entry/advent_calendar/14