nvim_create_augroup

うん。まず何よりもはっきりさせておきたいのは、auというのはautocmdの先頭2文字からきているようですね。

いや、なんか...、どうしても三太郎CMを思い浮かべてしまうので...🍑

...え❓ わたしだけ😧⁉️ 絶対嘘だ❗

:h nvim_create_augroup

nvim_create_augroup({name}, {*opts})
  Create or get an autocommand group |autocmd-groups|.
  オートコマンドグループを作成または取得する。

  Parameters:
    • {name}  String: The name of the group
                      グループの名前

    • {opts}  Dictionary Parameters
              • clear (bool) optional: defaults to true. Clear existing
                commands if the group already exists |autocmd-groups|.

                デフォルトはtrue。グループが既に存在する場合、そのコマンドをクリアする。

  Return:
    Integer id of the created group.
    作成されたグループの整数値 ID

  See also:
    |autocmd-groups|

See alsoって言われてるんで見ておきましょう😺

:h autocmd-groups

Autocommands can be put together in a group.
This is useful for removing or executing a group of autocommands.

オートコマンドは、グループとしてまとめることができる。
これは、オートコマンドのグループを削除したり実行したりするのに便利。

augroup

オートコマンドは以下で確認できます。まずは現状を確認します😌

Quote

:aug

または

:augroup
augroup-before

こんな感じですね😌

グループID

それでは話を進めるんですが、さっきのヘルプ中に、コードが例示されていましたね。

:h nvim_create_augroup

To get an existing group id, do:
既存のグループ ID を取得するには、次のようにする。

  local id = vim.api.nvim_create_augroup("MyGroup", {
      clear = false
  })

"既存の"って言われると、「なんで😮❓」ってなるんですけど、 "オートコマンドグループを作成または取得する。"という最初の文言を信じることにしましょう。create_augroupなんだし❗

パラメータはnameには自分で決めたグループ名を、optsは...。更に話が長くなっちゃうんで空っぽ(デフォルト)にしときましょう。

Note

optsclearオプションを含んでいますが、 「なんでわざわざaugroup作らなきゃダメなの❓」っていう疑問と密接な関係がありそうです。

なんとな〜く察するに、「二重登録を防ぐためにある程度まとめて制御できた方がいいでしょ❓」的なことらしいんですが...、 わたしはいまひとつわかってません❗

ちなみにclearのデフォルト値はtrueなので安全は担保されてます。(意味を理解していれば、なんでしょうけどね😅)

ってことで、こんな感じのコードになるのかな。

グループの命名規則がわかりませんが、とりあえず雰囲気で...🤫

local id = vim.api.nvim_create_augroup("buffer_set_options", {})

これをnvim_create_autocmdに組み込むので、もう一回ヘルプを確認します。

:h nvim_create_autocmd

• {opts} Dictionary of autocommand options:
  • group (string|integer) optional: the autocommand group name or id to match against.
    マッチするオートコマンドグループ名または ID。

nvim_create_augroupが返してくれるIDをそのまま渡せば良さそうですね。

実践

じゃあ、こんな感じでどうかな😆

options.lua

-- local to buffer options:
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWinEnter' }, {
  pattern = '*',

  -- groupを追加する
  group = vim.api.nvim_create_augroup('buffer_set_options', {}),

  callback = function()
    vim.api.nvim_buf_set_option(0, 'expandtab', true)
    vim.api.nvim_buf_set_option(0, 'tabstop', 2)
    vim.api.nvim_buf_set_option(0, 'shiftwidth', 0)
  end,
})
augroup-after

buffer_set_optionsの姿を確認できましたね❗これでもう完璧です😆

Note

実はわたし、autocmdとか今まで全く触ってきてなくて、ず〜っと

-- なぜかうまく行く呪文 (2つ目以降のbufferもへーき)
vim.opt.tabstop = 2

とかして誤魔化してたんです。

でも、この辺りのページを作るにあたって考え直して、ようやく見栄えのするコードに辿り着けたので、なんかホッとしてます☺️

(...公開後に思いっきり書き直してますけどね😅 ここほんと怖い...。)

Success

つよい トレーナーに なったな❗

おまえが nvim チャンピオン

をめざす❗ といっても

だれも わらわない❗ おうえんするぜ