# 🗞️Topics ## CodeCompanionの記事執筆 3ヶ月ぶりに[[Vim駅伝]]参加記事を書きました。[[Neovim]]でAIコーディングするために選んだ[[CodeCompanion]]をじっくり調べて、ユースケースベースで書いてみました。 <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"> 📘CodeCompanionを使ってNeovimと一緒に楽しくAI Coding </div> <div class="link-card-v2-content">NeovimでAIコーディングをするためのプラグイン、CodeCompanionの設定方法や使い方をセットアップから順番に実例を交えてご紹介します。対象となるのは 『AIコーディングをはじめなければと思いつつも、Neovim以外のエディタには移行したくない...』とお困りの開発者です。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2025-03-21.webp" /> <a data-href="📘CodeCompanionを使ってNeovimと一緒に楽しくAI Coding" class="internal-link"></a> </div> %%[[📘CodeCompanionを使ってNeovimと一緒に楽しくAI Coding]]%% 可愛らしい表紙なのに、いきなりカイジが登場して **ざわ... ざわ...** されたかもしれませんが、内容は割と真面目ですので、『[[VSCode]]... [[Cline]]... [[Cursor]]... 認めんぞ... !! ワシは...!!』という[[Vimmer]]の方は読んでいただけると嬉しいです。 ## 3つのNeovimプラグインを導入 久々に[[Neovimプラグイン]]をいくつか導入しました。以下の記事からインスプレーションを受けました。私はやはり[[AI]]よりこっちの方がワクワクしますね😊 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://static.zenn.studio/images/logo-transparent.png" /> <span class="link-card-v2-site-name">Zenn</span> </div> <div class="link-card-v2-title"> Neovimを使い始めて半年経った若輩Vimmerが愛用しているプラグインの紹介 </div> <img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--1JGC35am--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Neovim%25E3%2582%2592%25E4%25BD%25BF%25E3%2581%2584%25E5%25A7%258B%25E3%2582%2581%25E3%2581%25A6%25E5%258D%258A%25E5%25B9%25B4%25E7%25B5%258C%25E3%2581%25A3%25E3%2581%259F%25E8%258B%25A5%25E8%25BC%25A9Vimmer%25E3%2581%258C%25E6%2584%259B%25E7%2594%25A8%25E3%2581%2597%25E3%2581%25A6%25E3%2581%2584%25E3%2582%258B%25E3%2583%2597%25E3%2583%25A9%25E3%2582%25B0%25E3%2582%25A4%25E3%2583%25B3%25E3%2581%25AE%25E7%25B4%25B9%25E4%25BB%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:okmkm%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2NhN2FhMThiZDEuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" /> <a href="https://zenn.dev/okmkm321/articles/neovim_plugin"></a> </div> ### grug-far.nvim [[grug-far.nvim]]は全文検索および置換機能をもつ[[Neovimプラグイン]]です。 <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 - MagicDuck/grug-far.nvim: Find And Replace plugin for neovim </div> <div class="link-card-v2-content"> Find And Replace plugin for neovim. Contribute to MagicDuck/grug-far.nvim development by creating an account on ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/1f5d7a5da151ff32e510cfe6c9dd176dcdf439e62e692faa5bcfba3a1d2ca80c/MagicDuck/grug-far.nvim" /> <a href="https://github.com/MagicDuck/grug-far.nvim"></a> </div> ちょっと特殊なUI/IFに見えたので敬遠していましたが、これが想像以上に使いやすかったです。 ![[Pasted image 20250324081043.png]] 今までは、[[Telescope live grep args]]からの[[クイックフィックスリスト (Vim)|クイックフィックスリスト]]経由で[[quicker.nvim]]を使っていましたが、しばらく[[grug-far.nvim]]で全文検索/置換を試してみようと思いました。一番のメリットは **ファイルごとに見やすくグルーピングされて表示されること** かもしれません。 ### tiny-inline-diagnostic.nvim [[tiny-inline-diagnostic.nvim (Neovim)|tiny-inline-diagnostic.nvim]]は分かりやすい[[Diagnostic (Neovim)|Diagnostic]]を表示する[[Neovimプラグイン]]です。 <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 - rachartier/tiny-inline-diagnostic.nvim: A Neovim plugin that display prettier diagnostic messages. Display diagnostic messages where the cursor is, with icons and colors. </div> <div class="link-card-v2-content"> A Neovim plugin that display prettier diagnostic messages. Display diagnostic messages where the cursor is, with ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/20460acffdbe9525f948da000e864212bd6917740e873d5a1c3d2348338cfc56/rachartier/tiny-inline-diagnostic.nvim" /> <a href="https://github.com/rachartier/tiny-inline-diagnostic.nvim"></a> </div> 今までは[[Neovim]]デフォルトの[[LSP]]機能と[[Lspsaga]]を使っていましたが、[[tiny-inline-diagnostic.nvim (Neovim)|tiny-inline-diagnostic.nvim]]に置き換えられるところは置き換えてみました。 ![[Pasted image 20250324081627.png]] パッと見でオシャレな感じと、すべて[[virtual text (Neovim)|virtual text]]で表現するという拘りに惹かれました。[[ヤンク]]したいときなど[[フローティングウィンドウ (Neovim)|フローティングウィンドウ]]に表示したい場合は、専用のコマンドをキーマップしています。 ```lua -- 診断をフローティングウィンドウで表示する vim.keymap.set("n", "<M-w>", function() vim.diagnostic.open_float({ scope = "cursor", focusable = true, border = "rounded", }) end, opts) ``` #### 設定 ```lua return { "rachartier/tiny-inline-diagnostic.nvim", event = "LspAttach", priority = 1000, config = function() require("tiny-inline-diagnostic").setup({ options = { show_source = true, multilines = { enabled = true, always_show = true, }, }, }) vim.diagnostic.config({ -- native LSPのインライン表示を無効にする virtual_text = false, }) end, } ``` ### timber.nvim [[timber.nvim]]はprintデバッグ愛好者のための[[Neovimプラグイン]]です。 <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 - Goose97/timber.nvim: Neovim plugin to quickly insert log statements and capture log output </div> <div class="link-card-v2-content"> Neovim plugin to quickly insert log statements and capture log output - Goose97/timber.nvim </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/46c944274d24b1f7a3adb41f0dbfcca4325004ac82b66e9d8797079b1a160d0b/Goose97/timber.nvim" /> <a href="https://github.com/Goose97/timber.nvim"></a> </div> 同様のプラグインはいくつかありましたので、3つのプラグインから検討した結果となります。 <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"> 📜2025-03-23 Neovimでprintdebugの捗る仕組みを探す </div> <div class="link-card-v2-content">普段、よほどのことがなければデバッガは使わずに、printデバッグすることが多い。Neovimだと同様の需要は他のエディタ以上にありそうなので、効率化できないかを確かめてみる。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2025-03-23 Neovimでprintdebugの捗る仕組みを探す" class="internal-link"></a> </div> %%[[📜2025-03-23 Neovimでprintdebugの捗る仕組みを探す]]%% 今までprintデバッグの編集は[[LuaSnip]]と[[cmp_luasnip]]のスニペットを使っていましたが、[[nvim-treesitter]]と連携している分、専用プラグインの方が圧倒的に速いということを痛感しました。 #### 設定 ```lua return { "Goose97/timber.nvim", event = "LspAttach", keys = { { "gld", function() require("timber.actions").clear_log_statements({ global = false }) end, }, { "glt", function() require("timber.actions").search_log_statements() end, }, }, opts = { log_templates = { default = { javascript = [[console.log("%log_marker L%line_number %log_target", %log_target)]], typescript = [[console.log("%log_marker L%line_number %log_target", %log_target)]], lua = [[print("%log_marker L%line_number %log_target " .. %log_target)]], go = [[log.Printf("%log_marker L%line_number %log_target: %v\n", %log_target)]], rust = [[println!("%log_marker L%line_number %log_target: {:#?}", %log_target);]], python = [[print(f"%log_marker L%line_number {%log_target=}")]], }, }, batch_log_templates = { default = { javascript = [[console.log("%log_marker L%line_number", { %repeat<"%log_target": %log_target><, > })]], typescript = [[console.log("%log_marker L%line_number", { %repeat<"%log_target": %log_target><, > })]], lua = [[print(string.format("%log_marker L%line_number %repeat<%log_target=%s><, >", %repeat<%log_target><, >))]], go = [[log.Printf("%log_marker L%line_number %repeat<%log_target: %v><, >\n", %repeat<%log_target><, >)]], rust = [[println!("%log_marker L%line_number %repeat<%log_target: {:#?}><, >", %repeat<%log_target><, >);]], python = [[print(f"%log_marker L%line_number %repeat<{%log_target=}><, >")]], }, }, }, } ``` ## obsidian.nvimで補完位置がおかしくなる問題修正 仕事では[[obsidian.nvim]](をforkしたもの)を使って[[PKM]]をしています。以前から、日本語の[[wikiリンク]]を挿入するとき、括弧の挿入が崩れる事象を観測していたので、この機会に修正してみました。 <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"> 📜2025-03-23 obsidian.nvimで特定の条件下で補完を決定すると入力文字が残って挿入されてしまう不具合の解消 </div> <div class="link-card-v2-content">Claude 3.7 Sonnetが言うには `can_complete` の中でマルチバイト文字が考慮されていないため、insert位置が不正になっているのが問題ではないかとのこと。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2025-03-23 obsidian.nvimで特定の条件下で補完を決定すると入力文字が残って挿入されてしまう不具合の解消" class="internal-link"></a> </div> %%[[📜2025-03-23 obsidian.nvimで特定の条件下で補完を決定すると入力文字が残って挿入されてしまう不具合の解消]]%% [[Claude 3.7 Sonnet]]に事象を報告したら『完全に理解した』とそれっぽいコードを出してきたので、『これはすぐに終わるかなーすごいなー』とか思ってましたが、そんなことはありませんでした...。結局、自分でちゃんと確認・コーディングして修正しました。AIとやりとりしている時間の方が恐らく長かった気がします😇 [[Lua]]([[Neovimプラグイン]]の開発)はあまり詳しくないので、[[AI]]からの情報はヒントや突破口にはなるものの、完全に身を委ねるのはやはり危険... 疑心暗鬼になるくらいで割とちょうどいいバランスだなと改めて思いました。(疑いすぎもよくないですけど...) # 👀Reading ## Gitの中身 <div class="link-card-v2"> <div class="link-card-v2-site"> <span class="link-card-v2-site-name">kaityo256.github.io</span> </div> <div class="link-card-v2-title"> Gitの中身 </div> <a href="https://kaityo256.github.io/github/internals/index.html"></a> </div> ~~~ めちゃくちゃ分かりやすいし面白い。 ~~~ ## Vimmer にお勧めしたい AI エージェント「Aider」 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://static.zenn.studio/images/logo-transparent.png" /> <span class="link-card-v2-site-name">Zenn</span> </div> <div class="link-card-v2-title"> Vimmer にお勧めしたい AI エージェント「Aider」 </div> <img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--QVcg3V-m--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Vimmer%2520%25E3%2581%25AB%25E3%2581%258A%25E5%258B%25A7%25E3%2582%2581%25E3%2581%2597%25E3%2581%259F%25E3%2581%2584%2520AI%2520%25E3%2582%25A8%25E3%2583%25BC%25E3%2582%25B8%25E3%2582%25A7%25E3%2583%25B3%25E3%2583%2588%25E3%2580%258CAider%25E3%2580%258D%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E4%25BA%2594%25E6%2589%2580%2520%25E5%2592%258C%25E5%2593%2589%2520%25EF%25BC%2588MonCargo%2520CTO%25EF%25BC%2589%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2dPdDhnaDhYVEJ3VjFmU0FGTG5kMU9WTExTaGc4dUpiaml3Y2FILWFZPXM5Ni1j%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" /> <a href="https://zenn.dev/acro5piano/articles/1d900a93c608e1"></a> </div> ~~~ Aiderは使ったことなかった。CodeCompanionでも生きていけそうにはなったけど、試しておきたい。 ~~~ ## NeovimをさらにLuaLuaさせた - 点と接線。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://riq0h.jp/favicon-32x32.png" /> <span class="link-card-v2-site-name">点と接線。</span> </div> <div class="link-card-v2-title"> NeovimをさらにLuaLuaさせた - 点と接線。 </div> <div class="link-card-v2-content"> あれから一年近い月日が経った。ひとたび完結を見た僕のinit.luaはその後も進化し続け、ずいぶんIDE的な出で立ちに変貌を遂げた。当初のサブ武器としての位置付けはどこへやら、今ではすっかり長剣の顔をして鞘に収まっている。電 ... </div> <img class="link-card-v2-image" src="https://riq0h.jp/siteicon.png" /> <a href="https://riq0h.jp/2023/12/03/103850/"></a> </div> ~~~ dapはまだ未履修。周りのつよつよVimmerも皆使ってなさそうだったから、debugprint.nvimを使いこなしていきたい。 ~~~ ## Neovimを使い始めて半年経った若輩Vimmerが愛用しているプラグインの紹介 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://static.zenn.studio/images/logo-transparent.png" /> <span class="link-card-v2-site-name">Zenn</span> </div> <div class="link-card-v2-title"> Neovimを使い始めて半年経った若輩Vimmerが愛用しているプラグインの紹介 </div> <img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--1JGC35am--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Neovim%25E3%2582%2592%25E4%25BD%25BF%25E3%2581%2584%25E5%25A7%258B%25E3%2582%2581%25E3%2581%25A6%25E5%258D%258A%25E5%25B9%25B4%25E7%25B5%258C%25E3%2581%25A3%25E3%2581%259F%25E8%258B%25A5%25E8%25BC%25A9Vimmer%25E3%2581%258C%25E6%2584%259B%25E7%2594%25A8%25E3%2581%2597%25E3%2581%25A6%25E3%2581%2584%25E3%2582%258B%25E3%2583%2597%25E3%2583%25A9%25E3%2582%25B0%25E3%2582%25A4%25E3%2583%25B3%25E3%2581%25AE%25E7%25B4%25B9%25E4%25BB%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:okmkm%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2NhN2FhMThiZDEuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" /> <a href="https://zenn.dev/okmkm321/articles/neovim_plugin"></a> </div> ~~~ いくつか気になるプラグインあったので試してみる。AIよりやっぱこっちのが面白い。 ~~~ ## GitHub - MagicDuck/grug-far.nvim: Find And Replace plugin for neovim <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 - MagicDuck/grug-far.nvim: Find And Replace plugin for neovim </div> <div class="link-card-v2-content"> Find And Replace plugin for neovim. Contribute to MagicDuck/grug-far.nvim development by creating an account on ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/1f5d7a5da151ff32e510cfe6c9dd176dcdf439e62e692faa5bcfba3a1d2ca80c/MagicDuck/grug-far.nvim" /> <a href="https://github.com/MagicDuck/grug-far.nvim?tab=readme-ov-file"></a> </div> ~~~ めちゃくちゃ実用的で使いやすい😊 毎度のことながら、新しい高機能ツールが入るとキーバインドに悩む。。。 ~~~ ## OSS活動してたらRuffの会社で働くことになった話 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://static.zenn.studio/images/logo-transparent.png" /> <span class="link-card-v2-site-name">Zenn</span> </div> <div class="link-card-v2-title"> OSS活動してたらRuffの会社で働くことになった話 </div> <img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--mmKBolZD--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:OSS%25E6%25B4%25BB%25E5%258B%2595%25E3%2581%2597%25E3%2581%25A6%25E3%2581%259F%25E3%2582%2589Ruff%25E3%2581%25AE%25E4%25BC%259A%25E7%25A4%25BE%25E3%2581%25A7%25E5%2583%258D%25E3%2581%258F%25E3%2581%2593%25E3%2581%25A8%25E3%2581%25AB%25E3%2581%25AA%25E3%2581%25A3%25E3%2581%259F%25E8%25A9%25B1%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:shiba%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2g0WVFyaVliOXdBdEtlTUJXZjd1REJ5d2Q3UnJCYW5TSmlQYkRGPXM5Ni1j%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" /> <a href="https://zenn.dev/mtshiba/articles/how-i-joined-astral"></a> </div> ~~~ 凄いし面白かった。2021年と比べると今はAIもあるし、英語の壁は薄くなってそう。 ~~~ # 📚New Notes - [[Ctrl+スラッシュにキーバインド (Neovim)]] - [[Diagnostic (Neovim)]] - [[MCP]] - [[MCPサーバー]] - [[WinEnter (Neovim)]] - [[debugprint.nvim]] - [[diagnosticの結果をフローティングウィンドウで表示 (Neovim)]] - [[grug-far.nvim]] - [[grug-far.nvimを使ってoil.nvimで表示中のディレクトリ配下を全文検索]] - [[mkdocs-macros-plugin]] - [[nvim-chainsaw]] - [[timber.nvim]] - [[tiny-inline-diagnostic.nvim (Neovim)]] - [[あるファイルの差分をNeovimのdiffモードで表示 (Lazygit)]] - [[アクションパレット (CodeCompanion)]] - [[イテレータ (Rust)]] - [[インラインアシスタント (CodeCompanion)]] - [[チャットバッファのキーマップを変更 (CodeCompanion)]] - [[ツール (CodeCompanion)]] - [[プロンプト (CodeCompanion)]] - [[プロンプトライブラリ (CodeCompanion)]] - [[ワークスペース (CodeCompanion)]] - [[ワークフロー (CodeCompanion)]] - [[変数 (CodeCompanion)]] - [[投稿の境目に区切り線を表示 (CodeCompanion)]] - [[自動スクロールを無効 (CodeCompanion)]] - [[自動ツールモード (CodeCompanion)]] - [[📜2025-03-23 Neovimでprintdebugの捗る仕組みを探す]] - [[📜2025-03-23 mkdocs-macros-pluginを使ってMkDocsでObsidianのDataviewっぽいことをやってみた]] - [[📜2025-03-23 obsidian.nvimで特定の条件下で補完を決定すると入力文字が残って挿入されてしまう不具合の解消]] - [[📝CodeCompanionのプロンプト作成設定でアダプターを指定しても反映されない]] - [[📝NeovimでCtrl+スラッシュにキーバインドできない]] - [[📝ReplaceWithRegisterでLineやVisualに設定されるgrやgrrのキーバインドが削除できない]] - [[📰2025年11週 Weekly Report]] - [[📘CodeCompanionを使ってNeovimと一緒に楽しくAI Coding]]