22
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オレオレ Neovim 環境構築 with LazyVim

Last updated at Posted at 2024-05-30

随時更新用

はじめに

こちらは自分の Neovim 環境構築の備忘録として使用予定。
書きなぐりつつたまに整理するくらいの感じで運用する。

インストール

Windows

Terminal 選び

Windows の場合は、現状は Windows Terminal + PowerShell で使用している。
最近の PowerShell は、相変わらずコマンドの独特さにはストレスを強いられるが、表示機能としてはコマンドプロンプトよりも軍配が上がりつつ、標準機能として使えるのでよい。

ちなみに、WSL で NeoVim を使用するという手もあるが、まだまだ Windows と WSL の繋がりは甘いものがあるので、おとなしく PowerShell を使うというのがまだまだ自然という感想。

Neovim インストール

最近の Windows 10 や Windows 11 の環境は最初から winget が入っているので、これを使ってインストールする。

winget install Neovim.Neovim

Mac

Terminal 選び

Mac の場合は、まずはターミナル選びから。
デフォルトのターミナルは色々と機能が足りてなくて、テーマカラーなどにも対応していない。
なので、いくつかのサードパーティから選択することになる。

現時点で良いなと思って使っているのは Kitty

デフォルトだと文字が小さかったり、フォントも変更する必要があるのでそこは設定する。

Neovim インストール

Homebrew を使ってインストールする。

brew install neovim

LazyVim の導入

インストール

プラグインマネージャーとして機能すると共に、とりあえず一気にモダンなイイカンジにしてくれるので、ぶちこむ。

No C compiler found! "cc", "gcc", "clang", "cl", "zig" are not executable.

僕の導入した環境ではこのエラーが起きた。

どうやら原因は Tree-Sitter がこれらを必要としているかららしい。
これが要らない場合は単純に disable すればいいとのことだが、Rust / C++ / Python などのライブラリをイイカンジにパースしてくれるっぽいので、とりあえず入れて対処する。

LLVM/Clang の方を入れた。

https://github.com/llvm/llvm-project/releases

対応フォントのインストール

LazyVim では、NerdFont (^v3.0) が前提となる。
フォントが対応してないと、いくつかの絵文字項目が?表示になってしまい、認識性も悪い。

しかしながら、生の NerdFont は日本語に弱いため、関連する別のフォントを選択することになる。

そこで選択するのが、HackGen
提供版として、NerdFont との合成版の HackGen_NF をリリースしているので、これをダウンロードしてきてインストールし、Terminal 側のフォント設定を行う。

LazyVim 自体と依存プラグインのアップデート

LazyVim 自体はセルフアップデートを自動では行わない。
なので、自らの意思でアップデートを実行する必要がある。

Lazy を起動して、管理画面に入ったら、「U」を入力してアップデート画面に切り替える。
この切り替えと同時にアップデートが実行される。

image.png

アップデートが完了すると、Working 項目は 0 になり、次のような結果画面が残る。

image.png

アップデートに対する注意
あくまで LazyVim はコミュニティベースで開発されているため、アップデートによってはエラーが発生するような実装を取得する可能性がある。(既に何度か経験している。)

それらに対しては自力で対応する必要があるので、こちらはまた別途トラブルシュートとしてまとめる。

コンフィグ管理の基本

LazyVim の設定は NeoVim のコンフィグ管理に乗っかる形で設計されている。
なので、プラグイン導入を始め、かなりの割合を NeoVim コンフィグ管理機構で設定していくことになる。
逆にこれを管理してしまえば、NeoVim の設定管理に加え、LazyVim の環境はほとんど再現可能な環境にしていくことが出来る。

OS コンフィグパス
Windows $ENV:LOCALAPPDATA\nvim
Linux/macOS ~/.config/nvim

コンフィグファイルへのアクセス方法

コンフィグファイルへのアクセスは、LazyVim のホーム画面から c 入力をすることで、Telescope 上で参照できる。
既に作成済みのコンフィグファイルに、高速にアクセスしたい場合はこのフローが便利。

image.png

Git 管理

例によって、NeoVim + LazyVim の環境は Git + GitHub 管理しておき、別の環境でも再現しやすいようにしておく。

プラグイン追加の基本

プラグインを追加したい場合、lua/plugins 以下に、任意のファイル名で lua ファイルを作成していく。
目的ごとに lua ファイルを分けられるので、プラグインごとに lua ファイルを作成してもいいし、カテゴリごとに lua ファイルを作成して、その中でまとめて管理するという方法もある。

