mason.nvim

Once upon a time, not so long ago

むかしむかし、と言ってもそう遠くない

さて、前回はnvim-lspconfigのセットアップを行いました。 Protocolは既に扱えるようになっているのですが、まだこの言葉で会話のできる相手がいません…😱

うぅ…欲しい…お友達欲しい…😭 彼氏彼女欲しい…🥹

…。

そうだ💡mason.nvimに登場してもらいましょう❗

Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.

Neovimが動作する場所ならどこでも動作する、Neovim のポータブルパッケージマネージャです。 LSPサーバー、DAPサーバー、リンター、フォーマッターを簡単にインストール、管理することができます。

:help mason.nvim

言語関連機能に特化した “パッケージマネージャ” です。

これさえあれば、お友達だろうと彼氏彼女だろうと、もう作り放題です❗

Tommy used to work on the docks

Union’s been on strike, he’s down on his luck

トミーは埠頭で働いていた

労働組合のストライキで、彼はツキに見放された

It’s tough

So tough

辛かった

とても辛かった

Introduction

いつも通り順番に読み進めて行きます。

Packages are installed in Neovim’s :h stdpath by default. Executables are linked to a single bin/ directory, which mason.nvim will add to the Neovim’s PATH during setup, allowing easy access for the builtin shell/terminal as well as other 3rd party plugins.

パッケージは、デフォルトでNeovimの :h stdpath にインストールされます。 実行可能ファイルは bin/ ディレクトリにリンクされ、セットアップ時に mason.nvim が Neovim の PATH に追加するので、 内蔵のシェル/ターミナルやその他のサードパーティプラグインに簡単にアクセスできるようになります。

For a list of all available packages, see PACKAGES.md.

利用可能なすべてのパッケージの一覧は、PACKAGES.mdを参照してください。

こう言われてるんで、stdpathのヘルプとPACKAGES.mdも見てみましょう。

:h stdpath

stdpath({what})					stdpath() E6100
  Returns |standard-path| locations of various default files and
  directories.

  様々なデフォルトのファイルやディレクトリの標準的なパス位置を返す.

  {what}       Type    Description
  cache        String  Cache directory: arbitrary temporary
                       storage for plugins, etc.
  config       String  User configuration directory. |init.vim|
                       is stored here.
  config_dirs  List    Other configuration directories.
  data         String  User data directory.
  data_dirs    List    Other data directories.
  log          String  Logs directory (for use by plugins too).
  run          String  Run directory: temporary, local storage
                       for sockets, named pipes, etc.
  state        String  Session state directory: storage for file
                       drafts, swap, undo, |shada|.

  Example:
    :echo stdpath("config")

Mason Package Index

まあ、言ってることはわかりますよね。わかるんですけど…。

少しフライングしちゃうんですが、わたしの環境では、インストールしたパッケージは~/.local/share/nvim/masonに配置されていきます。

mason-install-path

Question

普段使っているmacOSでも同じなんですけど…、stdpathにある?これ😑

Gina works the diner all day

Workin’ for her man, she brings home her pay

ジーナは一日中食堂で働いている

彼のために働いて、稼いだ給料を家に持ち帰る

For love

Mm, for love

愛のために

そう、愛のために

Requirements

[:h mason-requirements][help-mason-requirements]

mason.nvim relaxes the minimum requirements by attempting multiple different utilities (for example, wget, curl, and Invoke-WebRequest are all perfect substitutes). The minimum recommended requirements are:

mason.nvimは、複数の異なるユーティリティを試すことで、最小要件を緩和しています。 (例えば、wget、curl、Invoke-WebRequestはすべて完璧な代用品です)。 最低限推奨される要件は以下の通りです:

  • neovim >= 0.10.0
  • For Unix systems:
    • git(1)
    • curl(1) or GNU wget(1)
    • unzip(1)
    • GNU tar (tar(1) or gtar(1) depending on platform)
    • gzip(1)
  • For Windows systems:

