nvim-navbuddy

nvim-navicで紹介されているように、完全なパンくず1 体験ができるようにしてみましょう❗

"ヘンゼルとグレーテル" はグリム童話🧒👧 で、グリム童話はグリム兄弟👨👨 がまとめた童話集で...。

A simple popup display that provides breadcrumbs like navigation feature but in keyboard centric manner inspired by ranger file manager.

パンくずナビゲーション機能を提供するシンプルなポップアップ表示ですが、 rangerファイルマネージャに触発されたキーボード中心の方法で表示されます。

って、お話が迷子😿 ...あ、いつも通りでした😹

Another red letter day

So the pound has dropped and the children are creating

また祝日だ

たとえポンドが下落しようとも 子どもたちは創作している

Requirements

もうお馴染みのルーティン😊

ここまで来ると「ああ、それね❗」ってなることが増えてきました😆

nvim-lspconfig

まずはこれですね。これが無いと始まりません 🐇

さて、まずはLSP活用の基盤を築きましょう❗nvim-lspconfigの登場です😆

Note

nvim-lspconfigと併せて、使用する言語に対応したLSPがちゃんと動いている環境が必要です。

このサイトでは16.1節から16.3節までの内容です。これを見てもらえると、一通りは動くようになっているはずです。

nvim-navic

んでもってこれですね。これも無いと始まらないそうです 🐇🐇

今回はのほほんとnvim-navicを導入してみましょう。

nui.nvim

そしてもう一つ、nui.nvim❗このサイトでは初登場です 🐇🐇🐇

UI Component Library for Neovim.

Neovim 用 UI コンポーネントライブラリ。

今回は完全にコンポーネントとしての役割に徹してもらうので、 nui.nvimに対して自分で直接働きかける必要はありません。インストールするだけでOKです❗

Setup

これもやっぱり、動かすだけならすごく簡単😉

extensions/nvim-navbuddy.lua

require('nvim-navbuddy').setup {
  lsp = {
    auto_attach = true,
  },
}

lsp

お察しの通り、これはnvim-navicと全く同じです😉

auto_attach

nvim-navbuddy needs to be attached to lsp servers of the buffer to work.

nvim-navbuddy はバッファの lsp サーバにアタッチされていないと動作しません。

You can pass the navbuddy's attach function as on_attach while setting up the lsp server. You can skip this step if you have enabled auto_attach option in setup function.

lsp サーバーのセットアップ時に on_attach として navbuddy の attach 関数を渡すことができます。 セットアップ機能で auto_attach オプションを有効にしている場合は、この手順を省略することができます。

え😮 こっちも省略しちゃっていいんですか❓やったね😋

Installation

もはや迷子になる方が難しい❗

extensions/init.lua

  use {
    "SmiteshP/nvim-navbuddy",
    config = function() require 'extensions.nvim-navbuddy' end,
    requires = {
      'neovim/nvim-lspconfig', 'SmiteshP/nvim-navic', 'MunifTanjim/nui.nvim',
    },
  }

はい、できた😆

Usage

Navbuddy command can be used to open navbuddy.

Navbuddy コマンドは、navbuddy を開くために使用することができます。

:Navbuddy

And alternatively lua function open can also be used to open navbuddy.

また、navbuddy を開くには、lua の open 関数を使用することもできます。

:lua require("nvim-navbuddy").open()

Tip

「言われなくてもわかっとるわー❗」てな事だとは思うんですが、これだとちょっと大変なので

vim.api.nvim_create_user_command('Nb', function()
  vim.cmd.Navbuddy()
end, {})

とか、

vim.keymap.set('n', '<leader>nb', vim.cmd.Navbuddy)

...とか、しておくといいかもしれません。

それでは、インストールを済ませてから呼び出してみましょう😉

nvim-navbuddy 1

Telescopeと似ていますが、これはnui.nvimのウィンドウなので、(デフォルトでは) hjklでカーソルが動きます。

ちょっとこれだと例が面白くないので、 15.11.1節で作成した extensions/nvim-tree-actions.luaで動かしてみるとこんな感じです😊

nvim-navbuddy 2

このリストと連動してファイル上でも選択範囲が動いていますね。ほら面白い❗🤹

Note

これってもしかして nvim-navbuddyctagsがやっていたようなことを置き換えられるんじゃないかな❓😮

No.168🔹対決⑪

あれだけのオーラだ...❗❗

正真正銘全てをしぼり尽くしたんだろう

When you’re through with life

And all hope is lost

きみが全てを尽くして

目の前が真っ暗になったとしても

まだだね🩷

It’s so easy now

Cause you got friends you can trust

安心して

きみには信頼できる仲間がいる

