1
0
hugo/content/blog/2023-01-07-nvim.md
2024-04-23 22:21:26 +09:00

154 lines
3.4 KiB
Markdown

+++
date = "2023-01-07"
tags = ["vim","nvim","lua"]
title = "nvimを使ってみる"
slug = "nvim"
+++
`neovim`、いわゆる`nvim`ですが、今まで全く使ってなかったので、今回は少しカスタマイズして使ってみました。
vimscriptとluaで書けますが、luaで書いていこうと思います。したがって、pluginから何から全て移行です。
```sh
$ sudo pacman -S neovim
$ mkdir -p ~/.config/nvim
$ touch ~/.config/nvim/init.lua
```
```lua:~/.config/nvim/init.lua
require("keymaps")
```
```lua:~/.config/nvim/lua/keymaps.lua
-- 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
```sh
git clone --depth 1 https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvim
```
```lua:~/.config/nvim/lua/plugins.lua
vim.cmd [[packadd packer.nvim]]
return require('packer').startup(function(use)
use 'wbthomason/packer.nvim'
use 'rlane/pounce.nvim'
end)
```
```sh
:PackerInstall
```
### pounce.nvim
`pounce.nvim`は`easymotion`のようなものです。
```lua:~/.config/nvim/plugin/pounce.lua
require("pounce").setup({
accept_keys = "jfkdlsahgnuvrbytmiceoxwpqz",
accept_best_key = "<enter>",
multi_window = true,
debug = false,
})
```
```lua:~/.config/nvim/lua/keymaps.lua
keymap("n", "<leader><leader>", ":<C-u>Pounce<Return>", opts)
```
これで`<space><space>`を押すと発動します。適当に検索したい1文字を入力して飛びます。
### undo
```sh
$ mkdir -p ~/.config/nvim/undo
```
```lua
vim.api.nvim_set_option('undofile', true)
vim.opt.undodir = vim.fn.stdpath('config') .. '/undo'
```
`undotree`というpluginが便利です。
```lua
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
```lua
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" })
```
```lua:lua/lsp.lua
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
})
```
```sh
:MasonInstall lua-language-server
```
こんな感じで使っていけば良さそう。以上です。
### ref
- https://github.com/hisasann/neovim
- https://github.com/nullchilly/nvim
- https://github.com/wbthomason/dotfiles/tree/main/dot_config/nvim