自分で目的に応じてファイルを作れるし、プラグインを無効にする場合は削除する方法や、enabled = false キーを設定することで無効にもできる。かなり柔軟に管理できていい。

プラグイン lua ファイルを作ってプラグインを読み込む

:e $localappdata/nvim/lua/plugins/myplugins.lua
lua/plugins/myplugins.lua
return {
    { "takavfx/dailynote.vim" }
}

その他の資料

  • プラグインバージョンを固定する方法はこちら

colorscheme の設定

起動時の設定

例えば、デフォルトで内包されている vim テーマを起動時のテーマとして設定したいとする。

tokyonight vim
NVIDIA_Share_GHlfVASW7S.png image.png
lua/plugins/colorscheme.lua
return {
    { "LazyVim/LazyVim",
        opts = {
            colorscheme = "vim",
        },
    },
}

カスタムテーマプラグインの導入と適用

デフォルトだと tokyonight が指定されている。
先に触っていた Helix Editor にデフォルトで入っていた everforest が結構好みだったので、これを入れたい。

image.png

これを有効にするにはまずは everforest-nvim のインストールと、起動時に色設定をする必要がある。

という事で以下の様に記述する。

lua/plugins/colorscheme.lua
return {
    { "neanias/everforest-nvim" },
    { "LazyVim/LazyVim",
        opts = {
            colorscheme = "everforest",
        },
    },
}

これで次の起動時に everforest-nvim のダウンロードと適用がなされる。

さらにテーマを追加していきたい場合

追加で nord.nvim テーマを追加したいとする。
この場合は、前のオプションの方に追加していく。

lua/plugins/colorscheme.lua
return {
    { "neanias/everforest-nvim", "shaunsingh/nord.nvim" },
    { "LazyVim/LazyVim",
        opts = {
            colorscheme = "nord",
        },
    },
}

任意のカスタムテーマを活かしながら背景を透明にしたい

例えば、 everforest を適用しながら背景を透明にしたいとする。
この場合、 transparent.nvim を導入する。

lua/plugins/colorscheme.lua
return {
+   { "xiyaowong/transparent.nvim" },
    { "neanias/everforest-nvim" },
    { "LazyVim/LazyVim",
        opts = {
            colorscheme = "everforest",
        },
    },
}

:TransparentEnable で有効にできる。

image.png

コンフィグ管理

コンフィグは、dotfiles として nvim 以下を Git 全体管理に。
これをシンボリックリンクする形で運用。

言語セットアップ

LazyVim での考え方

LazyVim は最初からある程度使える弁当箱のようなもの。
紐解いていくと最初からプリセットが用意されている。
その一つが、LazyExtras の存在。

次のような形で lua/config/lazy.lua を設定すると、必要なモジュール郡のセットを読み込んでこれる。
例えば lang.svelte はこのセットで読み込んでいくとあっという間に構築できたりする。

