随時更新用
はじめに
こちらは自分の 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 の方を入れた。
プラグイン追加の基本
プラグインを追加したい場合、lua/plugins
以下に、任意のファイル名で lua ファイルを作成していく。
目的ごとに lua ファイルを分けられるので、プラグインごとに lua ファイルを作成してもいいし、カテゴリごとに lua ファイルを作成して、その中でまとめて管理するという方法もある。
自分で目的に応じてファイルを作れるし、プラグインを無効にする場合は削除する方法や、enabled = false
キーを設定することで無効にもできる。かなり柔軟に管理できていい。
プラグイン lua ファイルを作ってプラグインを読み込む
:e $localappdata/nvim/lua/plugins/myplugins.lua
return {
{ "takavfx/dailynote.vim" }
}
colorscheme の設定
起動時の設定
例えば、デフォルトで内包されている vim
テーマを起動時のテーマとして設定したいとする。
tokyonight |
vim |
---|---|
return {
{ "LazyVim/LazyVim",
opts = {
colorscheme = "vim",
},
},
}
カスタムテーマプラグインの導入と適用
デフォルトだと tokyonight
が指定されている。
先に触っていた Helix Editor にデフォルトで入っていた everforest
が結構好みだったので、これを入れたい。
これを有効にするにはまずは everforest-nvim
のインストールと、起動時に色設定をする必要がある。
という事で以下の様に記述する。
return {
{ "neanias/everforest-nvim" },
{ "LazyVim/LazyVim",
opts = {
colorscheme = "everforest",
},
},
}
これで次の起動時に everforest-nvim
のダウンロードと適用がなされ、かつ適用される。
さらにテーマを追加していきたい場合
追加で nord.nvim
テーマを追加したいとする。
この場合は、前のオプションの方に追加していく。
return {
{ "neanias/everforest-nvim", "shaunsingh/nord.nvim" },
{ "LazyVim/LazyVim",
opts = {
colorscheme = "nord",
},
},
}
任意のカスタムテーマを活かしながら背景を透明にしたい
例えば、 everforest
を適用しながら背景を透明にしたいとする。
この場合、 transparent.nvim
を導入する。
return {
{ "xiyaowong/transparent.nvim" },
}
:TransparentEnable
で有効にできる。
コンフィグ管理
コンフィグは、dotfiles として nvim 以下を Git 全体管理に。
これをシンボリックリンクする形で運用。
言語セットアップ
LazyVim での考え方
LazyVim は最初からある程度使える弁当箱のようなもの。
紐解いていくと最初からプリセットが用意されている。
その一つが、LazyExtras の存在。
次のような形で lazy.lua
を設定すると、必要なモジュール郡のセットを読み込んでこれる。
例えば lang.svelte
はこのセットで読み込んでいくとあっという間に構築できたりする。
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>
また、特定のコーディングタイプのファイルを開いている場合であれば、 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
でインストール
Python
LSP | Linter | Formetter | Type check |
---|---|---|---|
python-lsp-server | python-lsp-ruff | python-lsp-ruff | pyright |
LSP
インストール
-
:MasonInstall python-lsp-server
でインストール
インストールすると、ヘルプ表示なども表示されるようになる。
Python のインストールおよび、実行可能にしておく必要がある。
Linter / Formatter
いずれも高速にかつ統括的に処理してくれる Ruff で統一したいので、pylsp
の Ruff プラグインである python-lsp-ruff
をインストールする。
インストール
-
:PylspInstall python-lsp-ruff
を実行
pylsp
をインストールすると、Mason 経由で ruff
をインストールしても Ruff でフォーマットをしてくれない。
pylsp
の標準は、リンタは Pyflke、フォーマットは autopep8 で行うように設定されている。
さらに複雑度チェックは McCabe で行われ、pycodestyle による PEP 基準のコードになるようなチェックと警告が表示されるようになっている。
python-lsp-ruff
をインストールすると、これらを Ruff で処理する用に自動的に設定される。
This plugin will disable
pycodestyle
,pyflakes
,mccabe
,autopep8
, andyapf
by default, unless they are explicitly enabled in the client configuration. Whenpython-lsp-ruff
is enabled, all linting diagnostics and formatting capabilities will be provided byruff
.
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
時点で、Mypy や Pyright、Pyre などがある。
僕の現状の用途としては、プロジェクトで VSCode を使っている人も多い事と、VSCode 上での設定のしやすさから Pyright を選択した。(Mypy よりも体感速い結果を出してくれるので、そういう面では好み。
インストール
-
:MasonInstall pyright
でインストール
TypeScript
LSP
LSP | Linter | Formetter | Type check |
---|---|---|---|
tsserver | - | prettier | - |
インストール
-
:MasonInstall tsserver
でインストール
Svelte
LSP
インストール
-
lua/config/lazy.lua
でlang.svelte
を有効にする
Zero-effort type safety のための設定
tsconfig.json に typescript-svelte-plugin
を追記する。
{
"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
をインストールしてみる。
return {
{ "vim-denops/denops.vim" },
{ "takavfx/dailynote.vim" },
}