Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

dein.vim から packer.nvim に乗り換える

lua でファイル管理したいなぁ…という気分になったので乗り換えることにしました。今のところそんなに違いは感じてないです

(まだ書き換えてる途中なので以下の記述はミスってるかもしれないです)

migration guide

そもそも、 packer.nvim でインストールする方法が書いてあるプラグインが多いので、まず GitHub リポジトリをみましょう。 dein.vim についてはインストール方法書いてないのに packer.nvim はあるとか結構あります。

次に、Lua-guide - Neovim docs を読みましょう。neovim 公式が lua の書き方を解説していてわかりやすいです。日本語資料もあります。この2つを読めば大体かけます。

それでも足りなかった時用に、以下に tips をまとめます

  • hook_add は setup に置き換える
  • hook_source は config に置き換える
  • nnoremap は vim.keymap.set('n', 'key', 'command') に変える
  • let g:hoge =vim.g.hoge = に直す
    • どうしようもない場合は vim.cmd [[ let g:hoge = xxx ]] でいける(他の場合も最悪 vim.cmd [[ ]] で囲めば OK)
  • nmap は vim.keymap.set の第四引数に {remap = true} を渡す以外は nnoremap と同じ
  • on_cmd は cmd に直す
  • on_event は event に直す

たとえば deinlazy.toml にこう書いてあったとする

[[plugins]]
repo = 'nvim-telescope/telescope.nvim'
on_cmd = ['Telescope']
hook_add = '''
nnoremap <leader>ff <cmd>Telescope find_files<cr>
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
nnoremap <leader>fb <cmd>Telescope buffers<cr>
nnoremap <leader>; <cmd>Telescope resume<cr>
'''
lua_source = '''
require'telescope'.setup({
  defaults = {
    mappings = {
      n = {
        q = "close",
      },
    },
  },
})
'''

これはこうなる

return require('packer').startup(function(use)
  use {
    'nvim-telescope/telescope.nvim',
    cmd = {'Telescope'},
    setup = function()
      vim.keymap.set('n', '<leader>ff', ':<C-u>Telescope find_files<CR>')
      vim.keymap.set('n', '<leader>fg', ':<C-u>Telescope live_grep<CR>')
      vim.keymap.set('n', '<leader>fb', ':<C-u>Telescope buffers<CR>')
      vim.keymap.set('n', '<leader>;', ':<C-u>Telescope resume<CR>')
    end,
    config = function()
      require'telescope'.setup{
        defaults = {
          mappings = {
            n = {
              q = "close",
            },
          },
        },
      }
    end,
  }
end)

lua としてそのままシンタックスハイライトとか使えるようになるので便利 (多分 toml の中の lua をシンタックスハイライトつける方法もあると思うんですが、やっぱ lua は lua ファイルに書いたほうが便利だと思う)