[[📒Articles]] > [[📒2025 Articles]] ![[2025-06-02.webp|cover-picture]] [[Neovim]]ず[[VSCode]]の二刀流で楜しく快適に開発できるように、[[VSCode]]を[[Neovim]]色にコヌディネヌトしおみたした。 ## なぜNeovimを䜿わないのか こういう蚘事を曞くず ``` 『VSCodeをNeovimっぜくするなんおずんでもない Neovimず違うずころがVSCodeの良さなのに。それなら、なんでVSCode䜿おうず思ったんですか Neovim䜿っおればいいじゃないですか』 ``` ずいう声が盎ちに聞こえおきそうです。私も぀い1ヶ月前たでは同じ颚に思っおいたした。実際のずころ、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"> 📘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]]%% この蚘事の前半を読んでいただくず分かる通り、この頃から既に『はたしおこのたた[[Neovim]]を䜿っおいおいいのだろうか...』ずいう葛藀はありたした。 ### 倧きなきっかけはMacBook Proぞの移行 [[Windows]]を䜿っおいた頃は、開発を[[WSL]]で行っおいたため、[[VSCode]]を䜿う堎合は必然的に[[Remote Development]]の[[VSCode Extension]]を䜿う必芁がありたした。リモヌトの割に快適ではあったものの、やりたいこずを考えるずやや倧げさな構成です。構成の耇雑さやパフォヌマンスの䜎䞋ずいったデメリットもありたした。 しかし、GW前に33幎を共にした[[Windows]]から[[macOS]] ([[MacBook Pro M4 Pro]]) ぞ移行をしたした。 <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"> 📘さよならWindows。33幎の日々よ </div> <div class="link-card-v2-content">33幎間䜿い続けたWindowsからmacOSぞ移行した理由や経緯、実際の移行手順やおすすめツヌル、キヌボヌドカスタマむズ、タヌミナル、画像・動画圧瞮、゚ディタ環境の違いなどを詳しく解説しおいたす。WindowsずMacの違いや移行のコツを知りたい方はぜひご芧ください。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2025-05-15.webp" /> <a data-href="📘さよならWindows。33幎の日々よ" class="internal-link"></a> </div> %%[[📘さよならWindows。33幎の日々よ]]%% 移行した圓時は気にしたせんでしたが、しばらくしお気が぀いたのです。**[[macOS]]なら[[WSL]]や[[Remote Development]]を䜿わなくおも、[[VSCode]]で快適に開発できるずいうこずに。** ### 䌚瀟・チヌムずしおの暙準゚ディタ 先の蚘事でも曞かれおいるように、職堎では [[VSCode]] x [[GitHub Copilot]] を掚奚環境ずしたAIコヌディングぞの適応が始たっおいたした。たしおや私はそれを䞻導する偎の人間です。 ``` 『VSCode? 分かりたせん。Neovimだったら任せおください( 』 ``` ずか蚀っおいられる立堎でもないず思いたした。 ### そしおカスタマむズに本気を出し始めた これらの郜合から[[VSCode]]を本気で䜿い始めたした。しかし、デフォルトの状態では正盎苊痛です。私の身䜓を[[Neovim]]にフィットしおしたっおおり、いたさら玠の[[VSCode]]を受け入れられないのです。 そんなずき、以䞋の蚘事を偶然芋かけたした。 <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"> うわっ 私の゚ディタ、ダサすぎ ナりなダングにバカりケするCursor・VSCodeのむケむケ蚭定 </div> <img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--dEVILKQ0--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2581%2586%25E3%2582%258F%25E3%2581%25A3%25E2%2580%25A6%25E7%25A7%2581%25E3%2581%25AE%25E3%2582%25A8%25E3%2583%2587%25E3%2582%25A3%25E3%2582%25BF%25E3%2580%2581%25E3%2583%2580%25E3%2582%25B5%25E3%2581%2599%25E3%2581%258E%25E2%2580%25A6%25EF%25BC%259F%25E3%2583%258A%25E3%2582%25A6%25E3%2581%25AA%25E3%2583%25A4%25E3%2583%25B3%25E3%2582%25B0%25E3%2581%25AB%25E3%2583%2590%25E3%2582%25AB%25E3%2582%25A6%25E3%2582%25B1%25E3%2581%2599%25E3%2582%258BCursor%25E3%2583%25BBVSCode%25E3%2581%25AE%25E3%2582%25A4%25E3%2582%25B1%25E3%2582%25A4%25E3%2582%25B1%25E8%25A8%25AD%25E5%25AE%259A%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:aose%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2pSV1VrTEpMZE1Ra1hjVExDNjdGNW9vWDEzTVpVdlkwYzhCSWJaPXM5Ni1j%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" /> <a href="https://zenn.dev/aose/articles/6188f61a6a2a25"></a> </div> **そうか [[VSCode]]を[[Neovim]]色に染めおしたえばいいんだ** 悪魔の囁きに耳を傟け、[[VSCode]]を[[Neovim]]色にコヌディネヌトする䜜業を始めたした。 ## 前提 ### 察象読者 | 察象 | オススメ床 | | -------------------------------------- | ----- | | [[Neovim]]利甚者であり、[[VSCode]]も仕方なく䜿っおいる方 | ⭐⭐⭐ | | [[VSCode]]のUIをシンプルにしたい方 | ⭐⭐ | | [[VSCode]]の環境を匷化したい方 | ⭐ | ### 環境 PCは[[MacBook Pro M4 Pro]]を䜿っおいたす。たた、[[OS]]やツヌルのバヌゞョンは以䞋の通りです。 | 察象 | バヌゞョン | | ---------- | ------- | | [[macOS]] | 15.4.1 | | [[VSCode]] | 1.100.2 | ### 進行 本蚘事は[[Neovimちゃん]]ず[[VSCodeちゃん]]の察話圢匏をメむンに進行しおいきたす。 ## 邂逅 > [!right-bubble] ![[neovim-chan-face1.webp]] > > こんにちは > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > はじめたしお、[[Neovimちゃん]]。本日はよろしくお願いしたすね。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > [[VSCodeちゃん]]ずお話するのは初めおだね 実はわたしたちっお生たれた月が同じなんだよね。さっき始めお知ったんだけど... > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > あ、本圓だ...。りチは2015幎11月18日に `v0.10.1` ずしお誕生したのだけど、[[Neovimちゃん]]も同じ 2015幎11月に `v0.1.0` ずしお誕生しおいるんですね。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。もう双子の姉効みたいなものだよね わたしのこずは気軜にネオちゃんっお呌んでね わたしも[[VSCodeちゃん]]のこずをコヌちゃんっお呌ぶから > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > わかりたした。よろしくお願いしたすね。 > (距離をグむグむ詰めおくる子なんだなぁ...) ## Neovimっぜい芋た目にする ### 䞍芁なコンポヌネントを非衚瀺にする > [!right-bubble] ![[neovim-chan-face1.webp]] > > じゃあ早速、芋た目の郚分から、わたし色にコヌディネヌトしちゃうね コヌちゃんの芋た目は結構賑やかだよねぇ...。 ![[20250601_16_56_00.webp|frame]] *VSCodeの暙準UI* > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > そうかなあ...。これでもかなりシンプルだず思っおるんですけど...。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。コヌちゃんは色々なナヌザヌず接しおいるから、䞇人に䜿いやすい芋た目にしおいるんだよね。䞀方、わたしは **キヌボヌド至䞊䞻矩で... 芋た目を自分でカスタマむズしたい掟** だから必芁な情報しか出したくないんだ。 ![[20250601_17_05_43.webp|frame]] *Neovimのカスタマむズされた画面* > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > 本圓だ...。゚ディタの情報量はあたり倉わらないけど、[[アクティビィティバヌ]]や[[カスタムタむトルバヌ]]、ミニマップなどが無いんですね。 > (それより、[[Neovim]]っおここたで情報を衚瀺できるものなんだ...。) > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。普段䜿わないモノは必芁ないし、たたにしか䜿わないものは垞時衚瀺させおおく必芁もないからね。じゃあ、コヌちゃんの呚蟺コンポヌネントを非衚瀺にしちゃうね ```json // settings.json に远加 { // 耇数むンスタンスをマヌゞしお1りィンドりで衚瀺 "window.nativeTabs": true, // 䞀番䞊のカスタムタむトルバヌを非衚瀺にする "window.customTitleBarVisibility": "never", // 巊サむドのアクティビティバヌを非展開時は非衚瀺 "workbench.activityBar.location": "top", // フォント蚭定 (おたけ) "editor.fontFamily": "CaskaydiaCove Nerd Font", "editor.fontSize": 16, } ``` ![[20250601_17_21_22.webp|frame]] *カスタムタむトルバヌずプラむマリヌサむドバヌを消しおスッキリしたVSCode* > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > おぉ...。䞀気にネオちゃんぜくなりたしたね。ただ、これだず[[コマンドパレット (VSCode)|コマンドパレット]]や[[プラむマリヌサむドバヌ]]からメニュヌを衚瀺できなくなっおしたわないのでしょうか...。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。それはショヌトカットキヌで起動できるようにしおおけば倧䞈倫だよ。[[プラむマリヌサむドバヌ]]を展開すれば、その䞭に[[アクティビィティバヌ]]も衚瀺されるんだ。参考ずしお、わたしの蚭定を曞いおおくね ```json // keybindings.json { // プラむマリヌサむドバヌの衚瀺切り替え { "key": "cmd+i", "command": "workbench.action.toggleSidebarVisibility" }, // コマンドパレット { "key": "cmd+escape", "command": "workbench.action.showCommands" }, } ``` ![[20250601_17_30_09.webp|frame]] > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど... 勉匷になりたす。 > (やはりマりスを䜿っおはいけないのですね...。) ### ゚ディタの衚瀺を最小限にする > [!right-bubble] ![[neovim-chan-face1.webp]] > > じゃあ、次ぱディタの䞭をスッキリしちゃおうか。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > よろしくお願いしたす。ただ、シンタックスハむラむトだけは消さないでくださいね。1色だず流石にコヌドを読みづらいので...。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > あはは... 流石にそこたではしないよ。コヌディングの劚げになるノむズを非衚瀺にしたいだけなんだから。流石にわたしも1色のコヌドは読みたくないよ。 ```json // settings.json に远加 { // むンデントガむドを非衚瀺にする "editor.guides.indentation": false, // ミニマップは非衚瀺 "editor.minimap.enabled": false, // カッコの色をペアごずに倉えない (すべお同じ色にする) "editor.bracketPairColorization.enabled": false, // カヌ゜ルは点滅させない "editor.cursorBlinking": "solid", // カヌ゜ル行はgutterだけハむラむト "editor.renderLineHighlight": "gutter", } ``` ![[20250601_18_00_29.webp|frame]] *゚ディタの衚瀺を最小限にしたVSCode* > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > かなりサッパリしたしたね。ただ、むンデントガむドを非衚瀺にしたり、カッコの色を統䞀したりしおしたうずコヌドが読みにくくなったりしたせんか... > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。たしかに**むンデントやカッコのネストが深いコヌドは読みにくくなっおしたう**よね。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > そうですよね。それなら衚瀺したたたの方がいいのではないでしょうか > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。普通はコヌちゃんの意芋に賛成だず思うよ。ただ、わたしは**その皋床で読みにくくなるようなコヌドをできるだけ枛らしたい**ず思っおいるんだ。むンデントやカッコのネストを衚瀺しおいないのは、**自分自身ぞの戒めみたいなもの**なんだよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > そ... そうなんですね。勉匷になりたす。 > (ずは蚀っおも... 実際に読むこずになるコヌドを曞いおいる人にネオちゃんみたいな人はほずんどいないよね...。あずでコッ゜リ蚭定を戻しおおこう...。) ### テヌマずアむコンの倉曎 > [!right-bubble] ![[neovim-chan-face1.webp]] > > 芋た目の最埌は『テヌマ』ず『アむコン』を倉曎するよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > テヌマやアむコンにもこだわりポむントがあるのでしょうか > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。こればかりは各人の奜みかな。自分にずっお、**必芁な情報を認知するたでのスピヌドが速く、集䞭できおモチベヌションが䞊がるもの**を遞ぶものが倧事だず思うよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど...。理論ず感情の䞡方に䜜甚するテヌマを遞んだほうがいいずいうこずですね。 > (よかった... 今回はたずもだ。) > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。だから本圓はコヌちゃんの奜きなテヌマずアむコンを遞んでもらいたいんだけど、今は時間もないから、わたしが普段䜿っおいるテヌマに䌌せた感じでコヌディネヌトするね ```json // settings.json { // テヌマ "workbench.colorTheme": "Ayu Mirage Zed", "workbench.colorCustomizations": { // ラむン番号ずgutterの色倉曎 "editorLineNumber.foreground": "#888888", "editorLineNumber.activeForeground": "#EFEF33", // 遞択範囲の色倉曎 "editor.selectionBackground": "#565612", // オヌトコンプリヌトの色倉曎 "editorSuggestWidget.selectedForeground": "#CDCDCD", "editorSuggestWidget.selectedBackground": "#363C58" }, // アむコン "workbench.iconTheme": "catppuccin-mocha", } ``` > [!right-bubble] ![[neovim-chan-face1.webp]] > > ここで蚭定したテヌマずアむコンは[[Chrome Extension]]が必芁だよ。[[Ayu Mirage Zed]]ず[[Catppuccin Icons for VSCode]]をむンストヌルしおおいおね。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://marketplace.visualstudio.com/favicon.ico" /> <span class="link-card-v2-site-name">marketplace.visualstudio.com</span> </div> <div class="link-card-v2-title"> Ayu Mirage Zed - Visual Studio Marketplace </div> <div class="link-card-v2-content"> Extension for Visual Studio Code - A remake of Zed's Ayu mirage theme for VSCode. </div> <img class="link-card-v2-image" src="https://enhancedjax.gallerycdn.vsassets.io/extensions/enhancedjax/vscode-ayu-zed/1.0.2/1722093690903/Microsoft.VisualStudio.Services.Icons.Default" /> <a href="https://marketplace.visualstudio.com/items?itemName=enhancedjax.vscode-ayu-zed"></a> </div> <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://marketplace.visualstudio.com/favicon.ico" /> <span class="link-card-v2-site-name">marketplace.visualstudio.com</span> </div> <div class="link-card-v2-title"> Catppuccin Icons for VSCode - Visual Studio Marketplace </div> <div class="link-card-v2-content"> Extension for Visual Studio Code - 🊊 Soothing pastel icon theme for VSCode </div> <img class="link-card-v2-image" src="https://catppuccin.gallerycdn.vsassets.io/extensions/catppuccin/catppuccin-vsc-icons/1.21.0/1746234508629/Microsoft.VisualStudio.Services.Icons.Default" /> <a href="https://marketplace.visualstudio.com/items?itemName=Catppuccin.catppuccin-vsc-icons"></a> </div> > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > [[Catppuccin Icons for VSCode]]っお可愛らしいテヌマですね。ネオちゃんにしおは意倖なチョむスだなず思いたした。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。実はわたしが䜿っおいるアむコンずは䌌おいないんだよね。それでもコヌちゃんにはコッチの方がいいなず思ったんだ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > では実際の画面を確認しおみたすね。 ![[20250601_18_28_20.webp|frame]] *テヌマずアむコンを適応したVSCode* > [!right-bubble] ![[neovim-chan-face1.webp]] > > これで芋た目の倉曎は䞀通り終わったから、[[Neovim]]の画面ず䞊べおみよう ![[20250601_17_05_43.webp|frame]] *VSCode* ![[20250601_18_28_20.webp|frame]] *Neovim* > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > 遠目にはどちらがどちらか䞀目で分からないですね...。普通に逆ず蚀われおも信じおしたいそう... あれ... > [!right-bubble] ![[neovim-chan-face1.webp]] > > おっ 気が぀いたかな > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > 画像の泚釈が逆ですね。䞊の画像が[[Neovim]]で、䞋の画像が[[VSCode]]ですよね > [!right-bubble] ![[neovim-chan-face1.webp]] > > さっすがコヌちゃん ほずんどの人は気づかずにスルヌしおしたうのによく気が぀いたね > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > はい。りチ、こういう確認ずかは埗意なんです。 > (この感じだず、わざずやったんですね... 油断できないなぁ...) ## Neovimの血を泚ぐ > [!right-bubble] ![[neovim-chan-face1.webp]] > > さお、ここからはコヌちゃんにわたしの血を泚いでいくよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > え... 血ですか... > (そんな物隒なこずを...) > [!right-bubble] ![[neovim-chan-face1.webp]] > > ごめんごめん。蚀い方が悪かったね。正確に蚀うず、**[[VSCode]]の゚ディタに関するコントロヌルを[[Neovim]]に任せる**っおこずなんだよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > >  > [[VSCode]]を䜿うのに[[Neovim]]が出おくるんですか > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。初めおの人に話すずい぀もビックリされるんだけど、**[NeovimはRPC APIを通しおUIの実装を別のクラむアントに任せるこずができる](https://neovim.io/doc/user/ui.html)**んだよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > え > [!right-bubble] ![[neovim-chan-face1.webp]] > > ぀たり、ナヌザヌが[[VSCode]]に察しお操䜜をしたら、RPC APIを通しおそれを[[Neovim]]に䌝え、[[Neovim]]が内容を線集するこずで、あたかも**[[VSCode]]の゚ディタを[[Neovim]]ずしお䜿っおいるかのような䜓隓**を䞎えられるんだよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > [[Neovim]]にそんな機胜があったんですね...。しかも、[[VSCode]]でその連携ができたなんお... 自分ごずなのにりチ、なにも知らなかったです...。 > (぀たり... ==[[Neovim]]に興味ない方は本章を飛ばしおもよさそうですね。==) ### [[VSCode Neovim]]のむンストヌル > [!right-bubble] ![[neovim-chan-face1.webp]] > > この機胜を䜿うには、RPC APIを通した連携ができるように[[VSCode Neovim]]をむンストヌルする必芁があるよ。䌌た名前のもので[[VSCodeVim]]ずいうのもあるから間違えないように気を぀けおね。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://marketplace.visualstudio.com/favicon.ico" /> <span class="link-card-v2-site-name">marketplace.visualstudio.com</span> </div> <div class="link-card-v2-title"> VSCode Neovim - Visual Studio Marketplace </div> <div class="link-card-v2-content"> Extension for Visual Studio Code - Vim mode for VSCode, powered by Neovim </div> <img class="link-card-v2-image" src="https://asvetliakov.gallerycdn.vsassets.io/extensions/asvetliakov/vscode-neovim/1.18.22/1747928565527/Microsoft.VisualStudio.Services.Icons.Default" /> <a href="https://marketplace.visualstudio.com/items?itemName=asvetliakov.vscode-neovim"></a> </div> > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > [[VSCodeVim]]は[[Neovim]]をバック゚ンドずしお利甚するのではなく、あくたで[[Vim]]っぜい動きを提䟛する[[VSCode Extension]]なんですね。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。だから、**[[Neovim]]は䜿っおないけど、[[VSCode]]でも[[Vim]]のキヌバむンドや、有名な[[Vimプラグむン]]のような機胜がほしい**ずいう人にはオススメなんだよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど...。りチのずころにも『[[Vim]]のあの機胜ないんですか』っお質問が時々くるので、次に質問されたずきは盞手の状況にあわせお玹介しおみたすね。 ### VSCodeの蚭定 > [!right-bubble] ![[neovim-chan-face1.webp]] > > [[VSCode]]の蚭定ファむルに曞く[[VSCode Neovim]]の蚭定は1぀だけだよ。 ```json // settings.json { "extensions.experimental.affinity": { "asvetliakov.vscode-neovim": 1 }, } ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > この蚭定はたしか... [[VSCode Extension]]を[[ワヌクスペヌス (VSCode)|ワヌクスペヌス]]管理ずは別プロセスずしお動かす蚭定ですね。詊隓的機胜なのでドキュメントにも蚘茉が少ないのにご存知ずは流石です。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。[[Vimmer]]ずしおパフォヌマンスぞの意識は倧事だからね `Open Process Explorer` コマンドでProcess Explorerを開くず、ちゃんず別プロセスで動いおいるこずも確認できるよ。 ![[20250601_20_59_16.webp|frame]] *Process Explorerの衚瀺* ### Neovimの蚭定 > [!right-bubble] ![[neovim-chan-face1.webp]] > > ここからは[[Neovim]]の蚭定を調敎しおいくよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > [[VSCode Neovim]]のバック゚ンドは[[Neovim]]... ずいうこずだったので、**[[Neovim]]の蚭定がすべおそのたた䜿える**のでしょうか > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。そう思うよね。でも、思い出しおみお。バック゚ンドは[[Neovim]]なんだけど、**UIの郚分は[[VSCode]]**なんだよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > あ... そうでしたね...。ずいうこずは、[[Neovim]]の蚭定から、**UIに関する郚分を陀倖**しなければいけないずいうこずですね。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。UIに関する蚭定や[[Neovimプラグむン]]、[[LSP]]など[[VSCode]]に任せる機胜ぱラヌが出ないように陀倖しなければいけないんだよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > うぅ... 難しそうですね...。 #### LSPを無効化する > [!right-bubble] ![[neovim-chan-face1.webp]] > > [[LSP]]は[[VSCode]]で甚意されおいるものを䜿えばいいから、[[Neovim]]の[[LSP]]蚭定は無効化しちゃおう。 ```lua -- lua/lsp.lua -- ★VSCode Neovimによる蚭定読み蟌みではない堎合のみ、LSPを有効にする if not vim.g.vscode then vim.lsp.enable({ "bashls", "biome", -- äž­ç•¥ "vue_ls", "yamlls", }) end ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > この蚭定を入れなくおも[[VSCode]]の機胜は䜿えそうですね。ただ、ファむルを開いたタむミングで[[Neovim]]の[[LSPクラむアント]]が起動しおしたい、そこから別の[[Language Server]]も機胜しおしたう... ずいうこずですよね > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。䜿わない[[LSPクラむアント]]や[[Language Server]]が無駄に動いちゃっおパフォヌマンスが萜ちちゃうんだよ。 ### lazy.nvimで䞍芁なプラグむンを無効化する > [!right-bubble] ![[neovim-chan-face1.webp]] > > [[Neovim]]のプラグむンマネヌゞャヌは䜕を䜿っおいるかな わたしは[[lazy.nvim]]を䜿っおいるから、ここでは[[lazy.nvim]]でプラグむンの有効/無効を切り替える方法を玹介するよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > うぅ... 党然分からないので、ネオちゃんにおたかせしたす...。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。任せおよ たずは[[lazy.nvim]]の`setup`関数に `defaults.cond` を指定しおみよう ```lua -- lua/plugin.lua require("lazy").setup({ spec = { { import = "plugins" }, }, diff = { cmd = "terminal_git" }, change_detection = { notify = false, }, defaults = { -- ★これを远加 cond = function() -- VSCode Neovimからの起動でない堎合のみ true を返す return not vim.g.vscode end, }, }) ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど...。`defaults.cond` に指定した関数が `true` を返す堎合のみ、[[lazy.nvim]]が[[Neovimプラグむン]]を有効化するずいうこずですか > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。[[lazy.nvim]]のドキュメントでも、[condを指定するのはVSCodeなどから起動するずきにデフォルトでプラグむンを無効化するため](https://lazy.folke.io/configuration)っお曞いおあるよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > あれ... でもそれだず、[[VSCode Neovim]]から起動したずきは[[Neovimプラグむン]]を䜿えないずいうこずになっちゃいたせんか > [!right-bubble] ![[neovim-chan-face1.webp]] > > 倧䞈倫だよ [[VSCode Neovim]]で䜿いたい[[Neovimプラグむン]]の個別蚭定で `cond = true` を指定しおあげればいいんだよ ```lua -- lua/plugins/lasterisk.lua return { "rapan931/lasterisk.nvim", -- ★これを远加するず VSCode Neovim からの起動でも有効になる cond = true, } ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど...。 うたく出来おいたすね。でも、慣れるたでは**どのプラグむンを[[VSCode Neovim]]で有効にするかの刀断が難しそう**ですね。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。慣れないず難しいず思うよ。[[📕䜿ったこずのあるNeovimプラグむン䞀芧]] や [[📕䜿ったこずのあるVimプラグむン䞀芧]] に [[VSCode Neovim]]で有効にしおいるかどうかも茉せおあるから、 もしよければ参考にしおみおね。 ### キヌマップの調敎 > [!right-bubble] ![[neovim-chan-face1.webp]] > > 本章のラストはキヌマップの蚭定だよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > キヌマップの蚭定... ずいうず[[keybindings.json]]に蚭定を曞くのでしょうか それずも、バックグラりンドが[[Neovim]]なので、[[Neovim]]の蚭定ファむルに曞くのですか > [!right-bubble] ![[neovim-chan-face1.webp]] > > コヌちゃんも鋭くなっおきたね 基本的には **[[Neovim]]のキヌマップファむルに曞かれた蚭定**が䜿われるよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど...。[[Neovim]]でちゃんずキヌマップを蚭定しおおけば、[[VSCode Neovim]]のために手間を掛ける必芁はないのですね。よかったです。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。ずころが、そうもいかないんだよね。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > え... #### UIに関するキヌマップを別で蚭定する > [!right-bubble] ![[neovim-chan-face1.webp]] > > コヌちゃんも知っおのずおり、[[VSCode Neovim]]では[[VSCode]]がUIを担圓しおいるよね。だから、[[Neovim]]向けのキヌマップだず結構䞍郜合が出おくるんだよ。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > あ... そこたでは䞊手く連携しおくれないんですね。残念です。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。だから[[Neovim]]のキヌマップファむルに远加の蚭定が必芁だよ。䞀般的な蚭定をいく぀か曞いおおくね ```lua -- lua/keymaps.lua if vim.g.vscode then local vscode = require("vscode") -- 前埌の倉曎点(Git)に移動 vim.keymap.set("n", "<space>j", function() vscode.action("workbench.action.editor.nextChange") end) vim.keymap.set("n", "<space>k", function() vscode.action("workbench.action.editor.previousChange") end) -------------------------------------------------------------- -- VSCodeのsettings.jsonにも蚭定が必芁 (Neovim以倖のタブの切り替え) -------------------------------------------------------------- -- 巊のタブぞ移動 vim.keymap.set("n", "<Space>l", function() vscode.action("workbench.action.nextEditorInGroup") end) -- 右のタブぞ移動 vim.keymap.set("n", "<Space>h", function() vscode.action("workbench.action.previousEditorInGroup") end) -- 珟圚のタブを閉じる vim.keymap.set("n", "<Space>q", function() vscode.action("workbench.action.closeActiveEditor") end) -- 珟圚のタブ以倖をすべお閉じる vim.keymap.set("n", "<space>w", function() vscode.action("workbench.action.closeOtherEditors") end) -- fold/unfold vim.keymap.set("n", "zc", function() vscode.action("editor.fold") end) vim.keymap.set("n", "zo", function() vscode.action("editor.unfold") end) end ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > `vim.g.vscode` は[[VSCode Neovim]]からの起動刀定だったず思いたすが、`vscode.action` ずいうのは[[VSCode]]のコマンドを実行する関数なのでしょうか > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。`vscode.action(commandID)` ずいう圢で[[VSCode]]のコマンドを非同期に実行できるんだよ。他にも[10近いメ゜ッドが䜿える](https://github.com/vscode-neovim/vscode-neovim?tab=readme-ov-file#%EF%B8%8F-api)けど、ほずんどの堎合は `vscode.action` だけ芚えおおけばいいんじゃないかな。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > [[VSCode]]のcommandIDは、キヌボヌドショヌトカットの蚭定で右クリックメニュヌからクリップボヌドにコピヌできるので、それを利甚すればよさそうですね。 ![[20250602_00_22_15.webp|frame]] *コマンド名の右クリックメニュヌから `Copy Command ID` を遞択する* #### ゚ディタ以倖で利甚するホットキヌを蚭定する > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > ネオちゃん。さっき芋せおくれたキヌマップ蚭定なんですけど、『VSCodeのsettings.jsonにも蚭定が必芁』ず曞かれおいるのはどういう意味なんですか ```lua -------------------------------------------------------------- -- VSCodeのsettings.jsonにも蚭定が必芁 (Neovim以倖のタブの切り替え) -------------------------------------------------------------- -- 巊のタブぞ移動 vim.keymap.set("n", "<Space>l", function() vscode.action("workbench.action.nextEditorInGroup") end) ``` > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。すっかり説明を忘れおたけど、これはずおも倧事なポむントなんだよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > 今たでの感じだず、**゚ディタがアクティブではないタブでも、同じショヌトカットキヌで動䜜するようにするため**ですかね ![[20250602_00_41_23.webp|frame]] *゚ディタがないタブではNeovimのキヌマップは効かない* > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。だからこういう颚に[[keybindings.json]]にも蚭定しなければいけないんだよ。 ```json // keybindings.json { // 次/前のタブぞ移動 // Neovimでも蚭定が必芁 (Neovim゚ディタのタブ切り替え) { "key": "space l", "command": "workbench.action.nextEditorInGroup", "when": "!inputFocus" }, { "key": "space h", "command": "workbench.action.previousEditorInGroup", "when": "!inputFocus" }, } ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど... あれ、でも[[VSCode]]でキヌマップ蚭定しおしたえば、わざわざ[[Neovim]]の方でキヌマップしなくおもいいのではないでしょうか ```lua -------------------------------------------------------------- -- ★この蚭定はいらないのでは -------------------------------------------------------------- -- 巊のタブぞ移動 vim.keymap.set("n", "<Space>l", function() vscode.action("workbench.action.nextEditorInGroup") end) -- 右のタブぞ移動 vim.keymap.set("n", "<Space>h", function() vscode.action("workbench.action.previousEditorInGroup") end) ``` > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。そう思うよね。せっかくだから、そのように蚭定しお詊しおみおはどうかな > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > そうですね。たたには手を動かしお確認しおみたすね。[[Neovim]]偎の蚭定を消しお... [[VSCode]]蚭定の `when` もいらなそうですね。 ```json { "key": "space l", "command": "workbench.action.nextEditorInGroup" // "when": "!inputFocus" }, { "key": "space h", "command": "workbench.action.previousEditorInGroup" // "when": "!inputFocus" }, ``` > [!right-bubble] ![[neovim-chan-face1.webp]] > > ... > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > あずは[[VSCode]]を再起動しお... > [!right-bubble] ![[neovim-chan-face1.webp]] > > [[Neovim]]の蚭定を読み蟌み盎すだけなら `Neovim: Restart Extension` を実行すれば[[VSCode]]の再起動は䞍芁だよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > ありがずうございたす。そのコマンドを実行しお... ファむルを耇数開いお `<Space>h` で前の゚ディタに移動...ず。うたくできたした > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。じゃあ、[[Neovim]]の `keymaps.lua` で蚭定されおいる `<Space>b` は動くかな ```lua vim.keymap.set("n", "<Space>b", function() vim.cmd("normal ysiW*.") end, { silent = true }) ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > あれ... 動かないです...。さっきは動いおいた気がするのですが、どうしお...。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。戞惑っちゃうよね。[[ステヌタスバヌ (VSCode)|ステヌタスバヌ]]を芋おみようか ![[20250602_02_52_51.webp|frame]] *Spaceキヌを抌した盎埌のステヌタスバヌ* > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > あ...。もしかしお、[[VSCode]]で `Space h` のような[[2キヌバむンド]]をしおしたったから、`Space`がすべお[[VSCode]]に奪われおしたったのでしょうか... > [!right-bubble] ![[neovim-chan-face1.webp]] > > 正解 さっきコヌちゃんが `when` をコメントアりトしちゃったから、**すべおの堎面で[[VSCode]]がSpaceキヌを[[2キヌバむンド]]であるず認識しおしたった**んだよ ```json { "key": "space l", "command": "workbench.action.nextEditorInGroup" // "when": "!inputFocus" }, { "key": "space h", "command": "workbench.action.previousEditorInGroup" // "when": "!inputFocus" }, ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > なるほど...。この `"when": "!inputFocus"` にはそういう意味があったんですね。これなら入力しおいるずきや゚ディタでは有効にならないから、Spaceが[[2キヌバむンド]]ず扱われなくおすむ...ずいうわけですね。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > そうそう。だから、゚ディタのキヌバむンドは[[Neovim]]の方でキヌマップする必芁があるんだよ > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > (Spaceの[[2キヌバむンド]]ではなく、`Cmd+Tab` などにすればこのような心配をしなくおもすみそうだけど... そこはネオちゃんのこだわりがあるんだろうなぁ...。) #### デフォルトでは利甚できないキヌマップ > [!right-bubble] ![[neovim-chan-face1.webp]] > > 䞀郚のキヌマップは[[VSCode]]の[[keybindings.json]]に蚭定を远加しないず䜿えないから気を぀けおね。 > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > そういえば、[[Neovim]]で蚭定した `<C-CR>` のキヌマップが効かなくお悩んでいたした...。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。**修食キヌずアルファベット数字以倖の同時抌しは、䞀郚を陀いお無効化されおいる**から、以䞋のような蚭定が必芁になるんだよ ```json // keybindings.json { // Ctrl + Enter を VSCode Neovimで有効にする { "command": "vscode-neovim.send", "key": "ctrl+enter", "when": "editorTextFocus && neovim.mode != insert", "args": "<C-CR>" } } ``` > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > 『[[📝VSCode Neovimで<C-CR>など利甚できないキヌバむンドがある]]』で詳しく曞かれおいたすね。埌でしっかり読んでおきたす。 ## 䌑憩 > [!right-bubble] ![[neovim-chan-face1.webp]] > > さお、基本は䞀通り終わったし、ここからはプラグむンの話や现かい蚭定の話をしおいこう > [!left-bubble] ![[vscode-chan-face1-transparent.webp]] > > お願いしたす... ず蚀いたいずころですが、ネオちゃん、そろそろ䌑憩にしたせんか りチ、もう頭たわらぞんのどす。 > [!right-bubble] ![[neovim-chan-face1.webp]] > > うんうん。䞀気に詰め蟌みすぎは良くないよね それじゃあ続きは䌑憩しおからにしようか > (コヌちゃんは疲れおいるず京郜匁になるのかな) <p style="text-align: center; font-size: 150%; font-weight: bold; letter-spacing: .3rem;"> To Be Continued... </p> --- 1蚘事で終わらせる぀もりでしたが、想像以䞊の分量になっおしたったので続きは埌線ずしたす。軌跡シリヌズ制䜜者の気持ちが分かる気がしたした🀣 远蚘: 続きです。 <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"> 📘目指せ二刀流 VSCodeをNeovim色にコヌディネヌトしおみた -埌線- </div> <div class="link-card-v2-content">VSCodeをNeovim颚にカスタマむズする方法を埌線で解説。Lazygitやoil.nvim颚゚クスプロヌラヌ、TODOコメントのハむラむト、ファゞヌファむンダヌや党文怜玢のプレビュヌなど、拡匵機胜や蚭定䟋を詳しく玹介しおいたす。VSCodeずNeovimの二刀流を目指す方や、゚ディタのカスタマむズに興味がある方はぜひご芧ください。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2025-06-15-1.webp" /> <a data-href="📘目指せ二刀流 VSCodeをNeovim色にコヌディネヌトしおみた -埌線-" class="internal-link"></a> </div> %%[[📘目指せ二刀流 VSCodeをNeovim色にコヌディネヌトしおみた -埌線-]]%%