notes.kagcc

vimmer が neovim 試してみる設定の移行メモ

tree-sitter を試してみたいのもあって neovim を試してみることにした.年末年始何もできなかった反動かもしれない.

以前既存の vim の設定(miv で管理をしている) を読み込む形で neovim を試していたが,今回はせっかくなので1から作ることにする…にあたって 意外とハマりどころがあり,適宜メモを残しておく.随時更新のつもり.

念頭に置くこと

vim.api.nvim_create_autocmd("TextYankPost", {
  pattern = "*",
  callback = function()
    vim.hl.on_yank({ higroup='Visual', timeout = 300 })
  end,
})

設定ファイル

init.lua を使う.こいつが他の設定ファイルを読んでいく構成になるようだ.

全体のオプション

元々 vim の設定のうちプラグインとか関係ないところは切り分けていたので,これを読み込む

lazy.nvim

プラグインのメモ

telescope.nvim

-- lua/plugins/telescope.nvim.lua
return {
  'nvim-telescope/telescope.nvim',
	-- ... 中略
  config = function()
    local builtin = require('telescope.builtin')
    vim.keymap.set('n', '<C-p>', builtin.find_files, { desc = 'telescope find files'})
  end
}

でとりあえず C-p で find files を起動してみている…が,live_grep とかも便利なのでどうマッピングするか悩みどころ

nvim-comp

return {
  "hrsh7th/nvim-cmp",
  config = function()
    local cmp = require'cmp'
    cmp.setup({
      mapping = cmp.mapping.preset.insert({
        ['<C-b>'] = cmp.mapping.scroll_docs(-4),
        ['<C-f>'] = cmp.mapping.scroll_docs(4),
        ['<C-Space>'] = cmp.mapping.complete(),
        ['<C-e>'] = cmp.mapping.abort(),
        ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
        ['<Tab>'] = function(fallback)
          if cmp.visible() then
            cmp.select_next_item()
          else
            fallback()
          end
        end
      }),
      sources = cmp.config.sources({
        { name = 'nvim_lsp' },
        { name = 'buffer' },
        { name = 'nvim_lsp_signature_help'}
      })
    })
    end
}

設定はまだ色々いじるかもしれないけど,<tab> の設定になんかドキュメントを探したような記憶

conform.nvim

フォーマッタとかを走らせるやつ.

return{
  'stevearc/conform.nvim',
  opts = {
    formatters_by_ft = {
      python = { "ruff_format", "ruff_organize_imports" },
      rust = { "rustfmt", lsp_format = "fallback"},
    },
    format_on_save = {
      timeout_ms = 1000,
      lsp_format = "fallback",
    },
  },
}

on_save での整形を一時的にやめたい場合もあるが(ひとのコードを一瞬触るときとか),本体側の機能としては含まれておらず (issue - 確かに納得する議論ではある),issue みて適宜設定するか,:noau w で良いらしい.

lightline.vim

return {
  'itchyny/lightline.vim',
  init = function()
      vim.g.lightline = {
        colorscheme = 'jellybeans',
        active = {
          left = {
            { 'mode', 'paste'},
            { 'readonly', 'relativepath', 'path', 'modified'},
          },
          right = {
            { 'lineinfo' },
            { 'fileformat', 'fileencoding', 'filetype' },
            { 'charvaluehex' },
          }
        },
        inactive = {
          left = {
            { 'absolutepath', 'modified' }
          },
          right = {
            { 'lineinfo' },
            { 'percent' }
          }
        },
        mode_map = {
          n = 'N',
          i = 'I',
          R = 'R',
          v = 'V',
          V = 'V-L',
          c = 'C',
          s = 'S',
          S = 'S-LINE',
          t = 'TERM',
        }
      }
  end
}

みたいな感じで,g:lightline.active.left とかを適宜読み替えながら設定してやる.

気付いた新たな機能

TODO

tags: