🌕

Neovimで{}内を展開する

2023/05/06に公開

はじめに

はじめましてyahomiです。
Neovimでの設定ファイル編集や日々の業務で{}内を展開したい欲が高まっていたのですが、デフォルトで提供されている方法では(調べた限り)実現できなかったので特定キーにマッピングしてみることにしました。

どうなるの?

const obj = { hoge: "aaa", fuga: "bbb", piyo: "ccc" };

これが

const obj = {
hoge: "aaa",
fuga: "bbb",
piyo: "ccc"
};

こうなる。

設定例

展開したい{}がある行を選択して「z + j」を押すことで、{}内を展開します。

vim.api.nvim_set_keymap('v', 'zj', ":s/\\({\\zs\\s\\|,\\zs\\s\\|\\s\\ze\\}\\)/\\r/g<CR>", { noremap = true })

ちょっと解説

vim.api.nvim_set_keymap('[モード]', '[割り当てるキー]', '[実行内容]', [option])
  • [モード]ではマッピングしたキーをどのモードで適応させるかを設定します。
    • 今回はVisualモードで適応したいので「v」に設定
  • [割り当てるキー]では実際に入力するキーを設定します。
    • 今回は「zj」に設定
  • [実行内容]では実行したい内容を設定します。
    • 今回は以下の文字を改行コード(\\r)に置換しています。
      (\が2つ続いているのは文字としての\をエスケープさせるため)
      • 「{」直後の空白文字
        {\\zs\\s
      • 「,」直後の空白文字
        ,\\zs\\s
      • 「}」直前の空白文字
        \\s\\ze\\}
  • [option]ではマッピングのオプションを設定します。
    • 今回はnoremapをtrueに設定して、再起的に呼び出されるのを防いでいます。

参考

Getting started using Lua in Neovim(日本語版)
pattern - Vim日本語ドキュメント

Discussion