## 背景 [[📜2021-01 VSCode Neovimを試してみる]] からはや2年半。当時と状況が以下のように変わったので、もう一度チャレンジしてみることにした。 - [[Neovim]]が当時より進化した - [[VSCode Neovim]]も当時より進化した(はず) - [[Vim]]から[[Neovim]]に移行した - [[VSCode]]をほとんど使わなくなり、[[IntelliJ IDEA]]と[[Neovim]]で過ごすようになった - [[vimrc]]から[[init.lua]]に移行した 一言で言うと『自分の中で[[Neovim]]が圧倒的に台頭してきた』し、当時の不満も解消できそうという期待が大きい。 加えて、たまたま以下の記事を目にして思い出したというのもある。 <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"> VSCode VimからVSCode Neovimに移行した </div> <img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--5DpaX_Ms--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:VSCode%2520Vim%25E3%2581%258B%25E3%2582%2589VSCode%2520Neovim%25E3%2581%25AB%25E7%25A7%25BB%25E8%25A1%258C%25E3%2581%2597%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:yubrot%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2k3bTYyV0NtaVFxMkEyeUk2TTNnWFlpdVBzXzFsa2lUUWVhRUZObHc9czk2LWM=%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" /> <a href="https://zenn.dev/yubrot/articles/1bf4b8d79d7cae"></a> </div> ## 環境 - [[Windows 11]] - [[VSCode]] 1.83.0 - [[VSCode Neovim]] 0.8.2 - [[Neovim]] 0.9.2 ## [[VSCodeVim]]の無効化 いきなりアンインストールはリスキーなのでまずは様子見したい。ということで無効化に留める。 ## [[VSCode Neovim]]のインストール [[VSCode]]のUIから。 ![[Pasted image 20231007174616.png]] あとは再起動したら普通に[[Neovim]]の操作が使えた。 ## 設定の精査 ### READMEの内容把握 公式のREADMEを見ながら設定していく。 <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 - vscode-neovim/vscode-neovim: Vim mode for VSCode, powered by Neovim </div> <div class="link-card-v2-content"> Vim mode for VSCode, powered by Neovim. Contribute to vscode-neovim/vscode-neovim development by creating an acc ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/c8eefb9817948b1dace656e15926ef1e8fbe5ef1b71488006ef61636c5c563a8/vscode-neovim/vscode-neovim" /> <a href="https://github.com/vscode-neovim/vscode-neovim"></a> </div> > Since many VIM plugins can cause issues in VSCode, it is recommended to start from an empty init.vim. For a guide for which types of plugins are supported, see troubleshooting. [[VSCode]]だと動かないプラグインも多いから [[init.vim]] ([[init.lua]]) は空から始めた方がいいという内容。それはそれで面倒だから、自分は条件分岐をあとから加えていく方法で対処していく。よく使うモノが動けばOK。 [[init.lua]]内では以下のように条件分岐できるとのこと。 ```lua if vim.g.vscode then -- VSCode extension else -- ordinary Neovim end ``` > To conditionally activate plugins, vim-plug has a few solutions. packer.nvim and lazy.nvim have built-in support for cond = vim.g.vscode. See plugins in the wiki for tips on configuring VIM plugins. [[lazy.nvim]]を使っているので特に気にしなくてもよさそう。 ### [[Neovim]]と共存できる設定づくり [[Neovim]]と[[VSCode Neovim]]の両方で使用するプラグインもそれなりにあるはずなので、以下をそれぞれ設定できるようにする。 - [[Neovim]]と[[VSCode Neovim]]の両方で使うプラグイン - [[Neovim]]でのみ使うプラグイン - [[VSCode Neovim]]でのみ使うプラグイン [[init.lua]]には以下のような記載をする。 ```lua function merge_tables(t1, t2) local merged = {} for _, v in ipairs(t1) do table.insert(merged, v) end for _, v in ipairs(t2) do table.insert(merged, v) end return merged end local is_vscode = vim.g.vscode == 1 local common_plugins = { -- 両方で使うプラグインを列挙 } local vscode_plugins = { -- VSCode Neovimでのみ使うプラグインを列挙 } local neovim_plugins = { -- Neovimでのみ使うプラグインを列挙 } require('lazy').setup( merge_tables(common_plugins, is_vscode and vscode_plugins or neovim_plugins) ) ``` <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"> 📕init.luaをNeovimとVSCode Neovimとで読み分ける </div> <div class="link-card-v2-content">NeovimとVSCode Neovimでinit.luaのプラグイン設定を条件分岐し、環境ごとに読み分ける方法を解説。プラグイン管理や設定分離に役立つ情報である。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/prime.webp" /> <a data-href="📕init.luaをNeovimとVSCode Neovimとで読み分ける" class="internal-link"></a> </div> %%[[📕init.luaをNeovimとVSCode Neovimとで読み分ける]]%% ## プラグインの仕分け プラグインの仕分けを行う。 ### 両方で使うプラグイン - [[hop.nvim]] - [[commentary.vim]] - [[vim-textobj-user]] - [[ReplaceWithRegister]] - [[nvim-surround]] - [[CamelCaseMotion (Vim)|CamelCaseMotion]] - [[vim-highlightedyank]] ### [[Neovim]]でのみ使うプラグイン 基本的には[[VSCode]]で動作しないもの。 - [[gruvbox.nvim]] - [[gruvbox-material]] - [[nvim-treesitter]] - [[vim-signature]] - [[Nvim-web-devicons]] - [[bufdelete.nvim]] - [[barbar.nvim]] - [[vim-visual-multi]] - [[lualine.nvim]] - [[possession.nvim]] - [[telescope.nvim]] - [[telescope-file-browser.nvim]] - [[nvim-tree.lua]] - [[fm-nvim]] - [[gitsigns.nvim]] - [[coc.nvim]] - [[Markdown Preview for (Neo)vim]] ### [[VSCode Neovim]]でのみ使うプラグイン 今は無し。 ## キーバインディングの見直し [[VSCode Neovim]]のバインディングとバッティングしないように[[keybindings.json]]を見直す。特に`ctrl+w`に関するコマンドは重要 <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でctrl+wに関するコマンドが使えない </div> <div class="link-card-v2-content">VSCode Neovimで「Ctrl+w w」などのウィンドウ分割・移動コマンドが使えない場合、VSCodeのkeybindings.jsonでCtrl+wのバインディングが競合していることが原因である。不要なキーバインドを削除することで解決できる。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" /> <a data-href="VSCode Neovimでctrl+wに関するコマンドが使えない" class="internal-link"></a> </div> %%[[VSCode Neovimでctrl+wに関するコマンドが使えない]]%% [[VSCode]] 1.83.0のバグも踏んで地味に大変だった。 <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でユーザーディレクトリ配下のkeybindings.jsonやsettings.jsonがシンボリックリンクだとVSCodeから変更されたときにリンクが切れる </div> <div class="link-card-v2-content">Windows 11環境でVSCodeのkeybindings.jsonやsettings.jsonをシンボリックリンクで管理すると、1.83でファイル変更時にリンクが切れるバグが発生する。Git管理やsymlink運用時に注意が必要である。1.83.1で修正済み。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" /> <a data-href="📝VSCodeでユーザーディレクトリ配下のkeybindings.jsonやsettings.jsonがシンボリックリンクだとVSCodeから変更されたときにリンクが切れる" class="internal-link"></a> </div> %%[[📝VSCodeでユーザーディレクトリ配下のkeybindings.jsonやsettings.jsonがシンボリックリンクだとVSCodeから変更されたときにリンクが切れる]]%%