[[📒Articles]] > [[📒2024 Articles]]
![[2024-12-23.webp|cover-picture]]
2024年に私の[[Neovim]]がどのように成長していったのかを振り返ってみました。
> [!info]
> - この記事は [[Vim駅伝]] #2024/12/23 の 参加記事です
> - この記事は [Vim advent calendar 2024(Adventar)](https://adventar.org/calendars/10040) 23日目の記事です
## はじめに
開発環境を[[Neovim]]に統一したのはちょうど1年前のことです。2023年の終わりにはポエム記事を書いて[[Vim駅伝]]にも投稿しました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📘Neovimを使ったことがなかったころの君へ
</div>
<div class="link-card-v2-content">2023年のおわり、1年のふりかえり記事を書こうとネタを考えながら帰路につき、いつもは見ないポストを開けるとそこには見慣れない1通の手紙が...。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2023-12-29.jpg" />
<a data-href="📘Neovimを使ったことがなかったころの君へ" class="internal-link"></a>
</div>
%%[[📘Neovimを使ったことがなかったころの君へ]]%%
あれから私の[[Neovim]]環境はかなり進化したと思います。1月から順番に、その成長過程を振り返っていきます。
> [!hint]
> 既に説明済のノートがある場合、そちらへのリンクを案内します。すべて記載してしまうと大変なボリュームになってしまうので...。
> [!info]
> 本記事執筆時点での[[Neovim]]に関する設定は [owl-playbook > **/nvim](https://github.com/tadashi-aikawa/owl-playbook/tree/eecd99e1102d660f8d70cb4637202ba41b3e89ab/mnt/common/nvim) をご覧ください。
## 1月
### クイックフィックスを知る
それまで知らなかった[[クイックフィックス (Vim)|クイックフィックス]]という概念を知りました。単体では使い道が今一つ分かっていなかったのですが、[[絞り込んだ結果をクイックフィックスに表示 (telescope.nvim)|絞り込んだ結果をクイックフィックスに表示]]できるということを知ってからは重宝しています。
また、[[nvim-bqf]]というプラグインで[[クイックフィックス (Vim)|クイックフィックス]]を強化することにより、一層使いやすくなりました。今までは検索結果を頭で覚えながら気合で周辺コードを探索していましたが、[[クイックフィックス (Vim)|クイックフィックス]]を知ってからはエレガントにコードリーディングができるようになったと感じています。
### coc.nvim卒業
それまで便利に使っていた[[coc.nvim]]を卒業しました。せっかく[[Neovim]]を使っているので[[LSP]]を使ってみたり、[[Lspsaga]]でより良い体験をしたくなったからです。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-01-28 Neovimのcoc.nvimからLSPに移行してみる
</div>
<div class="link-card-v2-content">NeovimをIDEとして利用する場合にcoc.nvimを使っており、実用面でも不満はなかったが、いくつか理由があってLSPにチャレンジしてみたくなり、移行した。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image.webp" />
<a data-href="📜2024-01-28 Neovimのcoc.nvimからLSPに移行してみる" class="internal-link"></a>
</div>
%%[[📜2024-01-28 Neovimのcoc.nvimからLSPに移行してみる]]%%
このとき利用したプラグインは以下となっています。
- [[nvim-lspconfig]]
- [[mason.nvim]]
- [[mason-lspconfig.nvim]]
- [[null-ls.nvim]] -> [[none-ls.nvim]]
- [[nvim-cmp]]系
### Luaファイルを分割
今まで1つだった[[Lua]]ファイルを分割しました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-01-27 Neovimの設定ファイルを複数のluaファイルに分解する
</div>
<div class="link-card-v2-content">📜2024-01-28 Neovimのcoc.nvimからLSPに移行してみる に挑戦してみようと思っているが、すべてを移行するのは大変なので部分的に移行したい。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image.webp" />
<a data-href="📜2024-01-27 Neovimの設定ファイルを複数のluaファイルに分解する" class="internal-link"></a>
</div>
%%[[📜2024-01-27 Neovimの設定ファイルを複数のluaファイルに分解する]]%%
当時は少し迷ったのですが、今思い返すとやってよかったなと思います。これは **必須** ですね。
### masonをやめる
[[coc.nvim]]卒業時は[[mason.nvim]]を使っていましたがすぐにやめました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-01-30 mason.nvimを利用せずnvim-lspconfigだけでNeovimのLSPを管理する
</div>
<div class="link-card-v2-content">Neovimでcoc.nvimからLSPに移行したが、miseがあればmason.nvimを使うメリットはあまりなく、むしろ面倒ごとが増えるのでは...と思い、mason.nvimから脱却した。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image.webp" />
<a data-href="📜2024-01-30 mason.nvimを利用せずnvim-lspconfigだけでNeovimのLSPを管理する" class="internal-link"></a>
</div>
%%[[📜2024-01-30 mason.nvimを利用せずnvim-lspconfigだけでNeovimのLSPを管理する]]%%
依存するプラグインも2つ減りましたし、[[Neovim]]利用時とそうでないときで同じ実行ファイルを参照できるようになったのでトラブルも減りました。エディタごとにコマンドの参照先が違うなんて... もうこりごりですからね。
## 2月
### flash.nvim の導入
[[👤Folke Lematire]]氏作成の[[EasyMotion]]チックなプラグイン、[[flash.nvim]]を導入しました。今まで [[EasyMotion]] -> [[hop.nvim]] -> [[leap.nvim]] と渡り歩いてきましたが、私にはこれが一番直感的でした。
> [!info]
> 詳細は [[📘あまり紹介されていないけど かけがえのないNeovimプラグインたち#flash.nvim]] に記載しています。
### ファイル変更時にバッファを自動で再読み込み
[[ファイルが変更されたら自動で再読み込み (Neovim)|ファイルが変更されたら自動で再読み込み]]されるような設定を入れました。
### 分割キーバインドに一貫性を持たせる
[[Neovim]]のシーンごとに分割キーが異なると困るので一貫性を持たせました。垂直が `<C-CR>`、水平が `<C-s>` という基本ポリシーにしてからは迷わなくなりました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-02-24 Neovimのウィンドウ分割キーバインドに一貫性を持たせる
</div>
<div class="link-card-v2-content">Neovimでは通常のウィンドウ分割コマンド以外にも、各種プラグインの分割コマンドがある。現状、それらに一貫性がないため操作をするたびに迷うことが多い。それを整理する。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image.webp" />
<a data-href="📜2024-02-24 Neovimのウィンドウ分割キーバインドに一貫性を持たせる" class="internal-link"></a>
</div>
%%[[📜2024-02-24 Neovimのウィンドウ分割キーバインドに一貫性を持たせる]]%%
## 3月
### no-neck-pain.nvim の導入
[[Obsidian]]のように開いたバッファを横サイズ固定で画面中央に寄せるプラグイン、[[no-neck-pain.nvim]]を使い始めました。
> [!info]
> 詳細は [[📘あまり紹介されていないけど かけがえのないNeovimプラグインたち#no-neck-pain.nvim]] に記載しています。
### oil.nvim の導入
[[no-neck-pain.nvim]]の導入により、左側にファイルツリーを表示しなくても[[バッファ (Vim)|バッファ]]が見やすくなったので、前から気になっていた[[oil.nvim]]を使い始めました。
> [!info]
> 詳細は [[📘あまり紹介されていないけど かけがえのないNeovimプラグインたち#oil.nvim]] に記載しています。
### smart-open.nvim の導入
[[telescope.nvim]]の結果が直感的ではなかったので、自分にマッチするものを探した結果、[[smart-open.nvim]]にたどり着きました。
> [!info]
> 詳細は [[📘あまり紹介されていないけど かけがえのないNeovimプラグインたち#smart-open.nvim]] に記載しています。
### nvim-treesitter-context の導入
[[nvim-treesitter-context]]を使い始めました。スクロールしても関数定義とかを固定表示してくれるアレです。
![[Pasted image 20241220171046.png|frame]]
*定義や分岐の中にいる場合に全体がわかる*
### Neovimプラグインの記事執筆
[[Neovimプラグイン]]を探していると、ほとんどが有名どころのプラグインばかりだったので、紹介されていないけどゲームチェンジャーなプラグインの紹介記事を書きました。もちろん[[Vim駅伝]]参加記事です。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📘あまり紹介されていないけど かけがえのないNeovimプラグインたち
</div>
<div class="link-card-v2-content">Neovimプラグインの中で、日本語サイトでほぼ見かけないものに限定してお気に入りをいくつか紹介してきます。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-03-27.webp" />
<a data-href="📘あまり紹介されていないけど かけがえのないNeovimプラグインたち" class="internal-link"></a>
</div>
%%[[📘あまり紹介されていないけど かけがえのないNeovimプラグインたち]]%%
## 4月
4月はめぼしいトピックスがありませんでした。新年度の始まりでそれどころではなかったのかもしれません。
## 5月
### incline.nvim の導入
[[フローティングウィンドウ (Neovim)|フローティングウィンドウ]]として[[ステータスライン (Neovim)|ステータスライン]]を表示できるプラグイン、[[incline.nvim]]を導入しました。
> [!info]
> 詳細は [[📰2024年19週 Weekly Report#めっちゃCOOLなincline.nvim]] を参照してください。
> [!attention]
> 後ほど利用をやめています。
### render-markdown.nvim の導入
[[Markdown]]ファイルを[[WYSIWYG]]っぽくする[[render-markdown.nvim]]を導入しました。それまで、そもそも[[Neovim]]でこういうことができることすら知らなかったので結構衝撃でした。[[conceal (Neovim)|conceal]]という概念もはじめて知りました。
![[Pasted image 20241220173237.png|frame]]
*render-markdown.nvimで『見出し』『タスク』『リンク』の表示が変わっている*
### Neovim 0.10 にバージョンアップ
[[Neovim]]を0.10にバージョンアップしました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-05-18 Neovim 0.10にバージョンアップ
</div>
<div class="link-card-v2-content">Neovim 0.10がリリースされたのでバージョンアップしてみる。リリース内容は以下。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2024-05-18 Neovim 0.10にバージョンアップ" class="internal-link"></a>
</div>
%%[[📜2024-05-18 Neovim 0.10にバージョンアップ]]%%
新機能の中で実際に恩恵を得たのは[[LSP inlay hints (Neovim)|LSP inlay hints]]くらいです。[[Neovimプラグイン]]を[[Lua]]で書くとき、`await` が表示されるのは良いですね。
![[Pasted image 20241220174007.png]]
*awaitはinlay hintsなのでファイルには記載されていない*
### neodev.nvim の導入
[[Neovim]]の設定や[[Neovimプラグイン]]開発をサポートしてくれるプラグイン、[[neodev.nvim]]を導入しました。こちらも[[👤Folke Lematire]]氏作成のプラグインです。
> [!caution]
> 7月に非推奨となり、凍結されてしまったので、今は利用していません。
## 6月
6月もめぼしいトピックスはありませんでした。新規プロダクト開発で追い込まれていたので、[[Neovim]]の設定をいじっている余力はなかったのかもです。
## 7月
先月何もできなかった反動からか、7月の成長は著しいものがありました。
### Neovimプラグイン報告用環境構築
[[Neovimプラグイン]]で不具合が出たとき、issueとして報告する再現手順をつくるための環境作成方法を学びました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📕Neovimプラグインの再現確認方法
</div>
<div class="link-card-v2-content">Neovimプラグインでバグなどを発見しIssueで報告するときに再現確認するための方法。👤Folke Lematire氏のIssue templateで採用されている方法を利用する。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/prime.webp" />
<a data-href="📕Neovimプラグインの再現確認方法" class="internal-link"></a>
</div>
%%[[📕Neovimプラグインの再現確認方法]]%%
### AutoHotkeyとNeovimの連携に関する記事執筆
少しマニアックですが、[[AutoHotkey]]の設定で[[Neovim]]の操作性を極限まで上げる方法について記事を書きました。こちらも[[Vim駅伝]]参加記事です。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📘AutoHotkeyが織りなすNeovimの魅力
</div>
<div class="link-card-v2-content">AutoHotkeyでNeovimの魅力を一層引き出し、高みを目指す3つの方法を紹介します。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-07-17.webp" />
<a data-href="📘AutoHotkeyが織りなすNeovimの魅力" class="internal-link"></a>
</div>
%%[[📘AutoHotkeyが織りなすNeovimの魅力]]%%
### Marp導入でスライド作成もNeovimを使うように
職場で開催するVimLTの資料を作成のに『せっかくだから[[Neovim]]でつくりたい』ということで、5年ぶりに[[Marp]]を導入しました。
> [!info]
> 詳細は [[📰2024年29週 Weekly Report#8年ぶりにMarpでLT資料をつくった]] をご覧ください。
これ以降、[[Marp]]で作成したスライドは以下のページで公開するようにしました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📒Slides
</div>
<div class="link-card-v2-content">Minervaで配信しているコンテンツのうちプレゼンのスライド資料にあたるもの。実際に外部登壇したわけではない。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/hub.webp" />
<a data-href="📒Slides" class="internal-link"></a>
</div>
%%[[📒Slides]]%%
### incline.nvim => lualine.nvim
5月に[[#incline.nvim の導入]]をしましたが、同様のことを[[lualine.nvim]]でやるようにしました。 #2024/12/20 時点まではこの設定にずっと満足しています。
> [!info]
> 詳細は [[📰2024年29週 Weekly Report#lualineのwinbar表示、inclineからの脱却]] をご覧ください。
### markdown-toggle.nvim の導入
[[Obsidian]]のように単一キーで『なし』『リスト』『タスク』『タスク(完了)』のような切り替えができる[[markdown-toggle.nvim]]を導入しました。
> [!info]
> 詳細は [[📰2024年28週 Weekly Report#NeovimでMarkdownのリストをObsidianのように]] をご覧ください。
### text-case.nvim の導入
[[キャメルケース]]、[[スネークケース]]、[[パスカルケース]]、... その他にも多数のケースを一瞬で変換できる[[text-case.nvim]]を導入しました。
### conform.nvim の導入
[[none-ls.nvim]]から[[conform.nvim]]に乗り換えました。設定もシンプルになり動作も安定しています。[[Nvim LSP client]]を人に薦めるハードルがかなり下がりました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-07-20 none-ls.nvimからconform.nvimに乗り換えてみる
</div>
<div class="link-card-v2-content">none-ls.nvimを使っていたが、以下の理由からconform.nvimに興味を持ったため。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2024-07-20 none-ls.nvimからconform.nvimに乗り換えてみる" class="internal-link"></a>
</div>
%%[[📜2024-07-20 none-ls.nvimからconform.nvimに乗り換えてみる]]%%
### Screenkey.nvim の導入
[[Neovim]]に関する[[GIF]]や[[WebM]]を投稿するとき、入力キーを表示したいことがあったので[[Screenkey.nvim]]を導入しました。他の候補も試しましたが、要件にあうものでちゃんと動くものは[[Screenkey.nvim]]だけでした。
以下は実際に利用中の動画です。([[📘AutoHotkeyが織りなすNeovimの魅力]]の記事内から抜粋)
![[2024-07-16_case1.webm]]
### Comment.nvim の導入
コメントアウト用プラグイン [[Comment.nvim]]を導入しました。以前は[[nvim-comment]]を使っていたので、[[nvim-ts-context-commentstring]]も必要でしたが、[[Comment.nvim]]になってからは不要になりました。
### gitlinker.nvim の導入
[[Neovim]]で開いているコード行に対するリポジトリURLをコピーするプラグイン [[gitlinker.nvim]]を導入しました。[[GitHub]]だけでなく[[Bitbucket Cloud]]でも利用できるので、仕事でもよく使っています。
### nvim-highlight-colors
カラーコードや[[Tailwind CSS]]のクラスが示す色をプレビュー表示する [[nvim-highlight-colors]]プラグインを導入しました。このプラグインは文字色や背景色だけでなく、[[virtual text (Neovim)|virtual text]]を使った表現もできるため、テキストのシンタックスハイライト情報を破壊しない点が気に入っています。
![[Pasted image 20241221144156.png|frame]]
*末尾に●マークでカラーを表示*
![[Pasted image 20241221144458.png|frame]]
*[[nvim-cmp]]に設定すると補完時にも表示される*
### マクロ記録中を分かりやすく
[[マクロ (Vim)|マクロ]]はとても便利な機能ですが、画面のフィードバックが分かりづらく、しばしば記録状態を見誤ってしまうことがありました。そこで、[[Noice]]を使い、[[マクロ記録中はvirtual textに表示 (Noice)|マクロ記録中はvirtual textに表示]]するようにしました。
![[noice-macro.webm]]
## 8月
プライベートで使っている[[Obsidian]]は仕事には利用できないため、タスク管理のように公私を混同して管理したい場合にやりにくさを感じていました。それならば、公私共に[[Neovim]]を使えばいい。その準備をしていた1ヶ月でした。
> [!info]
> #2024/12/21 時点ではプライベートの[[PKM]]([[Minerva]])以外で[[Obsidian]]を使うことはありません。ほぼすべての作業を[[Neovim]]で行うようにしています。
### ghostwriter.nvim でプラグイン開発デビュー
同僚の[[Vimmer]]が退職するため、傷跡を残したいと思い、前からぼんやり構想していた[[Neovimプラグイン]]を開発してみることにしました。それが[[🦉ghostwriter.nvim]]です。今も公私共に利用しており、開発も継続中です。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - tadashi-aikawa/ghostwriter.nvim: A Neovim plugin to share Markdown task lists as Slack posts.
</div>
<div class="link-card-v2-content">
A Neovim plugin to share Markdown task lists as Slack posts. - tadashi-aikawa/ghostwriter.nvim
</div>
<img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/835714070/376aa551-35b7-46e6-b8b8-ba72fb208d9b" />
<a href="https://github.com/tadashi-aikawa/ghostwriter.nvim"></a>
</div>
[[🦉ghostwriter.nvim]]を使うようになってから、[[Slack]]を操作する機会は激減しました。特に会社のパソコンは重いので助かっています。
> [!info]
> 学んだことは [[📰2024年31週 Weekly Report#ghostwriter.nvimでNeovimプラグイン開発デビュー]] をご覧ください。
### neodev.nvim => lazydev.nvim
この間インストールしたばかりの[[neodev.nvim]]がメンテ中止しており、移行先として同じ作者が開発している[[lazydev.nvim]]が紹介されていたため、そちらに乗り換えました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-08-03 neodev.nvimからlazydev.nvimへ移行
</div>
<div class="link-card-v2-content">2024/07/06 にneodev.nvimのメンテが止まっており、代わりにlazydev.nvimが紹介されていたので移行する。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2024-08-03 neodev.nvimからlazydev.nvimへ移行" class="internal-link"></a>
</div>
%%[[📜2024-08-03 neodev.nvimからlazydev.nvimへ移行]]%%
### Silhouette.nvim 開発開始とDenops
[[Obsidian]]で毎日のタスク管理と時間管理に使っていた[[🦉Silhouette]]の[[Neovimプラグイン]]版、[[🦉Silhouette.nvim]]をつくりはじめました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - tadashi-aikawa/silhouette.nvim: Remake of the Obsidian plugin 'Silhouette' for Neovim.
</div>
<div class="link-card-v2-content">
Remake of the Obsidian plugin 'Silhouette' for Neovim. - tadashi-aikawa/silhouette.nvim
</div>
<img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/844008458/704744d1-a920-48ce-a659-2ea2a256b446" />
<a href="https://github.com/tadashi-aikawa/silhouette.nvim"></a>
</div>
> [!info]
> 詳細や[[Denops]]を利用することにした理由は [[📰2024年33週 Weekly Report#Silhouette.nvim の開発開始]] をご覧ください。
### obsidian.nvim の導入
仕事でも[[PKM]]っぽいことがやりたくなったので、関連する[[Neovimプラグイン]]や[[LSP]]情報を調べていたところ、[[obsidian.nvim]]を使うのがよさそうと感じて導入しました。
> [!info]
> 詳細は [[📰2024年34週 Weekly Report#obsidian.nvimの利用開始]] をご覧ください。
## 9月
### obsidian.nvim のfork開始
[[obsidian.nvim]]には許容できない挙動がいくつかありましたが、それらを設定変更で乗り越えるのは厳しそうでした。しかし、ちょうど先月から[[Neovimプラグイン]]を開発しはじめたのもあり、forkして自分好みにカスタマイズした[[obsidian.nvim]]を使っていくことにしました。
> [!info]
> 詳細は [[📰2024年36週 Weekly Report#obsidian.nvimをforkしていく決意]] をご覧ください。
### ghostwriter.nvimの記事を執筆
[[#ghostwriter.nvim でプラグイン開発デビュー]] でつくったモノの詳細を掘り下げた記事を書きました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📘Slackに進捗状況を共有できるNeovimプラグインをつくってみた
</div>
<div class="link-card-v2-content">人生で初めてつくったNeovimプラグイン、ghostwriter.nvimについて紹介させてください。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-09-18.webp" />
<a data-href="📘Slackに進捗状況を共有できるNeovimプラグインをつくってみた" class="internal-link"></a>
</div>
%%[[📘Slackに進捗状況を共有できるNeovimプラグインをつくってみた]]%%
> [!caution]
> 最新の[[🦉ghostwriter.nvim]]では、上記記事の内容とインターフェースや設定が大きく変わっています。最新情報は [GitHubのREADME](https://github.com/tadashi-aikawa/ghostwriter.nvim) をご覧ください。
## 10月
### 複雑なコミットグラフをNeovimで見るための記事執筆
[[Lazygit]]では確認しにくいような複雑な[[コミットグラフ]]に出くわす時があります。そのようなときに使う[[Neovimプラグイン]]、[[gitgraph.nvim]]を導入した記事を執筆しました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📘ターミナルで複雑なコミットグラフを確認してみたいときのgitgraph nvim
</div>
<div class="link-card-v2-content">ターミナルで複雑なコミットグラフを確認するのに適した環境を追い求めてみました結果、gitgraph.nvimにたどり着きました。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-10-14.webp" />
<a data-href="📘ターミナルで複雑なコミットグラフを確認してみたいときのgitgraph nvim" class="internal-link"></a>
</div>
%%[[📘ターミナルで複雑なコミットグラフを確認してみたいときのgitgraph nvim]]%%
### Neovimの環境を瞬時に切り替える方法を知る
[[NVIM_APPNAME]]という環境変数を設定することで、起動する[[Neovim]]の環境を切り替えられることを知りました。他の人から相談された事象を再現させたり、[[Neovim]]のはじめ方を人に教えるときに便利です。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📕Neovimの環境(設定など)を切り替える
</div>
<div class="link-card-v2-content">Neovimの設定やキャッシュなど環境を普段とは切り替える方法。具体的には `~/.config/nvim` や `~/.local/share/nvim` ではなく別ディレクトリを参照する。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/prime.webp" />
<a data-href="📕Neovimの環境(設定など)を切り替える" class="internal-link"></a>
</div>
%%[[📕Neovimの環境(設定など)を切り替える]]%%
### vustedでNeovimプラグインのテストを書く
[[vusted]]を使って、はじめて[[Neovimプラグイン]]のテストを書いてみました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-10-27 vustedでNeovimプラグインのLuaファイルをテストしてみる
</div>
<div class="link-card-v2-content">Neovimプラグインの開発が進んでくると、どうしてもユニットテストが欲しくなってくるので方法を調べた。vustedを使うのがよさそう。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2024-10-27 vustedでNeovimプラグインのLuaファイルをテストしてみる" class="internal-link"></a>
</div>
%%[[📜2024-10-27 vustedでNeovimプラグインのLuaファイルをテストしてみる]]%%
[[plenary.nvim]]など外部モジュールを`require`しているテストコードでは動かせませんでしたが、やり方はあると思うので今後必要になったら調べてみようと思っています。
### Neovimで動かすLuaファイルのホットリロード環境構築
[[Neovim]]に関する[[Lua]]コードを書いていると、[[Neovim]]上でどう動くのか確認したくなることがあります。ソースコードを変更したら自動で[[Lua]]コードを[[Neovim]]上で実行する環境をつくりました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📕LuaをインストールせずNeovimだけでターミナルのコマンドラインからluaファイルを実行
</div>
<div class="link-card-v2-content">`-l`フラグを使ってNeovim経由でLuaファイルを実行する。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/prime.webp" />
<a data-href="📕LuaをインストールせずNeovimだけでターミナルのコマンドラインからluaファイルを実行" class="internal-link"></a>
</div>
%%[[📕LuaをインストールせずNeovimだけでターミナルのコマンドラインからluaファイルを実行]]%%
### Silhouette CoreをJSRにパブリッシュ
[[Obsidian]]の[[🦉Silhouette]]と、[[Neovim]]の[[🦉Silhouette.nvim]]、コアロジックの共通部分をライブラリ化した[[🦉Silhouette Core]]を[[JSR]]にパブリッシュしました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - tadashi-aikawa/silhouette-core: Silhouetteのコアロジックを切り離したライブラリ
</div>
<div class="link-card-v2-content">
Silhouetteのコアロジックを切り離したライブラリ. Contribute to tadashi-aikawa/silhouette-core development by creating an account on ...
</div>
<img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/875557384/228a0a79-d110-4ca9-a3fd-ba58eb6513b1" />
<a href="https://github.com/tadashi-aikawa/silhouette-core"></a>
</div>
[[🦉Silhouette.nvim]]で[[Denops]]を使ったのもあり、[[🦉Silhouette Core]]は[[Deno]]で開発し、[[JSR]]でパブリッシュしています。そこそこハマりました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-10-19 JSRにパッケージを登録してみる
</div>
<div class="link-card-v2-content">JSRがDeno以外にも対応しており、以下の点で魅力を感じているので試してみたい。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2024-10-19 JSRにパッケージを登録してみる" class="internal-link"></a>
</div>
%%[[📜2024-10-19 JSRにパッケージを登録してみる]]%%
## 11月
### quicker.nvim の導入
[[クイックフィックス (Vim)|クイックフィックス]]の見た目を改善したり、[[クイックフィックス (Vim)|クイックフィックス]]の[[バッファ (Vim)|バッファ]]上で各ファイルの該当箇所を編集可能にするプラグイン、[[quicker.nvim]]を導入しました。
今までも[[cdo (Vim)|cdo]]コマンドや[[replacer.nvim]]を同様のことをやっていましたが、`| update` 込みだと若干不安なこともあり、そのまま[[バッファ (Vim)|バッファ]]で編集したいと常々思っていたところ、[[oil.nvim]]と同じ作者による[[quicker.nvim]]を見つけた...というわけです。
![[2024-12-21-21-26-42.webm|frame]]
*3か所に出現する `version`の `v` を大文字に変更する*
### Telescope live grep args の導入
[[telescope.nvim]]の[[ripgrep]]を用いた全文検索で、[[ripgrep]]コマンドの引数を渡せるようにするプラグイン、[[Telescope live grep args]]を導入しました。特定ファイルに対してのみ全文検索したい場合に便利です。
![[2024-12-21-21-36-32.webm|frame]]
*Luaファイルの中から `prettier` を検索*
[[nvim-bqf]]を利用して、[[クイックフィックスリストをファジーにフィルタリング (Vim)|クイックフィックスリストをファジーにフィルタリング]]する方法もありますが、ステップ数の観点から[[Telescope live grep args]]の方が好みです。
### toggleterm.nvim を開いたときのcwdを最適化する
[[toggleterm.nvim]]でターミナルを開くと、[[Neovim]]のカレントディレクトリで開かれると思います。ただ、実際には表示中のファイルが所属するディレクトリで開きたいケースが多々ありました。そこで、[[カレントバッファのファイルが所属するディレクトリをターミナルで開く (toggleterm)|カレントバッファのファイルが所属するディレクトリをターミナルで開く]]キーマップを新たに追加しました。
> [!hint]
> [[oil.nvimで表示中のディレクトリをターミナルで開く (toggleterm)|oil.nvimで表示中のディレクトリをターミナルで開く]]ような設定をすることで、[[oil.nvim]]が[[カレントバッファ (Vim)|カレントバッファ]]の場合でも動くようにできます。条件分岐をしているので、キーマップは[[カレントバッファ (Vim)|カレントバッファ]]が[[oil.nvim]]でない場合と同一にできます。
## 12月
### ghostwriter.nvim でSlackからのメッセージ挿入を
書き込み機能に限定していた[[🦉ghostwriter.nvim]]に、指定したchannelのメッセージ表示と、それを[[バッファ (Vim)|バッファ]]にputする機能を追加しました。[[Neovim]]でモブプロを行っているとき、[[Slack]]に貼ってもらった情報を確認したり、[[Neovim]]に差し込むのが面倒だったからです。(今思うと[[ヤンク]]にしたほうがよかったかも...)
> [!info]
> 実際のイメージは [[📰2024年48週 Weekly Report#ghostwriter.nvim で Slackメッセージ取得・挿入]] をご覧ください。
### Neovim DBee の導入
[[Neovim]]内で[[データベースクライアント]]として扱えるプラグイン、[[Neovim DBee]]を導入しました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2024-12-08 Neovim DBeeを動かすまでの記録
</div>
<div class="link-card-v2-content">NeovimでDBを扱えるSQLクライアント Neovim DBeeを試してみたが、思いのほか苦戦したので、その奮闘を記録した。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2024-12-08 Neovim DBeeを動かすまでの記録" class="internal-link"></a>
</div>
%%[[📜2024-12-08 Neovim DBeeを動かすまでの記録]]%%
[[データベースクライアント]]は[[Lazysql]]や[[DBeaver]]も使っています。[[Neovim DBee]]を使うのは、[[Lazysql]]では要件を満たさないが、[[DBeaver]]を立ち上げるまでもないような場合のみに限定しています。
[[Lazysql]]については最近記事を書きましたので、よろしければそちらもご覧ください。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📘Lazyなエンジニアに贈る SQLクライアントツール『Lazysql』
</div>
<div class="link-card-v2-content">LazygitやLazydockerは好きですか? 私は好きです。そんな方にオススメ、ターミナルでDBの中身を参照したり、データを更新できるTUIツール『Lazysql』を紹介します。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-12-08.webp" />
<a data-href="📘Lazyなエンジニアに贈る SQLクライアントツール『Lazysql』" class="internal-link"></a>
</div>
%%[[📘Lazyなエンジニアに贈る SQLクライアントツール『Lazysql』]]%%
### Neovim起動速度を4倍高速化
今まで雰囲気でやってきた[[lazy.nvim]]の各プラグインロードタイミングについて、本気で高速化に取り組みました。それまでは **70ms以上** かかっていた起動時間を **20ms切る** まで縮めることができました。プラグイン数は54個([[lazy.nvim]]含む)です。
計測に使ったのは[[lazy.nvim]]のprofile画面です。
![[Pasted image 20241222103228.png]]
[[vim-startuptime]]でも計測してみましたが、ほぼ同じ数値です。
```console
$ ./vim-startuptime -vimpath nvim | head -30
Extra options: []
Measured: 10 times
Total Average: 18.119400 msec
Total Max: 20.600000 msec
Total Min: 17.174000 msec
```
起動速度がいくら高速でも、その後の操作でつっかかりを感じるようでは意味がないので、可能な限りロードタイミングはイベントごとに分散するよう工夫しました。私の場合は **20ms以内のラグであればほぼ気にならない** ので、できるだけ20ms前後になるよう調整しています。
```
● lazy.nvim 5.31ms
● startup 2.87ms
● startuptime 18.02ms
● VeryLazy 18.53ms
● <C-j>f 7.06ms
● InsertEnter 23.26ms
● BufRead 12.77ms
● markdown 31.21ms
```
### winresizer.nvim の導入
[[ウィンドウ (Vim)|ウィンドウ]]サイズを素早く変更するモードを提供する[[Neovimプラグイン]]、[[winresizer.nvim]]を導入しました。`<C-e>`でウィンドウサイズ変更モードに切り替え、`hjkl`でサイズを変更、`<CR>`または`<ESC>`でモード終了と実にエレガントな仕様です。もっと早くインストールしたかった...。
![[2024-12-22-10-45-05.webm]]
## まとめ
今年1年、[[Neovim]]がどれだけ成長してきたかを時系列順にふりかえりました。
この記事を書く前から想像はしていましたが、実際に書いて見ると予想の数倍くらい色々なことがあったなと思います。その中でも一番のモチベーションとしては、**プライベートでも仕事でも、日常利用から開発に至るまで、様々なことを自分の好きな挙動・表示で、素早く操作できること** に尽きるなと改めて思いました。
2021年から2023年までは[[Obsidian]]に関する内容が大半でしたが、2024年は完全に[[Neovim]]に話題を持っていかれたかなと。それは偶然ではなく必然だと思っています。思い当たる節はいくつもあります。
2025年も今年のように[[Neovim]]が圧倒的成長を継続してみせるのか... はたまた他の新しいダークホースが誕生するのかは分かりません。でも、先が見えないからこそ、この道は飽きないし楽しいのだと、そう思える気がします。