Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim の autoload 以下のファイルに定義する関数名の指定方法について調べた

$
0
0

はじめに

Vim プラグインの勉強を続けています。勉強していて、autoload に指定した関数をどう呼ぶかについてすこしハマったので、整理のために書いておきます。

tl;dr

autoload 以下のファイル名と関数名のプレフィックスは一致させる必要があるようです。

autoload に書いた関数が呼ばれない

例として Hello Worldと表示する関数を helloworld.vimに作っていたとします。
最初、関数名を以下のようにしていました。

autoload/helloworld.vim
function! EchoHelloWorld()
  echo "Hello World"endfunction

その上でプラグインを Vim に設定した上で、:call EchoHelloWorld()と実行しても、E117: 未知の関数です: HelloWorldというエラーが表示されてしまいました。

どう指定するか

Vim のマニュアルに記載がありました。以下抜粋します。

Vim には autoload という仕組みがあります。同じこと
を次のように書くことができます:

        call mylib#myfunction(arg)

 (中略)

Vim は関数の名前を見て、それが未定義なら、
'runtimepath' の中から "autoload/mylib.vim" を探します。

 (中略)

ただし、関数名の '#' より前の部分はスクリプトの名前と同じにする必要があります。
そうしないと Vim はどのスクリプトを読み込めばいいのかわかりません。

つまり autoload以下のファイル名を起点に、そこに定義されている関数を読み込みに行くというような動きをしていることがわかります。

上記の例では、ファイル名と関数名のプレフィックスが一致していなかったため、呼び出された関数を定義できなかったということでした。

ファイル名#関数名というルールに則ることが必要なのですね。今回の場合は、helloworld#EchoHelloWorldと定義するべきでした。

おわりに

確かな情報はやはりマニュアルですね。ブログ記事や他のプラグインの書き方も参考にしつつ、マニュアルで正否を確かめるということが必要だなと思いました。

参考


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>