Neovim IDE パッケージ (LunarVim)

# モチベーション

Neovim[^1]の設定をするのは楽しいが、同時に「こんなことをしている暇はない」[^2]という思いもある。

そこで、インストールすればすぐに使えるよう各種プラグインがプリセットされたNeovim IDE パッケージを下記にメモする。

LunarVimを導入してみたが、もっさりとした動作に耐えきれず結局、元の[kitty](https://sw.kovidgoyal.net/kitty/)+(素の)Neovimに戻った。プラグインについて、[vim-plug](https://github.com/junegunn/vim-plug)だとコンフィグがバラバラになって管理しきれなくなるので、[packer](https://github.com/wbthomason/packer.nvim)を使うのが大事。

# 要件

欲しい機能は下記。
- Julia環境
    - 関数の自動補完。
    - REPL実行環境
- Markdown環境
    - リアルタイムのプレビュー表示。CSSでのカスタマイズあり。
    - 数式が表示できること。
- 全文検索
- Lightテーマ。
- 一般要件
    - デザイン、信頼性、高速性、容易性、等

# IDE パッケージ
どのようなパッケージがあるかは、下記のような用語でGithubを検索すると良い。なお同様の手法で、Emacsについても調べられる。
- [neovim-configuration](https://github.com/topics/neovim-configuration)
- [neovim-config](https://github.com/topics/neovim-config)
- [neovim-setup](https://github.com/topics/neovim-setup)
- [vim-configuration](https://github.com/topics/vim-configuration)

下記のパッケージ横の☆は、Github上でのスター数。各パッケージとも、Githubだけでなく自身のHPを立ち上げているあたり、やる気が見て取れる。

## [NvChad](https://nvchad.com/) ☆15.1k
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325849/e36bb625-0954-20fd-c065-c9e601bf619a.png)

一番人気のパッケージ。速度が重視されているらしい。元は[siduck](https://github.com/siduck)さんの個人プロジェクト。

[Lightテーマがない](https://nvchad.com/themes/themelist)ようなので、パス。

## [LunarVim](https://www.lunarvim.org/) ☆13.5k
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325849/03af54bc-0e11-03e9-572a-0fcb86ce54bd.png)

カスタマイズ性と高速性を重視しているとのこと。ドキュメントも充実している印象。NvChadとは対象的に、コミュニティ重視。

### 導入
[公式 (英語)](https://www.lunarvim.org/docs/installation)を参考に、ターミナルに下記を入れる (Ubuntuの場合)。Macなら`sudo apt-get install -y`が`brew install`とかになるはず。最終行のNeovimのインストールそのものは、5分程度かかる。また、初回起動時はプラグインのインストールに1分程度、時間がかかる。

既存の設定は (多分) 上書きされない。

```bash
# bash
sudo apt-get install -y git
sudo apt-get install -y make
sudo apt-get install -y pip
sudo apt-get install -y python
sudo apt-get install -y npm
sudo apt-get install -y nodejs
sudo apt-get install -y cargo
LV_BRANCH='release-1.2/neovim-0.8' bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/fc6873809934917b470bff1b072171879899a36b/utils/installer/install.sh)
echo 'export PATH=/home/user/.local/bin:$PATH' >> ~/.bashrc; source ~/.bashrc
lvim
```

`lvim`起動後に、下記。LSPの名称については、[ここ](https://github.com/williamboman/nvim-lsp-installer)のページ下部を参照。
```vimscript
" lvim
:TSInstall julia markdown
:LspInstall julials marksman
:!mkdir ~/.config/lvim/ftplugin
:e ~/.config/lvim/ftplugin/julia.lua " 下記コードを書いて保存
```
```lua
-- ~/.config/lvim/ftplugin/julia.lua
local opts = {}
-- re-use common lsp configurations (keybindings, buffer-highlight and cmp integration)
opts = require("lvim.lsp").get_common_opts()
require('lspconfig').julials.setup(opts)
```
```bash
# bash
julia --project=~/.julia/environments/nvim-lspconfig -e 'using Pkg; Pkg.add("LanguageServer")'
```

必要に応じてNerdフォントも入れる。例えば下記。`git clone`に30分ほどかかるので注意。その後、`gnome-terminal`や`iTerm2`にフォントを設定してやる。
```bash
# bash
git clone https://github.com/ryanoasis/nerd-fonts
cd nerd-fonts
./install.sh FiraCode
```

### キーバインド
[デフォルトのキーバインド](https://www.lunarvim.org/docs/keybind-overview)は、例えば下記。
|キー|操作|モード|
|:-:|:-:|:-:|
|`<Space>`(1秒待ち)|which-key|ノーマル|
|`<Space>-e`|edit file (nvim-tree)|ノーマル|
|`<Space>-f`|find file (telescope)|ノーマル|
|`<Space>-;`|スタート画面|ノーマル|
|`<Ctrl>-\`|ターミナル|ノーマル|
|`<Space>-bb/bn`|タブ移動(左右)|ノーマル|
|`<Space>-bj`|タブ移動(ヒント)|ノーマル|

### 設定
`~/.config/lvim/config.lua`に設定を行う。
```lua
-- ~/.config/lvim/config.lua
vim.o.background = "light"
```

#### キーマップ
キーマップの設定については[ここ](https://www.lunarvim.org/docs/configuration/keybindings)。

#### プラグイン
`~/.config/lvim/config.lua`内に、例えば下記のように設定する。設定後、`:PackerSync`を実行する。
```lua
-- ~/.config/lvim/config.lua
lvim.plugins = {
  'morhetz/gruvbox',
  'psliwka/vim-smoothie',
  'JuliaEditorSupport/julia-vim',
}

```

#### カラースキーム
`<Space>-sp`で色々なスキームを試せるので、そこで自分が好きなものを見つけて、下記を設定ファイルに書き込む。なお、Vimカラースキームの選択は[このページ](https://vimcolorschemes.com/)を見て行うのが効率的。
```lua
-- ~/.config/lvim/config.lua
```

## [AstroNvim](https://astronvim.com/) ☆6.8k
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325849/45ce8b3b-5a08-6878-a883-a29fa1b7b727.png)

失礼な言い方だけれど、LunarVimの下位互換のイメージ。

## [LazyVim](https://www.lazyvim.org/) ☆4.2k

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325849/d5901ae9-de01-a049-440b-7c3c33ee9a19.png)

プラグインマネージャーである[`lazy.nvim`](https://github.com/folke/lazy.nvim)を核としたパッケージ。一部で、独自のキーバーインドを採用しているように見える。

並べてみると、どのプラグインも似ている。実際使ってみても、そこまで大きな差はないのだろうと予想される。

## [nvim-config](https://jdhao.github.io/nvim-config/) ☆2.3k
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325849/f450ada4-bd23-7d70-1321-67ed1b7b0046.png)

コミュニティではなく、個人が作ったパッケージ。

## [SpaceVim](https://spacevim.org/) ☆19.7k
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325849/eec1eb18-71c1-5c1e-137e-79918e7195e2.png)

恐らく (Neoでない) Vimでは唯一のIDEパッケージ。SpaceEmacsからインスピレーションを受けていて、スペースキーが操作の鍵になる設定がなされている。レイヤーという独自の設定層を設けていて、`init.lua/vim`を触らなくてもNeovimの設定が行えるようになっている。以前に入れた際には、SpaceEmacsと同様、動作がもっさりだった記憶がある。

HPを見る限り、Juliaがサポートされていないように見えるので、見送り。

[^1]: ①Visual Studio Codeは使いやすいし動作も高速なのだが、ところどころでマウスを使わないといけない操作が入るのが嫌い。②Emacsはマウスなしでもいけるが、素早いカーソル移動をしようと思うと、やはりマウスが必要になる。Evilは挙動が不安定な場合があり、キーバインドのカスタマイズがしにくい。また、パッケージが昔ながらの「ソース読め」なので、導入コストが高い。③(Neo)vimはその点、カーソル移動が高速で行え、カスタマイズ性もバランスが良いように感じられる。
[^2]: LSPの設定、似たようなプラグインの中からの選定、プラグインを入れる順番、こちらを入れるとあちらが動かない、少し触っている内にどこが原因でエラーが出ているのか分からなくなった、等。Visual Studio Codeならば、とっくに動いて半日コードを書いていたところなのに……のような。