Closed11

neovimの設定

shosho

以前何かのYoutubeなどを参考に設定したNeovimがよくわからなくなってきたので、一度整理する。
とりあえず、Neovimをまっさらな状態に戻し、lazy.nvimだけ入れることにする。

tree
.
├── init.lua
├── lazy-lock.json
└── lua
    ├── keymaps.lua
    ├── plugins
    └── vim-options.lua
init.lua
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", -- latest stable release
    lazypath,
  })
end

vim.opt.rtp:prepend(lazypath)

local opts = {}

require("keymaps")
require("vim-options")

local plugins = {
  { import = "plugins" }
}

require("lazy").setup(plugins)

keymaps and vim-options
keymaps.lua
local keymap = vim.keymap

keymap.set("", "<Space>", "<Nop>")
vim.g.mapleader = " "
vim.g.maplocalleader = " "

-- to normal mode.
keymap.set('i', 'jk', '<ESC>')

-- split window
keymap.set("n", "ss", ":split<Return><C-w>w")
keymap.set("n", "sv", ":vsplit<Return><C-w>w")

-- increment/decrement
keymap.set("n", "+", "<C-a>")
keymap.set("n", "-", "<C-x>")

-- moving
keymap.set("n", "sh", "<C-w>h")
keymap.set("n", "sj", "<C-w>j")
keymap.set("n", "sk", "<C-w>k")
keymap.set("n", "sl", "<C-w>l")

--move tab
keymap.set("n", "gh", "gT")
keymap.set("n", "gl", "gt")
-- open new tab
keymap.set("n", "te", ":tabedit<Return>")

-- move line start/end
keymap.set("n", "<Space>h", "^")
keymap.set("n", "<Space>l", "$")

-- begin command to press ';'
keymap.set("n", ";", ":")
vim.cmd("set expandtab")
vim.cmd("set tabstop=2")
vim.cmd("set softtabstop=2")
vim.cmd("set shiftwidth=2")
vim.g.mapleader = " "

local opt = vim.opt

opt.number = true
opt.cursorline = true
opt.relativenumber = false

-- show invisible character
opt.list = true
opt.listchars = { tab = '>>', trail = '-', nbsp = '+' }

opt.clipboard= 'unnamedplus'

opt.termguicolors = true
shosho

Neo-tree

Neo-treeは、ファイルツリーを表示するプラグイン。
lua/pluginsディレクトリに、neo-tree.luaを追加する。
以降、プラグインはlua/pluginsディレクトリに専用のファイルを作成して追加していく。

tree
.
├── keymaps.lua
├── plugins
│   └── neo-tree.lua  # 追加
└── vim-options.lua

READMEのMinimal Quickstartにあるように、最低限の設定をneo-tree.luaに書く。

neo-tree.lua
{
    "nvim-neo-tree/neo-tree.nvim",
    branch = "v3.x",
    dependencies = {
      "nvim-lua/plenary.nvim",
      "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended
      "MunifTanjim/nui.nvim",
      -- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information
    }
}

追記が済んだら一度Neovimを再起動する。
:Neotreeコマンドを実行するとファイルツリーが表示される。

Quickstartにあるlonger example をそのままneo-tree.luaに貼り付けて、一部をlazy.nvim用に修正する。

