# AstroNvim (neovim)
## Neovimとは
**簡単に言えば、高機能なモダンデザインのVim**
Linuxのディストリビューションに標準で入っているVimの派生
スリムでモダンな機能(UIや補完など)や拡張機能(gitやツリー表示)の管理など標準搭載!!
様々なエディター(VS code, etc..)があるなか、Vimは使いやすさや拡張性が低い
## [AstroNvim](https://astronvim.com)とは
デザインや必要機能があらかじめ設定されているneovim
neovimを一から自分仕様に設定するのはしんどいって人向け
他にも種類はあるかも
- [NvChad](https://github.com/NvChad/NvChad)
## 環境
- OS: Linux(Rocky Linux), Ubuntuなども可
- 作業フォルダ:筆者はAppというフォルダでappimage等を管理している
## nerb-fontsのインストール
AstroNvimはiconを使用するため,nerb-fontsに依存する
数GBほどあるため,cloneに時間がかかる
```bash
$ mkdir -p ~/App/neovim
$ cd ~/App/neovim
$ git clone --depth 1 https://github.com/ryanoasis/nerd-fonts.git
$ cd nerd-fonts
$ chmod u+x install.sh && ./install.sh
```
## neovimのインストール
neovimのリポジトリは [https://github.com/neovim/neovim/tree/stable](https://github.com/neovim/neovim/tree/stable)
appimageのダウンロード先はここ(GitHubの [Releases](https://github.com/neovim/neovim/releases/tag/stable) から)
```bash
$ cd ~/App/neovim
$ wget https://github.com/neovim/neovim/releases/download/stable/nvim.appimage
$ chmod u+x ~/App/neovim/nvim.appimage
```
毎回,appimageを実行するのはめんどくさい
`/usr/bin/` 内に `nvim.appimage` へのシンボリックリンクを作成し,どこからでも `nvim` で起動できるようにする
```bash
$ sudo ln -s ~/App/neovim/nvim.appimage /usr/bin/nvim
```
Neovim の実行
```bash
$ nvim
```
:::{dropdown} FUSEエラーが出た場合
libfuse2をインストールする
```bash
$ sudo apt install libfuse2
```
:::
## AstoroNvimのインストール
- 過去にNvimを使っていた場合
```BASH
# Nvimの設定ファイルのバックアップ
$ mv ~/.config/nvim ~/.config/nvim.bak
$ mv ~/.local/share/nvim ~/.local/share/nvim.bak
```
AstroNvimの設定ファイルを読み込む
```bash
$ git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim
```
nvimの起動と初期セットアップ
```bash
$ nvim
$ nvim --version
NVIM v0.9.4
Build type: Release
LuaJIT 2.1.1692716794
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/__w/neovim/neovim/build/nvim.AppDir/usr/share/nvim"
Run :checkhealth for more info
```
## 使い方
```bash
$ nvim . # 現在いる階層でnvimを起動する.(vs codeの`code .`と同じ)
```
terminalなので基本的にキーボード操作
詳細はショートカットは[AstroNvimのホームページ](https://astronvim.com/Basic%20Usage/walkthrough)を参照
- 基本操作
- space keyがLeader
- space keyを一回押すとショートカット一覧表示
- コマンドモード
Escape -> コロン(:)でコマンドモードに
- w で保存
- q で終了
- Tab でコマンド一覧
- Mason
- AstroUpdate ...etc
## 補完プラグイン
- 検索ツール(高速なgrep)
標準で入っていないのでインストールする
`space key -> f -> w`の順に押すことで, **特定の文字列を含むファイル** を検索
`space key -> f -> f`の順に押すことで, **特定の文字列がファイル名にあるファイル** を検索
```
$ sudo apt install ripgrep
$ rg import test.py # 単純にコマンドを使う場合はこう
```
- Python用の言語サーバー導入
```
$ sudo apt install python3-venv # flake8, black, mypy で仮想環境が必要
$ sudo apt install npm # pyright で必要
```
- nvimのコマンドモードで `:MasonInstall pyright flake8 black mypy`
- clipboard
Linuxの場合,`xsel` or `xclip` のインストールが必要
- 使用するレジスタの選択
- `"*` で選択範囲の自動コピー
- `"+` でいつもの
- `"0` でヤンク
- コピーは `Normal Mode` で `y`
- ペーストは `Normal Mode` で `p`
```
$ sudo apt install xsel
```
- C, C++用の言語サーバー導入
- nvimのコマンドモードで `:MasonInstall clangd`
```
# main.cpp コンパイル時の詳細表示(インクルードパスやエラーなど)
$ ~/.local/share/nvim/mason/bin/clangd --check=/path/to/main.cpp
# (Option) もし,標準ライブラリがないとエラーが出た場合,インストール
$ sudo apt install libstdc++-12-dev # セレクトされた GCC バージョンの標準ライブラリが入っていない場合
```
## lint のプラグイン導入
mason の仮想環境に直接入れないと認識しない^[4]
- mypy
- pydantic
```bash
$ cd .local/share/nvim/mason/packages/mypy/
$ source venv/bin/activate
$ pip install pydantic
```
## Troubleshooting
#### lazy.nvim
**解決方法**
1.コマンドモードで Lazy を開く
2.'U' で indent-blankline.nvim をアップデートする
## reference
1. https://www.reddit.com/r/neovim/comments/eecbck/nvimappimage/
2. https://psipsina.jp/note/vim/neovim_clipboard.html
3. https://clangd.llvm.org/guides/system-headers#fixing-missing-system-header-issues
4. https://zenn.dev/h_wata/articles/4026a6af6dc671