君にも書けるVimプラグイン

VimM#2
kana <http://whileimautomaton.net/>

テーマ

Hello Worldを表示するだけの簡単なプラグイン

予定

プラグインのファイル構成

(ふつうの)最小構成は以下の通り:

doc/hello.txt
ドキュメント
:helpで読める
plugin/hello.vim
プラグイン本体
中身はVim scriptの羅列

詳細: :help 'runtimepath'

ドキュメントを書く

実演タイム

:helpの書式 - まとめ

1行目
*plugin-name* summaryとする
:help local-additionsで使われる
リンク
|link|
*link*
その他の要素
他の:helpを見て覚える

プラグインの雛形

実演タイム

viとの互換性云々で必要

let s:save_cpoptions = &cpoptions
set cpoptions&vim

...

let &cpoptions = s:cpoptions

諸事情により必要

if exists('g:loaded_hello')
  finish
endif

...

let g:loaded_hello = 1

関数の定義

実演タイム

まとめ

定義
function! {Name}([{args}]) ...
!はリロード時に面倒なので付けておく
呼び出し
call {Name}([{args}]) (直接)
echo {Name}([{args}]) (式中)
詳細
:help user-functions

Exコマンドの定義

実演タイム

まとめ(1)

定義
command! {opts} {Name} {repl}
引数展開
<args> - 引数がそのまま展開される
<bang> - !が展開される
その他いろいろ

まとめ(2)

オプション
-nargs - 引数の個数の指定
-bang - !の有無の指定
その他いろいろ
詳細
:help user-commands

Key mappingsの定義

実演タイム

まとめ

定義
nnoremap [{opts}] {lhs} {rhs}
落とし穴
これを記すには余白が足りない
詳細
:help key-mapping
Vim: Key mappingを極める

autocmdの定義

実演タイム

まとめ

定義
autocmd {event} {pat} {cmd}
注意点
:autocmdは常に追加される
:augroupでプラグイン分は隔離すること
イベント毎に注意点が様々なので:helpを読むこと
詳細
:help autocommand
:help autocommand-events

今回扱わなかったトピック

まとめ

質疑応答