カンペキに勝つ♣️

だろ?Con🩷

Hold out your hand

‘Cause right till the end

貴方の手を差し伸べてあげて

最後の最後まで

To Complete Victory

例えば、setupをこんなふうに変えてみましょう。

extensions/nvim-navbuddy.lua

require('nvim-navbuddy').setup {
  window = {
    size = { height = '40%', width = '100%' },
    position = { row = '96%', col = '50%' },
  },

  icons = {
    File = ' ',
    Module = ' ',
    Namespace = ' ',
    Package = ' ',
    Class = ' ',
    Method = ' ',
    Property = ' ',
    Field = ' ',
    Constructor = ' ',
    Enum = ' ',
    Interface = ' ',
    Function = ' ',
    Variable = ' ',
    Constant = ' ',
    String = ' ',
    Number = ' ',
    Boolean = ' ',
    Array = ' ',
    Object = ' ',
    Key = ' ',
    Null = ' ',
    EnumMember = ' ',
    Struct = ' ',
    Event = ' ',
    Operator = ' ',
    TypeParameter = ' ',
  },

  lsp = {
    auto_attach = true,
  },
}

ってやってみると...

nvim-navbuddy 3

だいぶ雰囲気が変わりました😉

window

windowに関してはわたしの好みでカスタマイズしてあります。

パラメータを見れば何が変わるのかなんて、大体想像つきますよね❗ sizepositionですもんね❗...説明は無くてもいいですよね😅

パーセンテージで指定するところがちょっとクセに見えるかも知れません。

icons

これはnvim-navicにもあったやつですね😉

わたしはVSCode likeなアイコンに変えてますが、当然しなくてもいいです。

お好みでどうぞ❗

Optional Features

まだ終わらない...❗

extensions/init.lua

  use {
    "SmiteshP/nvim-navbuddy",
    config = function() require 'extensions.nvim-navbuddy' end,
    requires = {
      'neovim/nvim-lspconfig', 'SmiteshP/nvim-navic', 'MunifTanjim/nui.nvim',
+     'numToStr/Comment.nvim', 'nvim-telescope/telescope.nvim',
    },
  }

Comment.nvim

⚡Smart and Powerful commenting plugin for neovim ⚡

⚡neovimのスマートでパワフルなコメントプラグイン ⚡

Comment.nvimも初登場です❗ですが今回はインストールするだけでOKです。

nvim-navbuddyから使用するだけであればsetupも必要ありません😉

Tip

とはいえ、本来はnvim-navbuddyを介さずに単体で動作するプラグインです。

今後このサイトで別途取り上げるかは未定ですが、ぜひ活用してみて❗

これを使うと何ができるかっていうと、例えば適当なところでcをぽちっとすると...😮

nvim-navbuddy&Comment

選択されている構文がまとめてコメントアウトできるんですね🌟

元に戻す場合も同じくcで出来ちゃいます😆

Telescope.nvim

Comment.nvimの時と同様に、nvim-navbuddyから今度はtをぽちっ❗

nvim-navbuddy&Telescope

なんだかすごそう❗

もうここまで来ると、正直わたしは使いこなせていません🤯

Tip

これもやっぱりTelescopeのサイズを変えたくなるんですけど、 その場合はnvim-navbuddysetupで、キーコンフィグを例えばこんなんとかするといいです🐱

local actions = require 'nvim-navbuddy.actions'

require('nvim-navbuddy').setup {

  -- (中略)

  mappings = {
    ['t'] = actions.telescope {
      layout_config = {
        height = 0.40,
        width = 0.90,
        prompt_position = 'top',
        preview_width = 0.70,
      },
      layout_strategy = 'horizontal',
    },
  },

  -- (中略)

}

Similarly for other languages

今回は全てluaで話を進めてしまっていますが、これに限らずLSPさえ動いていれば割となんでもいけるクチです。

markdown

Note

上のスクリーンショットは、Markdownに対してmarksmanが動いてます。これもやっぱりmasonからインストールしてます😉

行こうみんなで「marksman」🎶2

I'll take you all.

ちょこっとだけ触れるだけのつもりが、結構ガッツリ触れちゃいました😋

みんなの力があったからだよ。

全員(チーム) の勝利ってやつさ🩷 3

さらっといいことも言います🤫

という事で、やっと書き終わりました。あーお腹すいたー...。

お台場青海地区P区画4で"肉フェス"やってるんだって...、喰いたい🍖

って、お話が迷子😿 ...あ、いつも通りでした😹

Friends will be friends 5

友達は いつまでも友達

Success

今日も頑張ったね、おつかれさま❗

それでは楽しいゴールデンウィークを🤗