vim pluginのhello worldが意外と簡単だった

vim pluginの作り方

やっぱなんでも最初はhello worldから入りますよね。 というわけで以下の記事を参考にはじめてvim pluginを作りたいと思います!

qiita.com

ソースコード

pluginは以下に置いてあります。 zを押すとHello World!と表示されるプラグインです。

https://github.com/aoi1/helloworld-vim

github.com

解説

ディレクトリ構成

ファイルとディレクトリ構成は以下のようになっています

helloworld-vim
├── README.md
├── autoload
│   └── helloworld.vim
└── plugin
    └── helloworld.vim

起動をなるべく早くする、余計な関数は読み込まないというお作法にのっとりディレクトリを2つにわけています。

  • plugin以下は、vim起動時に呼ばれるスクリプトファイル
  • autoload以下は、必要になったタイミングで読み込まれるスクリプトファイル

このようにプラグイン実行時に呼び出される関数はautoloadに出します。

READMEを書くのもお作法のようです。今回ちゃんと書いてないですが…

vimスクリプト

vimスクリプトの中を見ながら解説していきます。

plugin/helloworld.vim

" hello world for vim plugin
" Version: 0.1

scriptencoding utf-8←お作法:エンコーディングを指定する

if exists('g:loaded_helloworld')←あまりよくわかってない。多分helloworldがloadされていたら何もしないってことかな
    finish
endif
let g:loaded_helloworld = 1

" ユーザー設定を一時退避←お作法:ユーザー設定が悪影響を及ぼさないよう一時退避
let s:save_cpo = &cpo
set cpo&vim

:nmap z :call helloworld#helloworld()<CR>←実際のプラグインの関数呼び出し

" ユーザー設定を元に戻す←お作法
let &cpo = s:save_cpo
unlet s:save_cpo

autoload/helloworld.vim

scriptencoding utf-8

if !exists('g:loaded_helloworld')←helloworldが読み込まれていなかったら何もしない?
  finish
endif
let g:loaded_helloworld = 1

" ユーザー設定を一時退避←お作法
let s:save_cpo = &cpo
set cpo&vim

function! helloworld#helloworld()←functionのビックリマークがわからない。ファイル名#関数名で呼び出し
  echo "Hello World!"
endfunction

" ユーザー設定を元に戻す←お作法
let &cpo = s:save_cpo
unlet s:save_cpo

コメントにある通りまだよくわかっていないところもあって 勉強不足ではありますが、これで動きました!!!やったね!!!!!!!

自分がネットにあげたプラグインが自分の環境で動くのってなんだかすごく感動しますね。 これを機にもうちょっと実用的なプラグイン作って見たいです!!!

簡単なプラグインではありましたが、プラグインに対する考えが変わりました!

プラグインを作る前のイメージ プラグインを作った後のイメージ→ f:id:blux:20190301215939p:plain

余談

とある日

f:id:blux:20190301215702p:plain