vim初心者、neovimを練習し、IDEにした

# はじめに
vimを勉強したいと思いました。とてもかっこいいからです。
操作方法を覚えました。```i```で編集して、```:wq```で閉じて...。さあ、vimが編集できるようになりました。

そして...、**次に何をすればいいのか分からなくなってしまいました。**

そこで、vimを練習し、IDEにした際の記録をまとめます。苦労もしますがIDEになった時の感動とスムーズな編集は最高です。


## これが、こうなります(neovim as an IDE)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261812/6c8a9f33-99f1-d1c9-eab0-634fe7275c95.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261812/c65b6c01-e99b-fa16-27c5-2e3fd23f83c6.png)

# 環境
windows wsl(ubuntu linux)
neovim 0.9.1

# 概要
1. nvimの初期設定
2. コマンドを覚える編(記事紹介 & 学習方法)
3. IDEの設定編とハマりポイントの解決方法

到達点
- Vimの基本操作が分かる
- 日常のマウス操作を8割減らせる(ブラウジング、コード編集)
- neovimがVSCodeみたいなIDEになる


## 1. nvimの初期設定

### neovimの最新バージョンのインストール
いきなりハマりポイントです。neovimの最新バージョンは以下では入りません。
```
sudo apt install neovim
```

以下の記事で紹介した方法で入れます。

https://qiita.com/HarutoWatahiki/items/123a0e6bc5cc283ac597




## 2. コマンドを覚える編(記事紹介 & 学習方法)

### Vimの概要をつかむ

最初にVimの全体的な概要をつかみます。
この記事はVimのコマンドだけでなく、Vimの思想や考え方が入ってきます。神です。
ボリュームがあるのでざっと読みました。

https://qiita.com/baby-degu/items/9b6b275b72c37a02001c

### 基本コマンドを習得する
ここはvimtutorで耐えようと思いましたが、15分で飽きてしまいました。
[vimgenius](http://www.vimgenius.com)なら、タイピングゲーム感覚でvimのコマンドが覚えられます！

http://www.vimgenius.com

:::note
Tips: 出てきたコマンドのメモを取っておくといいです

:::

例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261812/31dee2b3-84a8-4a8c-856e-8b247f7205d7.png)


### 記事を読み、コマンドをまとめる

以下の記事を読み、コマンドもメモしました。


https://qiita.com/baby-degu/items/9b6b275b72c37a02001c

https://wolfbash.hateblo.jp/entry/2017/08/25/121711

https://wolfbash.hateblo.jp/entry/2017/09/05/234143


### 脱マウス(vimium)
直接関係はありません。

chromeのショートカットを覚えるのとvimiumの導入をしました。
vimiumはキーバインドでブラウジングができるchrome拡張です

