LoginSignup
4
4

オレオレ Neovim 環境構築 with LazyVim

Last updated at Posted at 2024-05-30

随時更新用

はじめに

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

主な想定利用用途

何を対象に利用環境を構築していくかは重要だと思うので、先にリストアップしておく。

  • 言語
    • Rust
    • Python
    • C
    • C++
    • C#
    • TypeScript
    • JavaScript
    • Svelte
    • YAML
    • TOML
    • JSON
    • Nullsoft Scriptable Install System

インストール

Windows

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

winget install Neovim.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

プラグイン追加の基本

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

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

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

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

colorscheme の設定

起動時の設定

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

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

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

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

image.png

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

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

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

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

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

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

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

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

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

lua/nvim/plugins/utils.lua
return {
  { "xiyaowong/transparent.nvim" },
}

:TransparentEnable で有効にできる。

image.png

コンフィグ管理

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

言語セットアップ

LazyVim での考え方

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

次のような形で 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.coding.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 マネージャーには、以下の二つを使用する。
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

インストール

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

Python

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

LSP

インストール

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

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

image.png

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

Linter / Formatter

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

インストール

  1. :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 よりも体感速い結果を出してくれるので、そういう面では好み。

インストール

  1. :MasonInstall pyright でインストール

TypeScript

LSP

LSP Linter Formetter Type check
tsserver - prettier -

インストール

  1. :MasonInstall tsserver でインストール

Svelte

LSP

インストール

  1. lua/config/lazy.lualang.svelte を有効にする

Zero-effort type safety のための設定

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

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

Nullsoft Scriptable Install System

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

ハイライト

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

その他

denops.vim

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

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

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

4
4
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
4
4