154 lines
3.4 KiB
Markdown
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
|
||
|
|