操作方法は[github](https://github.com/philc/vimium)にあります。

https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb


## 3. IDEの設定編(neovim as an IDE)

これを見ました。動画とセットです。
非常によくまとまっているので最高でした。

https://programmingpercy.tech/blog/learn-how-to-use-neovim-as-ide/

https://www.youtube.com/watch?v=H0J1c48NObc

~~最終的な設定ファイル周りはこうなりました。便利にするために一部いじっています。~~

https://github.com/WATA-Haru/nvim-ide-conf

## 2023/11/02追記
[Packer](https://github.com/wbthomason/packer.nvim) nvimの公式によると、Packerは2023/08-メンテナンスされなくなってしまったそうです。
>This repository is currently unmaintained. For the time being (as of August, 2023), it is recommended to use one of the following plugin managers instead:

そこで、プラグインマネージャをlazy.nvimに変えました。記事で紹介のあるプラグインは入れているはずなので参考にしてください。

https://github.com/WATA-Haru/nvim


### ハマったところ

### wslとnvim間でのクリップボード共有
wslからwindowsのクリップボード間のコピー・ペーストがしたい場合は以下の記事で紹介した方法が使用できます。設定しない人は飛ばしてください。

https://qiita.com/HarutoWatahiki/items/32279372ea7182d75677


#### なぜかlspで言語パッケージがインストールできない
そもそも対象言語をインストールしていませんでした。
コマンドラインからインストールします。

#### mason-lspの自動インストールと有効化

これをやらないと、環境を変えたときにいちいち```:MasonInstall```しなければいけなくなります。そのため、自動インストールと設定の有効化をします。以下の記事にまとめました。
ensuredへの追記と、setup_handlersの設定をするとできます。

https://qiita.com/HarutoWatahiki/items/0bcaa0c2eb2e463687ad

なお、デバッガの[delve](https://github.com/mfussenegger/nvim-dap)は自動インストールできませんでした。
そのため、```:MasonInstall delve```する必要があります。

#### pylspを入れると```error failed to create python3 virtual environment```が出る

以下の記事にまとめました。```:checkhealth```で確認し、仮想環境を整えたら治りました。

https://qiita.com/HarutoWatahiki/items/788e26e8d61e42d4d837


#### nvim-treeを自動で開く設定にする
nvim-treeを自動で開く設定を書きます。```nvim hoge.lua```で自動でtreeが開きます。
以下の記事にまとめました。

参考

https://qiita.com/HarutoWatahiki/items/761ba2d378d86ecbc31c


#### fontの変え方

nard-fontが使用できないと、nvim-treeのアイコンが表示されません。
フォントをインストールします。wslではなくpowershell上の設定でフォントを変える必要があります。以下の記事にまとめました。

https://qiita.com/HarutoWatahiki/items/acdd791abeef4ed13c45

#### nvim-treeで、開いた先のファイルのディレクトリツリーを表示したい


nvim hoge.txtをした際に、開いたファイル先のディレクトリツリーを表示してほしかったのでその設定方法をまとめました。
例えばカレントディレクトリが~/path/to/currentだったとして、```nvim ~/config/nvim/init.lua```を開いた場合、currentをディレクトリツリーに表示するのではなく、nvimの方を表示することができます。

https://qiita.com/HarutoWatahiki/items/472839a385fc98743c08

#### ```syntax-highlight```を全ての対応言語に適応させたい(all)
```syntax-highlight```で全ての言語に対応させられます。
設定ファイルの最後に以下を追加します。

```syntax-highlight.lua
require'nvim-treesitter.configs'.setup {
    -- 最後に追記
	-- A list of parser names, or "all"
	ensure_installed = 'all', -- sameas :TSInstall all
}
```

```syntax-highlight.lua
require'nvim-treesitter.configs'.setup {
	-- A list of parser names, or "all"
	--ensure_installed = { "go", "lua", "rust" },

	-- Install parsers synchronously (only applied to `ensure_installed`)
	sync_install = false,

	-- Automatically install missing parsers when entering buffer
	-- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
	auto_install = true,

	highlight = {
		-- `false` will disable the whole extension
		enable = true,

	},
	indent = {
		enable = true,
	},
	ensure_installed = 'all', -- sameas :TSInstall all
}
```

#### bufferlineを入れて、ファイルをヘッダーに表示して便利にする

これです。現在開いているファイルを上に表示します。おすすめです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261812/0a155265-907a-10ad-b181-c22bbb0307a4.png)

https://github.com/akinsho/bufferline.nvim

bufferlineの設定やキー配置は下記の記事にまとめました。

https://qiita.com/HarutoWatahiki/items/e3b3cc0512e365851f0a

# 終わりに

以上です。エディタがかっこいいから、がりがりコード書いていくぞー！！


# 今後こうしたい

便利なプラグインを入れたいです。copilotなども使えるそうです。
[copilot.vim](https://github.com/github/copilot.vim)

あとGo以外のデバッガを入れたいですね
[python debuggerの記事](https://zenn.dev/kawat/articles/51f9cc1f0f0aa9)
[C++ debuggerの記事](https://ryota2357.com/blog/2022/cpp-codelldb-debug-nvim/)


vscodeのごとく、長いかっこを折り畳みたいですね

[関数の折り畳みのReddit](https://www.reddit.com/r/neovim/comments/10q2mjq/i_dont_really_get_folding/)

[関数折り畳みのプラグイン](https://github.com/kevinhwang91/nvim-ufo)

Dockerでdotfilesをまとめてどこからでもneovimを使えるようにしたいです。あと、プラグインも作りたいですね。