Note that mason.nvim will regularly shell out to external package managers, such as cargo and npm. Depending on your personal usage, some of these will also need to be installed. Refer to :checkhealth mason for a full list.

mason.nvim は定期的に cargo や npm などの外部パッケージマネージャにシェルアウトすることに留意してください。 使い方によっては、これらのパッケージもインストールする必要があります。全リストは :checkhealth mason を参照してください。

これもやっぱりcheckhealthを確認しておきましょう。

Quote

:che mason
checkhealth

よほどの言語プロフェッショナルでもない限り、たくさんのWARNINGが出てきちゃうと思いますが、 使っていない言語環境が入っていないのは「そりゃそうだー」としかならないので、気にしなくていいやつです😉

ここでは、「全リストを見ておきたい」ってだけなので❗

gitはmason.nvimが動いている時点で大丈夫だと思いますが、curl、tarあたりがOKになっていればひとまずは大丈夫…な、はず。

このあたりが欠けている場合であっても、brewだったり、apt・dnfを使えばすぐにインストールできるはずです。

Warning

ごめんなさい、毎度のことながらWindowsはわたしがわかってないので触れられません… 😿

Note

例えば「JavaScriptやりたいからtypescript-language-serverほしいなー😆」ってなったとするじゃないですか。

mason-failed

mason.nvimはtypescript-language-serverのインストールにnpmを使用するんですね。

でも、もしnpmがまだインストールされていない状態でそれをやろうとしても、

mason-failed
spawn: npm failed with exit code - and signal -. npm is not executable

って言われちゃいます。まあ、わかってる人からすればこれも「そりゃそうだー」ではあるんですが、

「npmってなんやねん❗」とか 「node.jsをやろーゆーとんちゃうねん❗」とか 「ていうかTypeScript…❓Jav…、あれえー⁉️😱」ってなっちゃうかもしれません。

この辺りはある程度の経験値が必要になって来ると思うので、 躓いちゃったら周りの人に聞いてみましょう😉

She says, “We’ve gotta hold on to what we’ve got”

彼女は言う “私達は今あるものに しがみつくしかないの”

It doesn’t make a difference if we make it or not

上手くいっても いかなくても 違いなんてそんなにないよ

We’ve got each other and that’s a lot for love

We’ll give it a shot

二人一緒なんだもの、それだけで十分じゃない

とにかくやってみましょう

Setup

これもすごい簡単です。 わたしの場合はささやかな変更だけしていますが、しなくても全然平気です。

extensions/mason.lua

require('mason').setup {
  ui = {
    check_outdated_packages_on_open = false,
    border = 'single',
  },
}

Tip

特に設定を変更しない場合も、以下の一文は必要になります。

require('mason').setup()

簡単に書くと、以下のようなものです。

check_outdated_packages_on_open

falseにしておくと、masonのウィンドウを開いた時に新しいバージョンを自動で確認しなくなります。

border

UI ウィンドウに使用するボーダーを指定します。 nvim_open_win() と同じボーダー値を使用することができます。

なので、singleにしておくと、packerと統一感が出ていいかも〜😆

Install

そしたら、packerでのインストールもシンプル😉

extensions/init.lua

use {
  'williamboman/mason.nvim',
  config = function() require 'extensions.mason' end,
}

Woah, we’re halfway there

Woah-oh, livin’ on a prayer

私達はまだ道半ば

縋ってでも 生きていくの

Mason Window

ここまで出来れば、いつも通り:PackerSyncとかした後に

:Mason

ってするだけですね😆

mason-window

このウィンドウでの操作は、デフォルトで以下のようになっています。

