Calling Vim Features from the Plugin

If you want to use a Vim feature from your Denops plugin, you can call it via the denops instance passed to the plugin's main function. You can rewrite main.ts as follows to register the DenopsHello as a Vim command:

import type { Entrypoint } from "jsr:@denops/std@^7.0.0";
import { assert, is } from "jsr:@core/unknownutil@^4.3.0";

export const main: Entrypoint = (denops) => {
  denops.dispatcher = {
    async init() {
      // This is just an example.
      // Developers usually should define commands directly in Vim script.
      await denops.cmd(
        `command! -nargs=? DenopsHello echomsg denops#request('denops-helloworld', 'hello', [<q-args>])`,
      );
    },

    hello(name) {
      assert(name, is.String);
      return `Hello, ${name || "Denops"}!`;
    },
  };
};

Then, rewrite plugin/denops-helloworld.vim to automatically call the init API on plugin load via the DenopsPluginPost:{plugin_name} autocmd:

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

augroup denops_helloworld
  autocmd!
  autocmd User DenopsPluginPost:denops-helloworld
      \ call denops#notify('denops-helloworld', 'init', [])
augroup END

Once Vim is restarted, the DenopsHello command will be registered.

Then you can run:

:DenopsHello Your name

If the plugin has been registered successfully, you will see Hello, Your name! as a result.

Next Steps

In the next step, follow the tutorial to learn how to develop a real Denops plugin.