✏️

Neovimにeskk.vimをインストールする

2023/05/26に公開

はじめに

Neovimを使い始めて少し経ち、日本語入力用にeskk.vimを導入したので、備忘録も兼ねて手順を書きます。

参考

友達のkat0hがVimにeskk.vimを導入する記事を書いていたので参考にしました。
というかほぼ彼の記事のNeovim版です。

https://zenn.dev/kato_k/articles/753b36262b3213

インストール

eskk.vim

好みのプラグインマネージャーでインストールします。
自分はvim-jetpackをpackerっぽくluaで書く方法を使っています。

use {
  'vim-skk/eskk.vim',
  config = function()
    vim.g['eskk#directory'] = '~/.eskk'
    vim.g['eskk#dictionary'] = { path = '~/.eskk_jisyo', sorted = 1, encoding = 'utf-8' }
    vim.g['eskk#large_dictionary'] = { path = '~/.config/nvim/SKK-JISYO.L.txt', sorted = 1, encoding = 'euc-jp' }
  end,
}

辞書

skkで変換機能を使うには、読みと漢字を対応させた辞書が必要です。

辞書は↓からダウンロードできます。
https://skk-dev.github.io/dict/

kat0hはダウンロードするスクリプトを書いていましたが、自分はNeovimの設定を入れたdotfilesの中に含めてしまっています。
こうすることで、新しい環境でdotfilesをcloneすれば、その時点からskkが使えます。

dotfilesに含めるにあたって、拡張子に.txtを追加しています。(GitHubのLanguagesを正確に表示するため)

skkの使い方

skkは普通のIMEのように予測変換のような機能はありません。
あくまで入力したものをそのまま変換するというシンプルな動作をします。

ですが、OSのIMEを変えることなく、エディタ上で日本語入力ができるので、vimで日本語を打ちたい時にとても便利です。

僕はパソコンやスマホなど色んな環境で開発を行うので重宝しています。

詳しい使い方はkat0hの説明がわかりやすいのでそっちを見てください。

https://zenn.dev/kato_k/articles/753b36262b3213#skkの使い方

lualine.nvimに変換モードを表示

Neovimのステータスラインを装飾するプラグインは、lualine.nvimがデファクトスタンダードといって差し支えないでしょう。
自分もlualineを使っています。

さて、ステータスラインにeskkのモードを表示する方法ですが、これは今回少し工夫したポイントです。
まずは設定の全体を出します。

use {
  'nvim-lualine/lualine.nvim',
  config = function()
    local function skkmode()
      if vim.call('eskk#is_enabled') == 1 then
        return vim.g['eskk#statusline_mode_strings'][vim.call('eskk#get_mode')]
      else
        return ''
      end
    end
    vim.api.nvim_create_autocmd('user', {
      pattern = 'eskk-initialize-post',
      callback = function()
        require('lualine').setup({
          sections = {
            lualine_c = { 'filename', skkmode },
          },
        })
      end,
    })
    require('lualine').setup()
  end,
}

順を追って解説します。

local function skkmode()
  if vim.call('eskk#is_enabled') == 1 then
    return vim.g['eskk#statusline_mode_strings'][vim.call('eskk#get_mode')]
  else
    return ''
  end
end

ここでは、eskk.vimのモードを文字列で返す関数を定義しています。

kat0hの記事ではInsertモードの時のみeskkのモードを返すような関数にしていましたが、eskkはコマンドモードでも使えるので、その部分は省きました。(これでもちゃんと動作します)

vim.api.nvim_create_autocmd('user', {
  pattern = 'eskk-initialize-post',
  callback = function()
    require('lualine').setup({
      sections = {
        lualine_c = { 'filename', skkmode },
      },
    })
  end,
})

ここが今回最大のポイントです。

require('lualine').setup()の中で普通にskkmode関数を指定するだけだと、プラグインの読み込みの分ステータスラインの表示が遅れてしまいます。

そこで、autocmdを使って、eskkのプラグインが完全に読み込まれた後にlualineに項目を追加するようにしています。


おわり

Discussion