keymaps = {
  -- Keymap to expand a package
  toggle_package_expand = "<CR>",
  -- Keymap to install the package under the current cursor position
  install_package = "i",
  -- Keymap to reinstall/update the package under the current cursor position
  update_package = "u",
  -- Keymap to check for new version for the package under the current cursor position
  check_package_version = "c",
  -- Keymap to update all installed packages
  update_all_packages = "U",
  -- Keymap to check which installed packages are outdated
  check_outdated_packages = "C",
  -- Keymap to uninstall a package
  uninstall_package = "X",
  -- Keymap to cancel a package installation
  cancel_installation = "<C-c>",
  -- Keymap to apply language filter
  apply_language_filter = "<C-f>",
},

要はこうですね😌

key description
return カーソル位置のパッケージ情報を開く
i カーソル位置のパッケージをインストールする
u カーソル位置のパッケージを再インストール/アップデートする
c カーソル位置のパッケージの新バージョンをチェックする。
U インストールされているすべてのパッケージの更新
C インストールされているパッケージのうち、どのパッケージが古くなっているかを確認する
X カーソル位置のパッケージをアンインストールする
Ctrl-C パッケージのインストールをキャンセルする
Ctrl-f 適用言語フィルタ

基本的にはiでインストールしたものをCUで更新管理するっていう使い方でいいと思います。

Install the Server Protocol

お待たせしました。初めてのお友達作りです。

初めてのお友達はやっぱりluaの Language Server❗キミに決めた😆

やり方は色々あると思うんですが、わたしはとりあえず検索からジャンプしちゃいます。

/lua
install-1

一応、情報を確認しておきましょう。lua-language-serverにカーソルが合ってるのを確認してreturn❗

install-2

対応するlanguagesはluaで、categoriesはLSPですね❗

これはぜひお友達になりたいと思うので、iをぽちっとな。

一番上に戻ってみると…❓

install-3

Installedのリストにlua-language-serverが加わりました❗もうお友達❗❗

つかまえたお友達は図鑑に登録されます。

なので、→にカーソルを合わせてreturnでさらに詳しい情報が見られます。

install-4

Livin’ on a Prayer

これでようやく会話のできるお友達をゲットだぜ❗😆

…と思いきや、まだ何も話してくれません。

ちょっと捕まえ方が強引だったかな…🫨 それとも照れ屋さんなのかな❓😮

Success

どうやら心を開いてもらって会話をするためには、もう1ステップ必要みたいですね。

ってことで、次回に続く… 🦖

Take my hand, we’ll make it, I swear

Woah-oh, livin’ on a prayer

私の手を握ってよ 絶対にできる 約束するよ

祈りに縋ってでも 生きていくの

Tommy's got his six-string in hock

now he’s holdin’ in, when he used to make it talk

トミーは 6弦ギターを質に入れてしまった

それは彼にとって掛け替えのないものだったのに…

So tough

Ooh, it’s tough

辛かった

とても辛かった

Gina dreams of runnin' away

わたしはこんな現実から逃げ出したくなってしまう

When she cries in the night, Tommy whispers

夜、泣いていたら 彼は優しく寄り添った

"Baby, it's okay

“ジーナ、俺は平気だ

Someday"

いつの日か…“

We've gotta hold on to what we've got

俺達は 今あるものに しがみつくしかない

It doesn't make a difference if we make it or not

上手くいっても いかなくても そんなことはどうでもいいんだ

We've got each other and that's a lot for love

We’ll give it a shot

二人一緒なんだから それで十分さ

とにかくやってみよう

Woah, we’re halfway there

Woah-oh, livin’ on a prayer

俺達はもう半ばまで来れたんだ

縋ってでも 生き続けよう

Take my hand, we’ll make it, I swear

Woah-oh, livin’ on a prayer

手を握ってほしい 絶対に乗り越えられる 誓ってやるさ

祈りに縋ってでも 生き続けよう

livin’ on a prayer
Ooh, we gotta hold on, ready or not

You live for the fight when that’s all that you’ve got

しがみつくんだ、なんの準備もしていなくても

それしか残っていないのなら 信じて立ち向かうんだ