2023-01-07 / syui

vim , nvim , lua

nvimを使ってみる

neovim、いわゆるnvimですが、今まで全く使ってなかったので、今回は少しカスタマイズして使ってみました。

vimscriptとluaで書けますが、luaで書いていこうと思います。したがって、pluginから何から全て移行です。

$ sudo pacman -S neovim
$ mkdir -p ~/.config/nvim
$ touch ~/.config/nvim/init.lua
require("keymaps")
-- vim.api.nvim_set_keymap("", "<space>", "<Nop>", { noremap = true, silent = true })
local opts = { noremap = true, silent = true }
local keymap = vim.api.nvim_set_keymap
keymap("", "<space>", "<Nop>", opts)

これはvimでいう<leader>をマッピングする設定です。<space>にします。

続いてpluginをインストールします。packerを使います。

https://github.com/wbthomason/packer.nvim

git clone --depth 1 https://github.com/wbthomason/packer.nvim\
 ~/.local/share/nvim/site/pack/packer/start/packer.nvim
vim.cmd [[packadd packer.nvim]]

return require('packer').startup(function(use)
    use 'wbthomason/packer.nvim'
    use 'rlane/pounce.nvim'
end)
:PackerInstall

pounce.nvim

pounce.nvimeasymotionのようなものです。

require("pounce").setup({
 accept_keys = "jfkdlsahgnuvrbytmiceoxwpqz",
 accept_best_key = "<enter>",
 multi_window = true,
 debug = false,
})
keymap("n", "<leader><leader>", ":<C-u>Pounce<Return>", opts)

これで<space><space>を押すと発動します。適当に検索したい1文字を入力して飛びます。

undo

$ mkdir -p ~/.config/nvim/undo
vim.api.nvim_set_option('undofile', true)
vim.opt.undodir = vim.fn.stdpath('config') .. '/undo'

undotreeというpluginが便利です。

use { 'mbbill/undotree', cmd = 'UndotreeToggle', config = [[vim.g.undotree_SetFocusWhenToggle = 1]], }

local map = vim.keymap.set
map("n", "<leader>u", "<cmd> UndotreeToggle<CR>")

pluginをインストールして、上記例では<space>uで起動できます。

lsp

:LspInstallServerから:MasonInstallになったみたい。

https://github.com/williamboman/mason.nvim

use({ "hrsh7th/cmp-nvim-lsp" })
use({ "hrsh7th/cmp-nvim-lua" })
use({ "onsails/lspkind-nvim" })
use({ "L3MON4D3/LuaSnip" })
use({ "neovim/nvim-lspconfig" })
use({ "williamboman/mason.nvim" })
use({ "williamboman/mason-lspconfig.nvim" })
require("mason").setup({
 ui = {
  icons = {
   package_installed = "✓",
   package_pending = "➜",
   package_uninstalled = "✗"
  }
 }
})
local nvim_lsp = require('lspconfig')
local mason_lspconfig = require('mason-lspconfig')
mason_lspconfig.setup_handlers({
 function(server_name)
  local opts = {}

  if server_name == "sumneko_lua" then
   opts.settings = {
    Lua = {
     diagnostics = { globals = { 'vim' } },
    }
   }
  end

  nvim_lsp[server_name].setup(opts)
 end
})
:MasonInstall lua-language-server

こんな感じで使っていけば良さそう。以上です。

ref