vim scriptの勉強で以下のページを見ていたところ、plugin化のチュートリアルにちょうど良さそうなスクリプトを見つけたのでやってみた。plugin化の手順をメモ。
Vim エディターのスクリプトの作成: 第 5 回 イベント駆動型のスクリプト作成と自動化
plugin化した機能は存在しないディレクトリにファイルを書き込もうとした際にmkdirしてくれるというもの。詳細は↑のページで。
以下に書いたコードはほとんど上記ページからの引用。
1. .vimrcに書いて動作確認
まずは.vimrc上にすべてのコードを書いて思った通り動くか確認する。
augroup automakedir autocmd! autocmd BufWritePre * :call s:automkdir() augroup END function! s:automkdir() let dir = expand("%:h") if (!isdirectory(dir)) call s:askQuit("Directory " . dir . " does not exist.", "&Create?") try call mkdir(dir, 'p') catch call s:askQuit("Failed to mkdir: " . dir, "&Edit anyway?") endtry endif endfunction function! s:askQuit(msg, action) if (confirm(a:msg, "&Quit?\n" . a:action) == 1) exit endif endfunction
2. pluginとして分離
.vim/plugin/に上記のコードを移し、plugin用の定形処理を書く。
定形処理は以下の2つ。:h write-pluginに書いてある通り。
a. 複数回読み込まれるのを防ぐ処理
if exists("g:loaded_automkdir") finish endif let g:loaded_automkdir = 1
b. 改行して書けるようにするための設定変更
let s:save_cpo = &cpo set cpo&vim "ここにコード本体 let &cpo = s:save_cpo unlet s:save_cpo
3. autoloadを使うよう変更
githubに上げたいのでそれ用のディレクトリを用意しplugin, autoloadディレクトリを作る。こんな構成
automkdir.vim/plugin/automkdir.vim
automkdir.vim/autoload/automkdir.vim
autoloadを適用するため、plugin/automkdir.vimから呼ぶ関数の名前をfilename#functionnameの形に変更する。
コード全体はこちらで。
plugin of automkdir · y-kamiya/automkdir.vim@76172ab · GitHub
4. neobundleでinstall
他のpluginと同じように.vimrcに設定を書いてNeoBundleInstallでOK
参考
細かい部分についてはhelpを見るのが最も確実でわかりやすい。vimはhelpが充実していて助かる。
- Vim エディターのスクリプトの作成: 第 2 回 ユーザー定義関数
- Vimプラグインが出来るまで - ぼっち勉強会
- :h write-plugin
- :h add-plugin