💤 lazy.nvim

When I wake up early in the morning

Lift my head, I’m still yawning

朝早く目が覚めると

頭を上げても、あくびが止まらない

もう9月の下旬なんですが、気温が思っているほど下がりません...🥵

まあそれでも、8月に比べたら多少は涼しくなってきたので、ぐっすり眠れるようになってきました😴🙏

これなら💤 lazy.nvimへのお引越しも捗ります❗

lazy.nvim is a modern plugin manager for Neovim.

lazy.nvim は Neovim のモダンなプラグインマネージャーです。

始めてしまえば難しいことは何一つありません😉

ただ、それなりに物量はあるので、この節ではlazy.nvimセットアップ までを😌

そして次の節で、packer.nvimからlazy.nvimへの 移行 という二本立てでお送りします😪

✨ Features

新しいベッドは、とっても大きくて気持ちよさそうです🤗

  • 📦 Manage all your Neovim plugins with a powerful UI
  • 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules
  • 💾 Partial clones instead of shallow clones
  • 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings
  • ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away
  • 💪 Async execution for improved performance
  • 🛠️ No need to manually compile plugins
  • 🧪 Correct sequencing of dependencies
  • 📁 Configurable in multiple files
  • 📚 Generates helptags of the headings in README.md files for plugins that don't have vimdocs
  • 💻 Dev options and patterns for using local plugins
  • 📊 Profiling tools to optimize performance
  • 🔒 Lockfile lazy-lock.json to keep track of installed plugins
  • 🔎 Automatically check for updates
  • 📋 Commit, branch, tag, version, and full Semver support
  • 📈 Statusline component to see the number of pending updates
  • 🎨 Automatically lazy-loads colorschemes
  • 📦 強力なUIですべてのNeovimプラグインを管理
  • 🚀 Luaモジュールの自動キャッシュとバイトコードコンパイルによる高速起動
  • 💾 浅いクローンではなく部分的なクローン
  • 🔌 Lua モジュールの自動遅延ロード、イベント、コマンド、ファイルタイプ、キーマッピングの遅延ロード
  • ⏳ Neovim を起動する前に、不足しているプラグインを自動イン ストールし、すぐに使い始めることが可能
  • 💪 非同期実行によるパフォーマンスの向上
  • 🛠️ 手動でプラグインをコンパイルする必要なし
  • 🧪 依存関係の正しい順序付け
  • 📁 複数のファイルで設定可能
  • 📚 vimdocs を持たないプラグインのために README.md ファイルの見出しの helptag を生成する
  • 💻 ローカルプラグインを使用するための Dev オプションとパターン
  • 📊 パフォーマンスを最適化するためのプロファイリングツール
  • 🔒 インストールされたプラグインを追跡するlazy-lock.jsonファイル
  • 🔎 アップデートの自動チェック
  • 📋 コミット、ブランチ、タグ、バージョン、完全な Semver のサポート
  • 📈 Statusline コンポーネントで保留中のアップデートの数を表示
  • 🎨 自動的に colorschemes を遅延ロードする

おまけにふわふわ〜☁️

When I’m in the middle of a dream

Stay in bed, float up stream

夢の中にいるとき

ベッドに寝たまま、流れに身を任せる

⚡️ Requirements

こんなのはもう些細な要求ですね。

  • Neovim >= 0.8.0 (needs to be built with LuaJIT)
  • Git >= 2.19.0 (for partial clones support)
  • a Nerd Font (optional)

♻️ Evacuate the packer.nvim

lazy.nvimのインストールの前に、まずはpacker.nvimを退避しておきましょう❗

Note

次の項から順番に進めていきますが、インストールするプラグインのリストは次の節で使うので、早まって削除はしないで🥺

📋 extensions/init.lua

extensionsディレクトリにいるinit.luaを、packer.luaとでも名前を変えてあげるのがいいんじゃないかと思います。

extensions

mv init.lua packer.lua

そのままextensionsディレクトリに置いておいてもいいし、どこか他のディレクトリに逃がしてあげてもいいです。