lua/config/lazy.lua
require("lazy").setup({
  spec = {
    -- add LazyVim and import its plugins
    { "LazyVim/LazyVim", import = "lazyvim.plugins" },
    { import = "lazyvim.plugins.extras.editor.leap" },
    { import = "lazyvim.plugins.extras.editor.illuminate" },
    { import = "lazyvim.plugins.extras.editor.outline" },
    -- { import = "lazyvim.plugins.extras.lang.rust" },
    -- { import = "lazyvim.plugins.extras.lang.markdown" },
    { import = "lazyvim.plugins.extras.lang.json" },
    { import = "lazyvim.plugins.extras.lang.toml" },
    { import = "lazyvim.plugins.extras.lang.yaml" },
    { import = "lazyvim.plugins.extras.lang.typescript" },
+    { import = "lazyvim.plugins.extras.lang.svelte" },
    { import = "lazyvim.plugins.extras.lang.tailwind" },
    { import = "lazyvim.plugins.extras.lang.docker" },
    -- { import = "lazyvim.plugins.extras.lang.python" },
    -- { import = "lazyvim.plugins.extras.lang.go" },
    { import = "lazyvim.plugins.extras.coding.mini-surround" },
    { import = "lazyvim.plugins.extras.ai.copilot" },
    { import = "lazyvim.plugins.extras.util.mini-hipatterns" },
    -- import any extras modules here
    -- { import = "lazyvim.plugins.extras.ui.mini-animate" },
    -- import/override with your plugins
    { import = "plugins" },
  },
}

しかしながら、欠点もある。
lang.python の場合、pyright は要らないといった場合や、ruff のみでの管理を行いたい場合にも余計なプラグインが落ちて着てうるさかったりする。

そういった場合には、ここでの設定はやめて、LSPマネージャーを使って個別に入れていくという手段を取る。

LSP マネージャーの導入

自らカスタムしてインストールする場合は LSP マネージャーを使用する。

ベースとなる LSP マネージャーには、以下の二つを使用する。
LazyVim には両方が最初から認識されるようになっている仕様なので、特別他のマネージャーを使いたいと言ったことがない限りはこれをそのまま使用していい。

この状態で、使用したい言語プロジェクトの中で以下の適用コマンドを実行すると、それぞれ選択しつつ LSP サーバーをインストールすることが出来る。

:MasonInstall

もしくは、次の様にサーバー名を指定してのインストールもできる。

:MasonInstall <server_name>

output8.gif

また、特定のコーディングタイプのファイルを開いている場合であれば、 Lsp コマンドも使用できる。
こちらは、開いているファイルのコーディングタイプにあった候補を出してくれる。

:LspInstall <server_name>

例えば、ホームディレクトリで開いた場合、mason-lspconfig はインストールされてはいるもののロード対象になっていない。対象プロジェクトや対象言語のファイルを開いてからだと有効になうので、:MasonInstall:LspInstall 等のコマンドを実行してインストールする。

Rust

LSP Linter Formetter Type check
rust-analyzer rust-analyzer rust-analyzer rust-analyzer

Rust の場合は、 rust-analyzer 使っていればまず間違いないので、シンプル。

LSP / Linter / Formatter

インストール

:MasonInstall rust-analyzer でインストール。

CMake

LSP Linter Formetter Type check
tree-sitter-cmake tree-sitter-cmake tree-sitter-cmake -

CMake の場合は、基本的に tree-sitter-cmake が言語サポートを。cmake-tools.nvim がツールとしての機能提供として主な役割を担う。

LSP / Linter / Formtter / Tool

基本的に、LazyExtras から読み込むだけで環境が整う。便利!!

インストール

lua/config/lazy.lualazyvim.plugins.extras.lang.cmake を有効にする。

lua/config/lazy.lua
require("lazy").setup(
  spec = {
    { import = "lazyvim.plugins.extras.lang.cmake" },
  }
)

image.png

cmake-tools.nvim

ファイルの保存時に CMake の構文チェックやバックグラウンドでのプリビルドを行ってビルドサポートを行ってくれる。
それを踏まえて、シンタックスエラーやリント、フォーマットも行ってくれる。

image.png

また、ビルドコマンドも提供しくれるため、ここから直接ビルドを呼び出せる。

image.png

C/C++

LSP Linter Formetter Type check
clangd clangd clangd clangd

CMake とのコラボレーションとしてのベストプラクティスを調査中。

Python

LSP Linter Formetter Type check
python-lsp-server python-lsp-ruff python-lsp-ruff pyright

LSP

インストール

:MasonInstall python-lsp-server でインストール。

インストールすると、ヘルプ表示なども表示されるようになる。

image.png

Python のインストールおよび、実行可能にしておく必要がある。

Linter / Formatter

いずれも高速にかつ統括的に処理してくれる Ruff で統一したいので、pylsp の Ruff プラグインである python-lsp-ruff をインストールする。

インストール

:PylspInstall python-lsp-ruff を実行。

image.png

pylsp をインストールすると、Mason 経由で ruff をインストールしても Ruff でフォーマットをしてくれない。

pylsp の標準は、リンタは Pyflke、フォーマットは autopep8 で行うように設定されている。
さらに複雑度チェックは McCabe で行われ、pycodestyle による PEP 基準のコードになるようなチェックと警告が表示されるようになっている。

python-lsp-ruff をインストールすると、これらを Ruff で処理する用に自動的に設定される。

This plugin will disable pycodestyle, pyflakes, mccabe, autopep8, and yapf by default, unless they are explicitly enabled in the client configuration. When python-lsp-ruff is enabled, all linting diagnostics and formatting capabilities will be provided by ruff.

ruff_lsp を使用しない理由
Ruff の公式としては、ruff_lsp という LSP が存在する。
しかしながら、ruff_lsp は自動補完などはサポートしてくれない。
自動補完のために python-lsp-server を入れたりする事になるが、結局そこに Ruff プラグインを入れるためかちあってしまう。
なので、ruff_lsp は現時点で入れるのはやめた。

Type Check

Ruff は、公式でもあくまで Linter/Formatter だと言っており、Type Check も行う場合は他のツールも組み合わせて使用することを薦めている
Type Check では、2024/06/28 時点で、MypyPyrightPyre などがある。

僕の現状の用途としては、プロジェクトで VSCode を使っている人も多い事と、VSCode 上での設定のしやすさから Pyright を選択した。(Mypy よりも体感速い結果を出してくれるので、そういう面では好み。

インストール

:MasonInstall pyright でインストール。

TypeScript

LSP

LSP Linter Formetter Type check
tsserver ESlint prettier ESlint

インストール

lua/config/lazy.lualazyvim.plugins.extras.lang.svelte を有効にする。

lua/config/lazy.lua
require("lazy").setup(
  spec = {
    { import = "lazyvim.plugins.extras.lang.typescript" },
  }
)

Svelte

LSP Linter Formetter Type check
svelte-language-server eslint-plugin-svelte prettier -

LSP

インストール

lua/config/lazy.lualazyvim.plugins.extras.lang.svelte を有効にする。

lua/config/lazy.lua
require("lazy").setup(
  spec = {
    { import = "lazyvim.plugins.extras.lang.svelte" },
  }
)

Zero-effort type safety のための設定

tsconfig.json に typescript-svelte-plugin を追記する。

tsconfig.json
{
  "extends": "./.svelte-kit/tsconfig.json",
  "compilerOptions": {
    "plugins": [
      {
        "name": "typescript-svelte-plugin"
      }
    ]
  }
}

TOML

LSP Linter Formetter Type check
taplo taplo taplo -

LSP

インストール

lua/config/lazy.lualazyvim.plugins.extras.lang.toml を有効にする。

lua/config/lazy.lua
require("lazy").setup(
  spec = {
    { import = "lazyvim.plugins.extras.lang.toml" },
  }
)

YAML

LSP Linter Formetter Type check
yaml-language-server - yamlfmt -

LSP

インストール

lua/config/lazy.lualazyvim.plugins.extras.lang.yaml を有効にする。

lua/config/lazy.lua
require("lazy").setup(
  spec = {
    { import = "lazyvim.plugins.extras.lang.toml" },
  }
)

Lua

LSP Linter Formetter Type check
lua-language-server - Stylua -

LSP / Formatter

インストール

LazyVim にデフォルトインストール。

Nullsoft Scriptable Install System

LSP Linter Formetter Type check
- - - -

Windows インストーラーを無料ソフトで作る際としては触りやすくてお気に入り。

ハイライト

インストール時点でのハイライトは効いている。
(デフォルトでこれも対応しているのはちょっと驚き。

ユーティリティ・ツール

Copilot

NeoVim においての Copilot の導入は公式からの案内がある通り、github/copilot.vim を導入することで利用可能になる。

しかしながら、こと LazyVim (v) においては、LazyExtras によってより簡単に導入できるようになっている。

どれぐらい簡単かというと、次の部分をコメントアウトを解除するだけ。
もしくは、新規で項目を追加する。

lua/config/lazy.lua
require("lazy").setup({
  spec = {
    { "LazyVim/LazyVim", import = "lazyvim.plugins" },
    -- ↓これを有効にする
+    { import = "lazyvim.plugins.extras.ai.copilot" },
    { import = "plugins" },
  },
})

次回の nvim の起動時に Copilot を利用するために GtiHub のログイン問い合わせが発生する。そこで認証を通せば使えるようになる。

LazyVim 12.x 時点では extras.coding.copilot だったが、 13.x では extras.ai.copilot と所属が ai に変更されたので注意。

その他

denops.vim

個人でよく使っている自作プラグインがあり、そのプラグインは denops.vim をベースに書いている。
こうしておくことで、TypeScript を使ってプラグインを書くことが出来る。つまり、NeoVim でも動くが、Vim での動く様に作ることが出来、VimScript や Lua など固有環境に振り回されることがない。

参考までに denops.vimと一緒に takavfx/dailynote.vim をインストールしてみる。

denops.lua
return {
  { "vim-denops/denops.vim" },
  { "takavfx/dailynote.vim" },
}

22
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?