黒田幸者の秘密基地

neovimを初めて使ってみる

2024/09/13

Category : CLI エディタ 短い記事


Neovimとは

この記事を読んでいる方はご存知だと思いますので詳細は割愛しますが、 簡単に言えば保守的なvim派閥から独立した革新派のvimmer用エディターです。

インストール

$sudo apt install neovim

でもインストールは可能ですが、最新バージョンを使いたいと言う方はneovimの公式サイトからのダウンロードをおすすめします。

公式でInstall Nowと言うボタンを選択するとgithubのリポジトリへリダイレクトされます。ここでは各OSでのインストール方法が記述されているので、こちらを読んでください。

インストール例

以下ではインストールの一例としてビルド済みのバイナリを用いたインストールを紹介します。

$ curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz
$ sudo rm -rf /opt/nvim
$ sudo tar -C /opt -xzf nvim-linux64.tar.gz

これを実行した後、~/.zshrc~/.bashrc

export PATH="$PATH:/opt/nvim-linux64/bin"

を追加記入して完了です!

なおこれはLinuxの64bitアーキテクチャを前提としています。WindowsやMacOSは元のサイトを参照ください。

設定ファイル

neovimでは従来の~/.vimrcを用いることも可能ですが、luaというスクリプト形式での設定ファイルが新たに用意されています。

設定ファイルは~/.config/nvim/init.vim、 もしくは~/.config/nvim/init.lua に記述します。

まずは簡単なものだけでやってみます。以下はinit.luaの場合です。

-- 行番号を表示する設定
vim.opt.number = true
-- 文字エンコーディングの設定
vim.opt.encoding = 'utf-8'
vim.scriptencoding = 'utf-8'
vim.opt.fileencoding = 'utf-8'
-- カラースキームを設定する
vim.cmd('colorscheme evening')  -- 'evening' の部分がテーマに該当。色々ある。

LSP(Language Server Protocol)

vimやneovimにはLSPという便利なものがあります。これはMicrosoftが作った言語の補完や定義への移動といったVisual Studio Codeなどでよく見られる拡張機能を支える機能です。

LSPを使用するにあたって私はLazy.nvimを使用しました。これはパッケージマネージャで、簡単にパッケージを管理することができます。

以下では例を書いています。

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)

require("lazy").setup({
  -- ここに追加したいプラグインを書く。
  "nvim-treesitter/nvim-treesitter",
  "neovim/nvim-lspconfig",
  "lambdalisue/fern.vim",
  "neoclide/coc.nvim",
})
-- Treesitter 設定
require'nvim-treesitter.configs'.setup {
  highlight = {
    enable = true,              -- false will disable the whole extension
  },
}
-- Tab を使った補完の設定
vim.api.nvim_set_keymap('i', '<Tab>', 'coc#pum#visible() ? coc#pum#confirm() : "<Tab>"', { noremap = true, silent = true, expr = true })
vim.api.nvim_set_keymap('i', '<S-Tab>', 'coc#pum#visible() ? coc#pum#select_prev_item() : "<C-h>"', { noremap = true, silent = true, expr = true })

説明

参考文献