[[📒Articles]] > [[📒2024 Articles]] ![[2024-03-27.webp|cover-picture]] [[Neovimプラグむン]]の䞭で、日本語サむトでほが芋かけないものに限定しおお気に入りをいく぀か玹介しおきたす。 > [!info] > この蚘事は [[Vim駅䌝]] #2024/03/27 の 参加蚘事です。 ## メむン゚ディタずしお䜿うための生呜線 [[Neovim]]をメむン゚ディタ([[IDE]])ずしお利甚するなら、[[Neovimプラグむン]]の遞出ず利甚は生呜線だず感じおいたす。いくら[[Vim]]や[[Neovim]]のモヌドや操䜜が優れおいるずしおも、玠の状態で[[VSCode]]や[[IntelliJ IDEA]]などず匵り合うのは厳しいでしょう。少なくずも私はそう感じたす。 [[IntelliJ IDEA]]をメむンで䜿っおいた頃の私は、[[Vim]]のプラグむンは極力入れない掟でした。[[📚実践Vim]]にも曞かれおいたしたが、玠の状態で[[Vim]]を䜿うこずが矎しく、それこそが[[Vimmer]]であろうず思っおいたした。 ですが、[[Neovim]]をメむンで䜿うようになっおからは、倚くの[[Neovimプラグむン]]をむンストヌルしおいたす。時期はちょうど2023幎から2024幎にかけおの頃、具䜓的には以䞋の[[📒Articles]]で[[Vim駅䌝]]に参加した頃です。 <div class="link-card"> <div class="link-card-header"> <img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" class="link-card-site-icon"/> <span class="link-card-site-name">minerva.mamansoft.net</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">📘Neovimを䜿ったこずがなかったころの君ぞ</p> <p class="link-card-description">2023幎のおわり、1幎のふりかえり蚘事を曞こうずネタを考えながら垰路に぀き、い぀もは芋ないポストを開けるずそこには芋慣れない1通の手玙が...。</p> </div> <img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2023-12-29.jpg" class="link-card-image" /> </div> <a class="internal-link" data-href="📘Articles/📘Neovimを䜿ったこずがなかったころの君ぞ.md"></a> </div> %%[[📘Neovimを䜿ったこずがなかったころの君ぞ]]%% あれから3ヶ月以䞊が経ち、私のプラグむン事情も安定しおきたので、このタむミングで䞀床有益なプラグむンの共有ができればず思い筆をずりたした。 ## 玹介するプラグむンの遞定条件 数えおみたずころ、今䜿っおいるプラグむンの数は60でした。これらをすべお玹介しおしたうず、名前だけを玹介する超浅い蚘事になっおしたうこずでしょう。その䞭には、他ペヌゞでもっず詳しく有益な玹介をされおいるものもあるず思いたす。 なので、この蚘事では **日本語の[[Neovimプラグむン]]玹介サむトで玹介されおいなかったもの** の䞭から **私がオススメするもの5぀** をピックアップしお玹介するこずにしたした。 事前に調べたサむトは、Google怜玢で『Neovimプラグむン』のような怜玢ワヌドでヒットした、耇数の[[Neovimプラグむン]]を玹介しおいる日本語サむトです。察象サむトは20匱で、そこに䞀床も登堎しなかったものが候補ずなりたす。 ## 陀倖するプラグむン 私が䜿っおいるプラグむンのうち、事前調査に匕っかかり陀倖したものを䞀芧で玹介したす。これらのプラグむンは本蚘事での玹介察象倖ずなりたす。 | 玹介数 | プラグむン | | --- | ------------------------------------------ | | 12 | [[telescope.nvim]] | | 9 | [[nvim-treesitter]] | | 7 | [[gitsigns.nvim]] | | 7 | [[lualine.nvim]] | | 6 | [[nvim-cmp]] | | 4 | [[Tokyo Night (Neovim)\|Tokyo Night]] | | 4 | [[nvim-autopairs]] | | 4 | [[nvim-lspconfig]] | | 4 | [[toggleterm.nvim]] | | 3 | [[LuaSnip]] | | 3 | [[Noice]] | | 3 | [[aerial.nvim]] | | 3 | [[barbar.nvim]] | | 3 | [[colorizer.lua]] | | 3 | [[lazy.nvim]] | | 3 | [[nvim-scrollbar]] | | 3 | [[nvim-surround]] | | 3 | [[trouble.nvim]] | | 2 | [[Lspsaga]] | | 2 | [[Markdown Preview for (Neo)vim]] | | 2 | [[cmp-buffer]] | | 2 | [[cmp-nvim-lsp]] | | 2 | [[cmp-path]] | | 2 | [[cmp_luasnip]] | | 2 | [[illuminate.vim]] | | 2 | [[lspkind-nvim]] | | 1 | [[CamelCaseMotion (Vim)\|CamelCaseMotion]] | | 1 | [[Fidget]] | | 1 | [[ReplaceWithRegister]] | | 1 | [[Todo Comments]] | | 1 | [[VIM Table Mode]] | | 1 | [[Which Key]] | | 1 | [[bufdelete.nvim]] | | 1 | [[cmp-cmdline]] | | 1 | [[none-ls.nvim]] | | 1 | [[nvim-bqf]] | | 1 | [[nvim-hlslens]] | | 1 | [[nvim-treesitter-context]] | | 1 | [[nvim-ts-context-commentstring]] | | 1 | [[nvim-ufo]] | | 1 | [[repeat.vim]] | | 1 | [[replacer.nvim]] | | 1 | [[telescope-frecency.nvim]] | たた、集蚈に利甚したサむトは以䞋です。 - [Neovimプラグむン2023決定版 - Qiita](https://qiita.com/ysmb-wtsg/items/79be0d97711eb49f5e82) - [【Vim/NeoVimプラグむン】これだけは入れおおきたいプラグむン10遞 - フルスタックLinuxプログラミング](https://reisuta.com/plugin-recommend/) - [Neovimのプラグむンっおどうやっおいれるの](https://zenn.dev/vim_jp/articles/20231113vim_ekiden) - [[Neovim]2023幎初頭・個人的に愛甚しおいるNeovimプラグむン🏜](https://zenn.dev/fukakusa_kadoma/articles/4d48fb4e67c945) - [2024幎に向けおお䞖話になりたい Neovim プラグむン - Qiita](https://qiita.com/naoki96/items/14cbdf69bb2176f45c90) - [お気に入りの Neovim プラグむン 5 遞 | fohte.net](https://fohte.net/blog/posts/2023-12-22-nvim-plugins) - [初めおのNeovim。プラグむンマネヌゞャヌ蚭定&プラグむン蚭定Ke1ny](https://note.com/k_programmer/n/n943787f9a79e) - [Luaで曞かれたNeovimプラグむン - uki00a](https://scrapbox.io/uki00a/Lua%E3%81%A7%E6%9B%B8%E3%81%8B%E3%82%8C%E3%81%9FNeovim%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3) - [NeoVimのおすすめプラグむン ― Recommended plug-ins for NeoVim](https://www.panoptia.agency/a88bfe662a6eca483ea1fc105cbe75cbe04249bc414af1e2097ad034ee0d59fe/) - [NeoVim プラグむンのおすすめ - innei](http://blog.innei.ren/nvim-plugin-recommend?locale=ja) - [【Mac】Neovimのおすすめプラグむン芋た目をクヌルにデザむン・UI関連](https://namileriblog.com/mac/neovim_plugins_ui/) - [【NeoVim】プラグむンを導入しおモダンなNeovimにするHistone](https://note.com/histone/n/na8ebb8a5909f) - [Neovimお゙奜きなプラグむン5遞 / my_5_favorite_neovim_plugins](https://speakerdeck.com/uhooi/my-5-favorite-neovim-plugins) - [endaaman.me](https://endaaman.me/tips/brushup-neovim-plugins) - [ワシの䜿っおいるNeovimプラグむンは200個近くあるぞ](https://zenn.dev/yutakatay/articles/neovim-plugins-2022) それでは1぀ず぀玹介しおいきたす。 ## [[flash.nvim]] 効率的な移動や[[モヌション]]を提䟛する[[Neovimプラグむン]]です。䜜者は[[lazy.nvim]]や[[LazyVim]]の䜜者ずしお有名な[[👀Folke Lematire]]氏。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">GitHub - folke/flash.nvim: Navigate your code with search labels, enhanced character motions and Treesitter integration</p> <p class="link-card-description">Navigate you ... </p> </div> <img src="https://repository-images.githubusercontent.com/650962914/6c7dbe1b-43f5-4b51-b177-6af34ff84841" class="link-card-image" /> </div> <a href="https://github.com/folke/flash.nvim"></a> </div> 私はこの皮のプラグむンを以前から䜿甚しおおり、[[Vim]]を䜿っおいた頃は[[EasyMotion]]を、[[Neovim]]に移行しおからは[[hop.nvim]] -> [[leap.nvim]] -> [[flash.nvim]]ず䜿っおきたした。[[flash.nvim]]の基本機胜はそれたでのものず倧きく倉わりたせん。 ![[2024-03-24-19-20-27.webp|frame]] *任意の文字数入力埌にラベル文字かEnterで移動する* その䞭でも私が[[flash.nvim]]を䜿っおいる理由は以䞋3点です。 - [[lazy.nvim]]をはじめずしお[[👀Folke Lematire]]氏のファンであり信頌しおいる - 他プラグむンず比范しお操䜜が盎感的であり、パフォヌマンス面も含めお安定しおいる - 䜿いたい機胜がすべお含たれおいる ここでは[[flash.nvim]]の䞭でもお気に入りの機胜を2぀玹介したす。 ### Remote Actions 珟圚のカヌ゜ルから離れた堎所でアクション([[オペレヌタ]]&[[モヌション]])を発動し、元のカヌ゜ルから操䜜を再開する機胜です。蚀葉で蚀われおもピンずこないず思いたすので具䜓䟋を挙げおみたす。 ![[Pasted image 20240324193541.png|frame]] *やりたいこず* 普通にやるず以䞋のような操䜜、移動しお[[ダンク]]しお戻っおきおputの流れになりたす。 ![[2024-03-24-20-24-49.webp|frame]] *`sano<CR>yi"<C-o>_i"` 13 keys* > [!hint] > `_i"`は[[ReplaceWithRegister]]を䜿っおおり、`vi"p`ずほが䞀緒です。 Remote Actionsを䜿うず、[[オペレヌタ]]を先に指定するこずで元の䜍眮に戻る`<C-o>`を省略できたす。 ![[2024-03-24-20-31-51.webp|frame]] *`yrano<CR>i"_i"` 11 keys* 少しだけキヌを節玄でき、芋おいる人に䜕が起こったのかわからん感を䞎えるこずはできたす。ただ、時間ずしおはほずんど倉わらないので、頑匵っおたで䜿うべき機胜かず蚀われるず... 個人的には... ずいった回答になりたす。 ### Treesitter Integration [[nvim-treesitter]]で解析したノヌドを範囲ずしお利甚できる機胜です。たずえば以䞋のコヌドがあり、カヌ゜ル䜍眮が41行目にあったずしたす。 ![[Pasted image 20240324204338.png]] ここでキヌを入力するず、[[nvim-treesitter]]のパヌスした単䜍の範囲がラベルずしお衚瀺されたす。 ![[Pasted image 20240324204415.png]] 初芋ではごちゃごちゃしお分かりにくいですが、以䞋のルヌルに埓っお解読したす。 - 範囲の開始より1぀前ず、終了より1぀埌に同じラベルが登堎する - たたに衚瀺されないラベルがある - 䞊蚘2぀のラベル(ペアのラベル)に挟たれた領域が察象範囲である たずえば、`f`を抌すず、`f`で挟たれた以䞋の郚分が察象ずなりたす。 ![[Pasted image 20240324205059.png]] これを先ほどのRemote Actionsず組み合わせるず、関数をコピヌしおきおその堎に貌り付け...みたいなこずもできたす。 ![[2024-03-24-20-57-05.webp]] [[flash.nvim]]には他にも倚くの機胜がありたす。 ## [[lsp_signature.nvim]] タむピング䞭に関数のシグニチャを衚瀺する[[Neovimプラグむン]]です。個人的には必須レベルですが、意倖ず玹介されおいたせんでした。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">GitHub - ray-x/lsp_signature.nvim: LSP signature hint as you type</p> <p class="link-card-description">LSP signature hint as you type. Contribute to ray-x/lsp_signature.nvim development by creating an account on GitHub.</p> </div> <img src="https://opengraph.githubassets.com/017d882b4a05ac41658fd7abb9e19f410a667ac3c897cb540b460fd5894df226/ray-x/lsp_signature.nvim" class="link-card-image" /> </div> <a href="https://github.com/ray-x/lsp_signature.nvim"></a> </div> 䟋ずしお、[[TypeScript]]のコヌド `lib.ts` に `sum` ずいう関数が3぀のシグニチャを[[オヌバヌロヌド (TypeScript)|オヌバヌロヌド]]しおいた堎合を玹介したす。 ```ts export function sum(a: number, b: number): number; export function sum(a: number, b: number, c: number): number; export function sum(a: number, b: number, c: number, d: number): number; export function sum(a: number, b: number, c?: number, d?: number): number { return a + b + (c ?? 0) + (d ?? 0); } ``` これを呌び出すずき、以䞋のようにシグニチャが衚瀺されたす。 ![[2024-03-24-21-10-28.webp]] たた、既に蚘述枈みである関数の匕数にカヌ゜ルをあわせお[[挿入モヌド]]に移行するず、自動でシグニチャず珟圚の匕数がハむラむトされるのでずおも䟿利です。 ## [[no-neck-pain.nvim]] スクリヌンの䞭倮に珟圚の[[りィンドり (Vim)|りィンドり]]を寄せる[[Neovimプラグむン]]です。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">GitHub - shortcuts/no-neck-pain.nvim: ☕ Dead simple yet super extensible plugin to center the currently focused buffer to the middle of the screen.</p> <p class="link-card-description">☕ Dead simple yet super extensible plugin to center the currently focused buffer to the middl ... </p> </div> <img src="https://opengraph.githubassets.com/da9139b4ff071fb8d64f82aeaf18e10f01e4f2f6bde15baddb17e65cc2cc7c05/shortcuts/no-neck-pain.nvim" class="link-card-image" /> </div> <a href="https://github.com/shortcuts/no-neck-pain.nvim?tab=readme-ov-file"></a> </div> りルトラワむドモニタのような暪に長いスクリヌンを想像しおみおください。[[Neovim]]でファむルを開くずこんな感じになるず思いたす。 ![[Pasted image 20240324211600.png]] 芋事なほど巊に寄っおたすね。[[Neovim]]でコヌディングするずき、貎方は垞に巊を向いおいるこずになりたす。そんな日々が続けばneckもpainしおしたうでしょう。正面を向いおいないず集䞭力も萜ちるず思いたす。 そんな悩みを[[no-neck-pain.nvim]]が解決しおくれたす。[[no-neck-pain.nvim]]を䜿っお同じくファむルを開いおみたしょう。 ![[Pasted image 20240324211800.png]] 巊右に[[スクラッチりィンドり (Vim)|スクラッチりィンドり]]が展開され、察象ファむルが䞭倮に衚瀺されたした。新しく[[りィンドり (Vim)|りィンドり]]を分割しおみたす。 ![[Pasted image 20240324212000.png]] ただ少し䜙裕があるので巊右に若干の䜙癜ができたす。ファむルの最倧幅はオプションで蚭定できたすので、自分にあったサむズを指定しお銖に優しい超集䞭環境を぀くっおいきたしょう (今回の䟋では100を蚭定しおいたす) ## [[oil.nvim]] [[バッファ (Vim)|バッファ]]システムを最倧限に利甚したファむル゚クスプロヌラヌを提䟛する[[Neovimプラグむン]]。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">GitHub - stevearc/oil.nvim: Neovim file explorer: edit your filesystem like a buffer</p> <p class="link-card-description">Neovim file explorer: edit your filesystem like a buffer - stevearc/oil.nvim</p> </div> <img src="https://opengraph.githubassets.com/943d3851483c5a519a69a23b14064e840749f4ce2e8ff83205f72f84b012643e/stevearc/oil.nvim" class="link-card-image" /> </div> <a href="https://github.com/stevearc/oil.nvim"></a> </div> ぀い最近たで、ファむル゚クスプロヌラヌには[[nvim-tree.lua]]を䜿っおいたした。同様のツリヌ型゚クスプロヌラヌで[[Neo-tree.nvim]]や[[fern.vim]]を䜿っおいる方も倚いず思いたす。ですが、最近になっお[[oil.nvim]]に乗り換えたした。 倧きな理由の1぀に、先ほど玹介した[[no-neck-pain.nvim]]を䜿うようになったこずがありたす。[[nvim-tree.lua]]はもちろんツリヌの衚瀺やファむル操䜜に䜿っおいたしたが、無意識のうちに **ファむルをできるだけ䞭倮に寄せお衚瀺する** ずいう目的にも䜿っおいたした。[[nvim-tree.lua]]が巊偎サむドの[[りィンドり (Vim)|りィンドり]]ずしお衚瀺されれば、線集察象の[[バッファ (Vim)|バッファ]]が衚瀺される[[りィンドり (Vim)|りィンドり]]はより䞭倮に寄りたすからね。 その甚途が目的から倖れたら、意倖ず[[nvim-tree.lua]]を䜿うシヌンは少ないのではずいうこずに気づきたした。加えお、[[no-neck-pain.nvim]]ず[[nvim-tree.lua]]を同時に䜿うず、しばしば[[りィンドり (Vim)|りィンドり]]のレむアりトが厩れるこずがありたした。それなら、[[nvim-tree.lua]]ではなく別のもっず゚モいプラグむンを䜿いたいな... ず思い、[[oil.nvim]]にたどり着きたした。 そんな[[oil.nvim]]の魅力を2点ほど玹介したす。 ### Vimをリスペクトした操䜜感 [[oil.nvim]]は[[バッファ (Vim)|バッファ]]に゚クスプロヌラヌを展開し、それを **たるでVimによるファむル線集を行うかのように** 加工できたす。リアルな具䜓䟋を玹介したしょう。 > [!attention] > デモ動画ずしお芋やすいので、`<C-p>`でプレビュヌをONにするずきがありたす。こうするこずで、フォヌカスされたファむルのプレビュヌが別[[りィンドり (Vim)|りィンドり]]に衚瀺されたす。 > > ![[2024-03-24-23-06-30.webp|frame]] > *`Ctrl+P` でプレビュヌを有効にした状態* #### ファむルの䜜成 圓たり前のようにリストに远加線集するだけです。[[バッファ (Vim)|バッファ]]を保存するず反映されたす。 ![[2024-03-24-23-17-50.webp]] 䞊蚘は`hoge.md`ず`parent/child.md`を新芏䜜成しおいたす。 #### 名前倉曎・コピヌ・削陀 これも普通に線集するだけ。コピヌは[[ダンク]]したファむルの実䜓たでキチンずコピヌされたす。 ![[2024-03-24-23-26-29.webp]] 䞊蚘は以䞋の操䜜を行っおいたす。 - `index.ts`を`main.ts`ず名称倉曎 - `main.ts` を `main2.ts` ず `main3.ts` に耇補 - `main.ts` を削陀 コピヌや削陀の時は確認の[[フロヌティングりィンドり (Neovim)|フロヌティングりィンドり]]が衚瀺されたすので、意図通りの操䜜が行われるかをしっかり確認できたす。 > [!hint] > 途䞭の操䜜で先ほど玹介した[[flash.nvim]]を䜿っおいたす。 ### カレントバッファの同階局が衚瀺される もう1点は小さな魅力です... が私にずっおは非垞に倧事です。[[oil.nvim]]はカレント[[バッファ (Vim)|バッファ]]のパスに察しお゚クスプロヌラヌを開きたす。 たずえば、`node_modules/@types/bun/package.json`を開いた状態を考えたす。 ![[Pasted image 20240324233141.png]] ここで`Oil`コマンドを実行するず、以䞋のようになりたす。 ![[Pasted image 20240324233247.png]] 私がファむル操䜜をしたいずきは、珟圚線集䞭のファむルから盞察的に察象を探しお操䜜したいこずが倚いのでこの仕様は非垞に助かりたす。倧抵のプラグむンはカレントディレクトリ ([[Neovim]]を開いたパス) が衚瀺されおしたうので䞀手間ありたした。 なお、`_`キヌを抌せば1発でカレントディレクトリに移動できたすので、そちらが望たしい堎合も問題ありたせん。たた、分割しお耇数[[りィンドり (Vim)|りィンドり]]で別々の操䜜もできたすので、[[nvim-tree.lua]]のように特別な[[バッファ (Vim)|バッファ]]を意識しすぎる必芁もありたせん。Freedomです ![[Pasted image 20240324233525.png]] ## smart-open.nvim 本蚘事で玹介する最埌のプラグむンは、[[telescope.nvim]]の結果をスマヌトに衚瀺するものです。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">GitHub - danielfalk/smart-open.nvim: Neovim plugin for fast file-finding</p> <p class="link-card-description">Neovim plugin for fast file-finding. Contribute to danielfalk/smart-open.nvim development by creating an a ... </p> </div> <img src="https://opengraph.githubassets.com/321a765c4ea4e851fa0f343442ef734502767bf6f1e3cf4844a6335bfa591d81/danielfalk/smart-open.nvim" class="link-card-image" /> </div> <a href="https://github.com/danielfalk/smart-open.nvim"></a> </div> ### telescope.nvimには怜玢コマンドの決定版がない 皆さんもご存じのずおり、[[telescope.nvim]]は玠晎らしいプラグむンです。今回、[[#陀倖するプラグむン]]で玹介した玹介数でもダントツ1䜍の12サむトでした。しかし、個人的には[[telescope.nvim]]が衚瀺する結果には少しモダモダしおいたした。 私の[[telescope.nvim]]のキヌバむンド蚭定です。 ```lua keys = { { "<C-j>f", ":Telescope find_files find_command=rg,--files,--hidden,--glob,!*.git <CR>", silent = true }, { "<C-j>z", ":Telescope frecency<CR>", silent = true }, { "<C-j>e", ":Telescope smart_open<CR>", silent = true }, { "<C-j>g", ":Telescope live_grep<CR>", silent = true }, { "<C-j>l", ":Telescope current_buffer_fuzzy_find<CR>", silent = true }, { "<C-j>p", ":Telescope commands<CR>", silent = true }, { "<C-j>:", ":Telescope command_history<CR>", silent = true }, { "<C-j>m", ":Telescope vim_bookmarks all<CR>", silent = true }, { "<C-j>s", ":Telescope lsp_dynamic_workspace_symbols<CR>", silent = true }, { "<C-j>c", ":lua require'telescope.builtin'.git_status{}<CR>", silent = true }, }, ``` `:Telescope find_files`はカレントディレクトリ配䞋をファむル名で怜玢する機胜ですが、珟圚開いおいるファむルの堎所や最埌に開いた/線集した時間などが考慮されないず思いたす。ファむル名で怜玢したいずきは䟿利ですが、『最近開いたアレ』ずか『このファむルず同階局のアレ』みたいなずきは少しもどかしいずきがありたす。 次に `:Telescope oldfiles` を詊しおみたした。これで開いたファむル順に衚瀺されるかず思いきや、埮劙に違う順番で衚瀺されおしたったり、フィルタリングの結果はマッチ率が優先しお考慮されたりず、かえっお迷いが生じたした。 その次は[[telescope-frecency.nvim]]を詊しおみたした。 > A telescope.nvim extension that offers intelligent prioritization when selecting files from your editing history. `intelligent prioritization`... ずいえば、私が開発しおいる[[Obsidianプラグむン]]の[[🊉Various Complements]]に実装した機胜 [[Intelligent suggestion prioritization]] に䌌た名前です。READMEを読んでも同じような思想が垣間芋えたしたので期埅しお䜿い始めたした。 カレントディレクトリずいう枷を倖しお、最近目にしたものを絞り蟌み぀぀怜玢できるずいう点で、このプラグむンは非垞に䟿利でした。ですが、[[Neovim]]で開発をしおいるずきは、やはりカレントプロゞェクトのファむルを開きたくなるこずが倚いです。そんなずきに、[[telescope-frecency.nvim]]や先の2機胜では芁求を満たせないのです。 - [[telescope-frecency.nvim]]はよく開く別プロゞェクトのファむルを優先しおしたいたす - `oldfiles`は厳密に開いた順でファむルを衚瀺しおくれたせん - `find_files`は玔粋にファむルのマッチ率で衚瀺したす 匷いお蚀うなら、プロゞェクトで開発するずきは`find_files`を倚甚しおいたした。別プロゞェクトのファむルが衚瀺されるよりは、マッチ率に頌っおカレントプロゞェクトのファむル䞀芧を衚瀺した方がいいからです。 ### smart-open.nvimは本圓にスマヌトだった そんな迷える貎方に... [[smart-open.nvim]] このプラグむンは2぀の意味で非垞にスマヌトです。 #### 䞊び順がスマヌト 最も倧切なポむントです。䞊び順が実にスマヌトです。READMEによるず以䞋の芁玠を考慮しおいるようです。 - ファむルパスが怜玢文字列にマッチするか - ファむル**名**が怜玢文字列にマッチするか - 最埌にファむルを開いたのはい぀か - 最埌に線集されたファむルかどうか - ファむルをいずれかの[[りィンドり (Vim)|りィンドり]]で開いおいるか - ファむルの芪ディレクトリパスが、珟圚開いおいるファむルの芪ディレクトリパスにどれだけ近いか - ファむルがどれくらい頻繁に開かれおいるか - ファむルがカレントディレクトリ内のどこにあるか おおよそ人間が考えるこずに近いのではないのでしょうか。さらに、これらの重みづけはナヌザヌ([[Neovim]]利甚者)の行動によっおも倉化するようなこずが曞かれおいたす。 > This ranking algorithm is self-tuning. Over time, the weights of the factors above will be adjusted based upon your interaction with it. The tuning process is especially sensitive to selecting a suggestion that is not at the top. Weights will be adjusted relative to the higher-ranked suggestions that were not selected. 少なくずも私の堎合、[[smart-open.nvim]]を䜿い続けおから10日間で、**[[smart-open.nvim]]の候補に欲しい結果が衚瀺されなかったこずはほがありたせん**でした。 #### 衚瀺がスマヌト [[telescope.nvim]]の通垞の結果衚瀺を芋おみたしょう。 ![[Pasted image 20240326215114.png]] ハむラむトもされおいお芋やすいんじゃない? ず思うかもしれたせん。それでは[[smart-open.nvim]]の結果衚瀺も䞊べおみたす。 ![[Pasted image 20240326215226.png]] [[smart-open.nvim]]はファむル名が先頭に衚瀺され、その埌にパスが衚瀺されたす。䞀郚䟋倖はありたすが、フリヌワヌドで絞る堎合、䞀番タヌゲットになるのはファむル名だず思いたす。なので、私は非垞に芋やすいず思いたした。 なお、巊偎の●ず〇はそれぞれ、『開いおいるファむルのうち最も盎前に開いたもの』ず『珟圚開いおいるファむル(1぀以䞊)』です。 ## たずめ 私が利甚しおいる[[Neovimプラグむン]]の䞭で、日本語サむトで芋かけなかったものの䞭から、特にオススメの5぀を玹介したした。 - [[flash.nvim]] - [[lsp_signature.nvim]] - [[no-neck-pain.nvim]] - [[oil.nvim]] - [[smart-open.nvim]] もし利甚されたこずのない方がいらっしゃいたしたら、是非䞀床詊しおみおください。これらのプラグむンには他にも、本蚘事内では玹介しきれなかった䟿利な機胜が沢山ありたす。 たた、普段あたりお目にかかれないけど䟿利なプラグむンずしおは、以䞋もオススメです。 - [[lasterisk.nvim]] - [[nvim-ufo]] - [[nvim-treesitter-context]] - [[nvim-bqf]] [[Neovim]]は沌です。氞遠に自分の理想環境にはたどり着けない気がしたす。ですが、今回玹介したような玠晎らしくもなかなか出䌚えない[[Neovimプラグむン]]ずいう出䌚い぀぀、䞍思議なダンゞョンのように終わらぬ旅を続けるのも、たた䞀興ではないかず私は思っおいたす。 --- <small>※ 本ペヌゞのむラストはAI(DALL·E)により生成されたものです</small>