あとは、このままでは次回のnvim起動時に「init.luaが無いぞー❗」って怒られてしまうので、 新しくからっぽのinit.luaを作成しておきましょう😉

extensions

touch init.lua

Note

これが無いと、~/.config/nvim/init.lua

require('extensions')

...が、怒ってしまうわけですね。

これでだいじょうぶ😆

📃 packer_compiled.lua

そこから上のディレクトリ、~/.config/nvimにあるplugin/packer_compiled.luaについても、 削除しておきましょう。

Note

こっちはextensions/packer.luaがあれば、すぐに復元できるので支障は無いはずです。

pluginディレクトリの中身がpacker_compiled.luaのみであれば、ディレクトリごと削除しちゃって構いません😉

Quote

rm -rf plugin
rm-packer_compiled

Warning

もし他にファイルが存在しているようなら気をつけて❗

この場合はpacker_compiled.luaだけを狙い撃ちしましょう。

rm plugin/packer_compiled.lua

📎 packer

さらにもう一箇所❗

cd ~/.local/share/nvim

これはもしかしたら環境によって変わるかもしれません。 あらかじめnvimからディレクトリを確認しておきましょう。

Quote

:echo stdpath("data")

Warning

もしflatpak使ってたりするとこんな path になるので❗

stdpath

で、このディレクトリを覗いてみるとsite/pack/packerディレクトリが存在するはずなので、 これも削除してしまって大丈夫です。

Tip

このディレクトリにはpacker.nvim本体も存在するので、 削除後、再びpacker.nvimを再度使用したい場合は、git cloneからやり直す必要があります。

慎重を期すのであれば、ディレクトリ名を変えるだけでも良いです。

packer-temp

まあ、こんなとこでしょう。

Please, don’t wake me, no, don’t shake me

Leave me where I am, I’m only sleeping1

お願い、起こさないで、いや、揺すらないで

僕のことは放っておいて、眠っているだけなんだ

それでは次項からlazy.nvimをセットアップしていきましょう😆

📦 Installation

packer.nvimの時にはあらかじめgit cloneで配置しておくように案内されていましたが、 lazy.nvimは以下のコードを入れておいてくれれば勝手にインストールしとくよ〜、と案内されています。

You can add the following Lua code to your init.lua to bootstrap lazy.nvim:

以下の Lua コードを init.lua に追加して、lazy.nvim を起動することができます:

早速、さっきtouchで作ったからっぽのinit.luaに入れてあげましょう❗

extensions/init.lua

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", -- latest stable release
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

extensions/init.lua

一緒にこれも❗一番後ろに❗

require("lazy").setup()

そしたらnvim を一度終了して再度起動してみましょう😆

これだけでもう、コマンドからLazyを呼び出せるはずです❗

lazy-openn

Quote

:Lazy

まあ🤭 Poison☠️ 🩷

Everybody seems to think I’m lazy

みんな僕のことを怠け者だと思ってる

lazy-first

初心に帰れる、やさしい毒🤤

I don’t mind, I think they’re crazy

気にしないさ、彼らこそ狂ってる

👩‍⚕️ checkhealth

Info

ℹ️ It is recommended to run :checkhealth lazy after installation.

インストール後、:checkhealth lazyを実行することを推奨します。

...とのことなのでやっておきましょう。:cheでも同じです😋

Quote

:che lazy
lazy-checkhealth

はい、オールグリーン😉

🔌 Plugin Spec

で、lazy.nvimも色々と設定があるわけなんですが、数が多いので参照だけ示します。

PropertyTypeDescription
.........

これまでpackerで使っていたものをどうやって移行するかについては、 📦 Migration Guide が用意されています❗

冒頭でも触れましたが、移行は次の節で触れることにして、まずは基盤を作っていく流れにします😴

Running everywhere at such a speed

Till they find there’s no need

こんなスピードでどこまでも走る

必要ないとわかるまで

⚙️ Configuration

lazy.nvim comes with the following defaults:

lazy.nvim のデフォルトは以下の通りです:

わたしもまだ使い始めて日が浅いので、深く見つめたわけではありません。

ただ、なんか一個すごい興味惹かれるやつありますね🤩

📊 performance

こういうの大好き❗

defaults

{
  performance = {
    cache = {
      enabled = true,
    },
    reset_packpath = true, -- reset the package path to improve startup time
    rtp = {
      reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory
      ---@type string[]
      paths = {}, -- add any custom paths here that you want to includes in the rtp
      ---@type string[] list any plugins you want to disable here
      disabled_plugins = {
        -- "gzip",
        -- "matchit",
        -- "matchparen",
        -- "netrwPlugin",
        -- "tarPlugin",
        -- "tohtml",
        -- "tutor",
        -- "zipPlugin",
      },
    },
  },
}

🔸 rtp

やあん🥱

Keeping an eye on the world going by my window 2

Taking my time

窓の外を行き交う世界を見続ける

時間をかけて

🔹disabled_plugins

Info

list any plugins you want to disable here

無効にしたいプラグインをここに列挙する

コメントアウトされているものをいくつか外してみましょう❗

extensions/init.lua

local opts = {
  performance = {
    rtp = {
      disabled_plugins = {
        'gzip',
        'matchit',
        --'matchparen',
        --'netrwPlugin',
        'tarPlugin',
        'tohtml',
        'tutor',
        'zipPlugin',
      },
    },
  },
}

わたしは以下の2つをコメントアウトのままにしています。

Note

disabledをコメントアウトしたままにするので、enabledのままにするってことですね。

...説明がややこしいですね😮

◽matchparen

人によっては不要だと思うかもしれませんが、わたしはこれ好きなんですよね〜😆

custom_highlights でカスタマイズしているぐらいなので❗

◽netrwPlugin

これは「nvim-treeを使う場合は無効化しといてね」でお馴染みの netrw です😉

もうすでに無効化するコードが入っているので、ここでは必要はないかな〜っていう考え方です。

まあ、どっちで無効化してもへーきなんじゃないかな⁉️

🧪 vim.loader

もう一個だけやっておきましょう🐱

少し古いニュースを引っ張り出しますが😅

news-0.9

• Added a new experimental vim.loader that byte-compiles and caches Lua files. To enable the new loader, add the following at the top of your init.lua

Luaファイルをバイトコンパイルしてキャッシュする新しい実験的なvim.loaderを追加。 この新しいローダーを有効にするには、init.luaの先頭に以下を追加します。

vim.loader.enable()

これはもう素直に、トップのトップに追加しておきましょう😌

~/.config/nvim/init.lua

vim.loader.enable()

:h vim.loader.enable()

vim.loader.enable()                                      vim.loader.enable()
  Enables the experimental Lua module loader:
  実験的な Lua モジュールローダーを有効にする:

  • overrides loadfile
    loadfile を上書きします。

  • adds the Lua loader using the byte-compilation cache
    バイトコンパイルキャッシュを使用する Lua ローダーを追加します。

  • adds the libs loader
    libs ローダーを追加します。

  • removes the default Nvim loader
    デフォルトの Nvim ローダーを削除

Tip

もし "実験的な機能" は嫌だーってなるのであれば、これはスキップしても問題ない😗 ...とは思うんですが...。

feat(lua): add vim.loader #22668

これをうっすら見た感じ、入れておくとlazy.nvimNeovimとの親和性が上がりそうな気はします🫶

Please, don't spoil my day, I'm miles away

And after all, I'm only sleeping

お願い、一日を台無しにしないで、僕はぼんやりしてる

やっぱり、僕は眠っているだけなんだ

😴 Waiting for a sleepy feeling

これだけやれば、ぐっすり眠る準備はバッチリでしょう😉

次回はMigration Guideに従ってpackerからの完全移行を目指します❗

Success

Lying there and staring at the ceiling

Waiting for a sleepy feeling3

横たわり天井を見つめる

眠気を待つんだ