何故(neo)vimを使うのか

## 始めに
neovimをメインエディタにして1年を過ぎました

VSCodeの一人勝ち状態が続いていて、The AI Code Editorを名乗る[Cursor](https://www.cursor.com/)やThe editor for what's nextを名乗る [Zed](https://zed.dev/)、A post-modern text editor.を名乗る[Helix](https://helix-editor.com/)、A Community-led Hyper-Hackable Text Editorを名乗るAtom後継の[PULSAR](https://pulsar-edit.dev/)等、魅力的な選択肢があり、[IntelliJ IDEA](https://www.jetbrains.com/ja-jp/idea/)や[Visual Studio](https://visualstudio.microsoft.com/ja/)、[Eclipse](https://eclipseide.org/)、[Apache NetBeans](https://netbeans.apache.org/front/main/index.html)と言ったIDE等々色んな選択肢がありますが、今のところneovimから乗り換える予定はありません

そこで、何故そんなにneovimに愛着を感じているのかを考えてみました
* [軽い](#軽い)
* [やりたい事がすぐに出来る](#やりたい事がすぐに出来る)
* [エディタが成長する](#エディタが成長する)
* [相談先がある](#相談先がある)


## 軽い
1. 起動に150msecしか必要としません
1. 思いついた時に起動して、すぐに行動に移れます
1. 速いのは正義です

測定ツールでの計測結果
![スクリーンショット 2024-12-05 19.07.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/95ef537d-da84-1421-e892-d697cc97c12f.png)


## やりたい事がすぐに出来る
コードを書いていて、エディタに包含されているターミナルを開きたくなった時に、開き方をネットで調べていませんか?
画面を分割したくなった時はどうでしょう?メニューを探していませんか?
(neo)vimなら、キーを2つ3つ叩けば出来ます
自分で設定するせいか、すぐにキーを思い出せます
これって結構大きくて、フロー状態をずっとキープ出来るんですよね


## エディタが成長する
素の(neo)vimって編集しか出来ません
自分の欲しい機能をひとつひとつ積み上げて、自分だけの環境を作成するのが楽しいですね。またひとつ強くなった的な
自分でセットアップしたので使いたい時に使いたい機能が使えるのは大きいです

今のプログラム用エディタって一通りの機能が揃っていますが、メニュー見てもどんな機能か分からなかったり、ファイルをコピーするのにファイラを開いたりと、逆にエディタに使われていませんか?

## 相談先がある
[vim-jp](https://vim-jp.org/docs/chat.html)ってslackがありまして、vimは勿論、emacsやgolang, kosodateチャネルやjopboardまであります
generalチャネルで4100人を越えていました
[ラジオ](https://vim-jp-radio.com/)もあります
プラグインの相談をすると、作者さんから直接アドバイスを頂くシーンも見たことあります

私の説明よりもTOMOYAさんのブログを見た方が早いかも知れません
[エンジニアの楽園 vim-jp](https://blog.tomoya.dev/posts/vim-jp-is-a-paradise-for-engineers/)


## お世話になっているプラグインの紹介(1部)
私の開発を支えてくれているプラグイン達です

### ファイラー
[mini.files](https://github.com/echasnovski/mini.files)
左カラムに常駐させず、必要な時のみ呼び出すスタイルです
ファイル操作がvimと同じでファイラ画面をファイル名を変更して、=で確定すると、実際のファイルもリネーム出来ます
フローティングに対応しているmini.filesを愛用しています
同様のファイラーだと[oil.nvim](https://github.com/stevearc/oil.nvim)が有名ですが、私の環境では起動が何故か遅く、瞬時に起動するこちらを使っています
下のマッピングで大分使い易くなりました
```mapping.lua
mappings = {
    go_in      = '<CR>',
    go_in_plus = 'J',
    go_out     = '<BS>',
    reset      = 'R',
},
windows = {
    preview = true,
}
```
![スクリーンショット 2024-12-05 10.52.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/6d56fe80-42a3-5225-2239-49430bf1cfdd.png)


### ファジーファインダー
[telescope.nvim](https://github.com/nvim-telescope/telescope.nvim)
一覧からインクリメンタルで絞り込めるユーティリティです
主にBufferの切り替えに使っています

### ファイル関係プラグイン
[smart-open](https://github.com/danielfalk/smart-open.nvim)
上記のpluginです
直近開いたファイルの一覧を表示してくれ、インクリメンタルで検索できます

### ターミナル関係
[toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim)
vim内にターミナルを表示してくれます
今はもっぱらFloatingで表示していますが、Windowに表示したい場合もあるのでキーバインドを検討しています
![スクリーンショット 2024-12-05 10.54.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/4eee490d-d334-39f4-19db-737c64c33b5a.png)

### 自動補完
[blink.cmp](https://github.com/Saghen/blink.cmp)
定番は [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) になるかと思います
長い間使っていましたが、何かのタイミングで候補が表示されなくなるので、blink.cmpの開発が進んで、ある程度の設定がサポートされたタイミングでこちらに乗り替えました
今のところ、問題なく使えています
![スクリーンショット 2024-12-05 10.56.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/a435f2f7-2213-872f-0622-6ad5316d6fca.png)

### 日本語入力
[skkeleton](https://github.com/vim-skk/skkeleton)
SKKユーザーですので自ずとこちらに
OS側はMacSKKを使っています
時々、OS側のIMEを使っているのか、skkeletonのIMEを使っているのか分からなくなりますw
![スクリーンショット 2024-11-29 15.23.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/83c608fe-b30e-02fd-e09c-dbe23488f8bc.png)

### カーソル移動
[flash.nvim](https://github.com/folke/flash.nvim)
移動したいワードの先頭の文字をタイプすると該当箇所にラベルが貼られ、タイプを進めるごとに選択肢が絞られていきます
希望するワードのところに数回のキーで移動出来るのは快適です

下は「bl」までタイプしたところです。後は移動したいところのキー(f, g, k, q, t)を打てば移動できます
![スクリーンショット 2024-12-05 11.03.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/3cf3aa12-8b4a-346c-e5d9-903ad64e8ee5.png)

### window移動
[nvim-window](https://github.com/yorickpeterse/nvim-window)
私の使い方だと精々左右に2分割ぐらいですが、その状況だと「**,**」 と 左Windowなら「**a**」右Windowなら「**b**」で移動出来ます

```keymap.lua
vim.keymap.set("n", ",", ":lua require('nvim-window').pick()<CR>", { noremap = true })
```


### 編集系
[vim-sandwich](https://github.com/machakann/vim-sandwich)
[テキストオブジェクト](https://www.key-p.com/blog/staff/archives/107307) のプラグインです

単語を囲んでいる両方の「"」を「'」に変換出来たりします
無論「[aWord]」を「(aWord)」とかも出来ます
これが決まると気持ち良いです

docmentにありますが、下の設定を入れると思うように動くようになりました
```keymap.lua
vim.keymap.set({ 'n', 'x' }, 's', '<NOP>')
```

### お知らせ系コマンド系
[Noice (Nice, Noise, Notice)](https://github.com/folke/noice.nvim)
vimというと画面の一番下にコマンド行が表示されますが、これを画面中央で表示してくれるプラグインです
画面右上にカラフルなポップアップでお知らせもしてくれます
![スクリーンショット 2024-11-29 15.22.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/792a05ed-84a7-6b82-0b3b-2db2902707fe.png)


### 検索補助
[fzf ❤️ vim](https://github.com/junegunn/fzf.vim)

ファイル内の検索文字列に一致するリストを表示してくれます
~~ファジーファインダーは上記のtelescopeを使っているのですが、今編集しているファイルのみの検索をサポートしているのはこのプラグインのみ(BLines)のようです~~

:::note info
vim-jp slackでtelescopeのcurrent_buffer_fuzzy_findが対応していると思えて頂きました
yuys13さん、ありがとうございました
:::

![スクリーンショット 2024-12-05 11.08.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6748/1471052f-315a-ae43-ffd9-29bb9c4066e3.png)


### 開発系
[lspsaga.nvim](https://nvimdev.github.io/lspsaga/)
下の機能を提供してくれます
使っているのは、1, 4, 6, 11ぐらいですね
それでも快適なプログラミング環境を提供してくれます

1. [Breadcrumbs](https://nvimdev.github.io/lspsaga/breadcrumbs/)
2. Callhierarchy
3. Code Action
4. [Definition](https://nvimdev.github.io/lspsaga/definition/)
5. Diagnostic
6. [Finder](https://nvimdev.github.io/lspsaga/finder/)
7. Float Terminal
8. Hover
9. Implement
10. LightBulb
11. [Outline](https://nvimdev.github.io/lspsaga/outline/)
12. Rename
13. Ui Beacon


https://nvimdev.github.io/lspsaga/definition/

## 今後やりたい事
### testの実行をもっと早く
一番多く使っているのは、pythonなんですが、pytestの起動に(vim内で)Terminalを起動して、↑を押して前回コマンドを呼び出して実行すると2アクションかかっています
vim-testやquickrunから実行できれば1アクションで済みますので、是非実現したいですのですが、pytest.iniは見つけてくれるのですが、実際のテストの抽出が上手くいかず、0テストを実行しました的な結果が返っています

### 設定ファイルの整理
思いつくままに記載しているので、結構あちこちに分散しています
コメントアウトして放置なのも多々あります

### text-objectをもっと身近に
まだ脳内リンクが完成していません

### vimレベルの向上
まだまだカーソルキーに触れている時間もあるので、下の記事レベルぐらいにはなりたいですね
[中級 Vim 操作](https://zenn.dev/vim_jp/articles/2024-06-05-vim-middle-class-features)


#### この記事がどなたかのお役に立ちますように