LoginSignup
0
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-12-07

はじめに

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

tl;dr

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

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

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

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

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

どう指定するか

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

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

        call mylib#myfunction(arg)

 (中略)

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

 (中略)

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

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

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

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

おわりに

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

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1