読者です 読者をやめる 読者になる 読者になる

アルパカDiary Pro

はてなブログProではありません

アルパカChef日記番外編 VimでChefクックブックを編集する時に便利かもしれないプラグイン

今回は少し趣向を変えて、Vimのお話。


自分はビマーなので、ChefのクックブックをいじるのにもVimです。
そこでVimでクックブックを書く時に便利(?)
かもしれないプラグインやScriptを紹介してみます。



chef.vim

http://www.vim.org/scripts/script.php?script_id=3623
リソース間を行き来するのを便利にしてくれるプラグインです。

.vimrc

まずは以下を追記しておきます。
キーマップはお好きな様に。

nnoremap <silent> <leader>cf :ChefFindAny<CR>
nnoremap <silent> <leader>cs :ChefFindAnySplit<CR>
nnoremap <silent> <leader>cv :ChefFindAnyVsplit<CR>
nnoremap <silent> <leader>cr :ChefFindRelated<CR>
attributeジャンプ

attributeっぽい名前の上で実行します。

# 「node['apt']['cacher_port']」のどこかにカーソルを置いて <leader>cf
port = node['apt']['cacher_port']

カーソルを置いて cf を打鍵すると
attributeが定義されているファイルにジャンプしてくれます。

template / fileジャンプ

sourceのファイル名の上で実行します。

# 「01proxy.erb」のどこかにカーソルを置いて <leader>cf
template '/etc/apt/apt.conf.d/01proxy' do
  source '01proxy.erb'
  mode 00644
end
レシピジャンプ

include_recipeのレシピ名の上で実行します。

# 「apt::cacher-client」のどこかにカーソルを置いて <leader>cf
include_recipe "apt::cacher-client"
definitionジャンプ

definitions名の上で実行します

# 「authz_groupfile」のどこかにカーソルを置いて <leader>cf
apache_module "authz_groupfile"
relatedジャンプ

relatedは「対になっているっぽいファイル間」を移動します。
たとえば
「recipes/default.rb」⇔「attributes/default.rb」
などです。
recipes/default.rbを開いている時に
cr を打鍵すると
attributes/default.rb へ移動します。




ドキュメントを見たい時

chefのリソースドキュメントを見たい時、いちいちWebで検索するのダルいので
ページヘ直接ジャンブ出来るようなVimスクリプト書いてみました。
かなり適当。

" jump chef doc
"let g:chef_doc_browser = 'open -a Firefox'
let g:chef_doc_browser = 'open -a /Applications/Google\ Chrome.app'
let g:chef_doc_site = 'http://docs.opscode.com'
function! ChefDocJump()
    let s:keyword = expand("<cword>")
    if s:keyword != ""
        let s:site_path = g:chef_doc_site .'/resource_'. s:keyword .'.html'
        let s:ret = system(g:chef_doc_browser. ' '. s:site_path)
    else
        echoh None
    endif
    return 1
endfunc
nmap <Leader>cj :call ChefDocJump()<CR>
例:templateリソースのドキュメント見たい時

以下の場合、「template」の上にカーソルを置き
cj を打鍵すると
指定したブラウザでopscodeのtemplateページを開きます。

template '/etc/apt/apt.conf.d/01proxy' do
  source '01proxy.erb'
  mode 00644
end

ref.vimを使う方法も

もちろんref.vimインストールが前提ですが。
こんなのを.vimrcに追記しておいて、

let g:ref_source_webdict_sites = {
\   'chef': {
\     'url': 'http://docs.opscode.com/resource_%s.html',
\   },
\ }

以下のコマンドを実行するとVim上でそれなりなドキュメントが見れます。

:Ref webdict chef <リソース名>


この辺り、もう少しきちんとVimスクリプト書いて
もっと使えるものにしたいなー。。。


では、良いChefライフを。