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

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

初心者のためのVimプラグインの作り方

Vim

実践Vim 思考のスピードで編集しよう! (アスキー書籍)

実践Vim 思考のスピードで編集しよう! (アスキー書籍)

はじめに

vim scriptでpythonが使えるという

街の噂を聞いたので、

急にvim プラグインを作りたくなりました。

myenigma.hatenablog.com

 

そこでvimプラグインの作り方を調べてみたので、

まとめておきます。

vimプラグインのひな形を作る

vimプラグインには、

ディレクトリ構成やファイルの配置が

ある程度に決まっているので

自分は下記のvimプラグインのひな形を作るための

vimプラグインを使うことにしました。

 

使い方は(Neobundleを使っている場合)、

vimrcに

NeoBundleLazy 'mopp/layoutplugin.vim', { 'autoload' : { 'commands' : 'LayoutPlugin'} }

と書いて、

:NeoBundleInstall

して、vim上で

:LayoutPlugin sample.vim

とすると、sample.vimというプラグインディレクトリができます。

 

あとはGithubなどにリポジトリを作って、

このディレクトリをコミット&pushするようにすれば

誰でも使えるようになります。

 

そして、そのプラグインを使いたい場合はvimrcで

NeoBundle 'AtsushiSakai/sample.vim'

のようにユーザ名とプラグイン名を指定して、

NeoBunbleInstallすれば、

自作のvimプラグインが/bundle/pluginの下に

インストールされます。

 

autoloadとpluginフォルダ

先ほど作成したvim pluginのフォルダには、

README以外に、autoloadとpluginフォルダがあると思います。

どちらもvimスクリプトを入れる場所なのですが、

使用する用途が違います。

 

まず、pluginフォルダは

毎回vimが立ち上がる時に読み込まれるvimスクリプトを入れます。

しかし、このpluginフォルダスクリプトの数が多かったり、

処理が重かったりすると、

vimを立ち上げるのに時間がかかってしまいます。

 

そこで使用されるのがautoloadフォルダです。

この中のフォルダのvimscriptは、

そのvimscript内で定義されたメソッドが呼ばれた時に、

初めてロードされるようになります。

(使う時にしか処理されないようになる)

 

ですので、これらのフォルダの使い分けとしては、

  • pluginフォルダ

commandの設定など、そのプラグインを呼ぶための

必要最小限の処理を記述するスクリプトを置く

 

  • autoloadフォルダ

プラグインのメインの処理を書いたスクリプトを置く

といった感じです。

 

詳しいことは下記の資料が参考になります。

vim pluginのお約束

先ほどのLayoutPluginで生成される

.vimファイルを見ると、

.vimファイルのvim pluginでのお約束を勉強することができます。

"=============================================================================
" File: bookmarklet.vim
" Author: AtsushiSakai
" Created: 2015-07-24
"=============================================================================

scriptencoding utf-8

if exists('g:loaded_bookmarklet')
    finish
endif
let g:loaded_bookmarklet = 1

let s:save_cpo = &cpo
set cpo&vim

" vim script

let &cpo = s:save_cpo
unlet s:save_cpo

まず、最初の行は文字のエンコーディングです。

 

続いて、loaded_というグローバル変数をチェックする所は、

プラグインのロードを管理するグローバル変数を使って、

すでにロードしていたら、下記のコードは実行しないようにしています。

 

最後に、save_cpoという部分は

下記の記事のように、

ユーザの設定を一時的に無効化するおまじないです。

これをすることで、ユーザの設定に影響されずに

vim pluginを動作できるようにしているようです。

 

ですので、プラグインの処理コードは

"vim scriptというコメントを

書いた所に書く必要があります。 

注意点

個人的にハマったところなど

  • vimのコマンドにアンダーバー(_)は使えない かつ 先頭は大文字

  • プラグイン名に.vimと付けた場合は、それより前の名前をautoloadの#の前につける

参考資料

Vimプラグインが出来るまで - ぼっち勉強会

【Vim Advent Calendar 2012】Vim プラグインを github で公開するまで【1日目】 - C++でゲームプログラミング

Vim documentation: usr_41

AtsushiSakai/bookmarklet.vim

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com