neo-tree.lua
- use {
+ return {
  "nvim-neo-tree/neo-tree.nvim",
    branch = "v3.x",
-    requires = {
+   dependencies = {
      "nvim-lua/plenary.nvim",

細かい設定についてはそのうちREADMEのArgumentsを読む。

なおプラグインの設定を変更した影響か、なぜかNeovimの文字色などがいい感じになった。

shosho

colorscheme

Neovimの色を変えていく。
Trending Neovim Colorschemes を参考に、自分の気に入った色合いを選ぶのが良いと思う。
とりあえず私は以下にのような設定にした。他にも色々試していこうと思う。

colorscheme.lua
return {
  'sainnhe/gruvbox-material',
  lazy = false,
  priority = 1000,
  config = function()
    -- Optionally configure and load the colorscheme
    -- directly inside the plugin declaration.
    vim.g.gruvbox_material_enable_italic = true
    vim.cmd.colorscheme('gruvbox-material')
  end
}

shosho

lualine

lualineは、Neovimのステータスライン(エディタ下部のファイル情報の表示)の見た目を変更する。ちなみに現時点(デフォルト?)では以下のような見た目になっている。

lualine.lua
return {
  'nvim-lualine/lualine.nvim',
  dependencies = { 'nvim-tree/nvim-web-devicons' },
  config = function()
    require('lualine').setup({})
  end
}

上記の設定を追加すると、見た目が以下のように変わる。

こちらも他と同様に色々設定できるようだが、一旦はデフォルト状態とする。

shosho
shosho

LSP

LSPはプラグインの名前ではなく、Language Server Protocolをいうプログラミング言語を解析するための仕組み。
Neovimではデフォルトでこの機能が組み込まれているが、プラグインを利用することでより利便性を高めることができる。(らしい)
LSPを設定することで色々な言語に対して補完などが効くようになるが、ここではReact + TypeScriptでコーディングができるようになることを目標にする。

Before

LSPの設定をせずに、以下のようなカスタムフックを作成しようとすると、何もサジェストされない。これをなんとかする。

やっていく

書き方の正解がいまいちよくわからないのだが、ひとまず、以下の2つのファイルを作成することでtsファイルのエラーが検出されるようになった。

mason.lua
return {
  {
    "williamboman/mason.nvim",
    config = function()
      local mason = require("mason")
      mason.setup({})
    end
  },
  {
    "williamboman/mason-lspconfig.nvim",
    config = function()
      local mason_lspconfig = require("mason-lspconfig")
      mason_lspconfig.setup({
        ensure_installed = {
          "ts_ls",
          "html",
          "cssls",
        }
      })
    end
  }
}
nvim-lspconfig.lua
return {
  "neovim/nvim-lspconfig",
  config = function()
    local lspconfig = require("lspconfig")

    lspconfig.ts_ls.setup({})
    lspconfig.html.setup({})
    lspconfig.cssls.setup({})
  end
}

After


ちなみに、サジェストなどをしたい場合は他のプラグインを入れる必要がありそうなので、とりあえずLSPの設定としてはここまでとする。

参考

https://zenn.dev/vim_jp/articles/40b2c348386f88
https://zenn.dev/futsuuu/articles/3b74a8acec166e
https://neovim.io/doc/user/lsp.html

shosho

completion

オートコンプリートをできるようにする
completion.luaというファイルを作成して、以下の設定を書く。

completion.lua
-- for completion
return {
  {
    "hrsh7th/cmp-nvim-lsp",
    config = function()
      local cmp = require("cmp")
      cmp.setup {
        sources = {
          { name = "nvim_lsp" }
        },
        mapping = cmp.mapping.preset.insert({
          ["<C-j>"] = cmp.mapping.select_next_item(),
          ["<C-k>"] = cmp.mapping.select_prev_item(),
          ["<CR>"] = cmp.mapping.confirm { select = true },
        }),
      }
    end
  },
  -- if remove this plugin, 'cmp' definition above will error.
  {
    "hrsh7th/nvim-cmp"
  }
}

また、lspconfigの設定にオートコンプリート用の設定を追加する

nvim-lspconfig.lua
return {
  "neovim/nvim-lspconfig",
  config = function()
    local lspconfig = require("lspconfig")
+    local capabilities = require("cmp_nvim_lsp").default_capabilities()

    lspconfig.ts_ls.setup({
+      capabilities = capabilities
    })
    lspconfig.html.setup({
+      capabilities = capabilities
    })
    lspconfig.cssls.setup({
+      capabilities = capabilities
    })
  end
}

サジェストされるようになる。

shosho

telescope

telescopeはファイル検索などができるようになる。

plugins/telescope.lua
return {
  'nvim-telescope/telescope.nvim', tag = '0.1.8',
  dependencies = { 'nvim-lua/plenary.nvim' },
  config = function()
    local builtin = require('telescope.builtin')
    vim.keymap.set('n', '<leader>ff', builtin.find_files, { desc = 'Telescope find files' })
    vim.keymap.set('n', '<leader>fg', builtin.live_grep, { desc = 'Telescope live grep' })
    vim.keymap.set('n', '<leader>fb', builtin.buffers, { desc = 'Telescope buffers' })
    vim.keymap.set('n', '<leader>fh', builtin.help_tags, { desc = 'Telescope help tags' })
  end
}
shosho

treesitter

installationページを参考に。

treesitter.lua
return {
  "nvim-treesitter/nvim-treesitter",
  build = function()
      require("nvim-treesitter.install").update({ with_sync = true })()
  end,
  config = function()
    local configs = require("nvim-treesitter.configs")
    configs.setup({
        ensure_installed = { "c", "lua", "vim", "vimdoc", "query", "elixir", "heex", "javascript", "html" },
        sync_install = false,
        highlight = { enable = true },
        indent = { enable = true },  
      })
  end
}
shosho

とりあえず最低限の部分は動くようになったし、プラグインの追加方法なども理解したのでこれくらいで終わりにする。

このスクラップは1ヶ月前にクローズされました