2020/02/09

neovim + deoplete で kebab-case の補完をする

kebab-case(単語をハイフンで区切る) は snake_case や camelCase に比べ、比較的使われていないと思います。
ですが、 apt-get や docker-compose を打っていると少し利点を感じました。
  • 「Shift Key を押さなくて良い」
怠惰な私にとって採用理由として十分。なので zsh で使う function は kebab-case で記述しています

さて、ここで小さな問題が発生しました。
neovim で利用している補完プラグインの deoplete が、default の設定では kebab-case を補完してくれない。
と、いうことで kebab-case も補完対象にするように設定したログです。


環境

  • OS: macOS Mojave 10.14.6
  • zsh: 5.7.1 (x86_64-apple-darwin18.2.0)
  • neovim: v0.4.3
  • deoplete: master(記事執筆時 6e01000280)
  • Python: 3.7.6
  • pynvim: 0.4.1


補完の設定

まず、補完の対象を設定する変数などが無いか、:help deoplete で探します。
ありました。keyword_patterns で filetype 別に正規表現を指定すれば良さそうです。
というか ruby の補完サンプルもありますね。末尾の ! や ? に対応している。便利そう。

話が逸れました。まず、kebab-case にマッチしそうな正規表現として
  • 最初の文字は alphabet と '_'
  • それ以降は alpabet と '_' と '-' が0回以上繰り返される
とします。これを具体的な正規表現にすると
  • [a-zA-Z_][a-zA-Z_-]*
で良さそうです。これを filetype zsh の補完に設定します。
何故 sh でなく zsh かと言うと、 sh では kebab-case のfunction が定義できない為です。

設定後、きちんと補完されるようになりました。良し良し。




おまけ(他の定義とか)

これで deoplete の補完対象の設定ができるようになりました。
zsh 以外の普段良く使う filetype の補完設定もしておきます。
  • ruby: 先程発見した ruby の補完設定で、先頭に '@' を加えたもの
  • text: 英数字も含めて補完対象を広めにしたもの
  • _: help にあった定義をそのまま利用。なお、この設定は全 filetype に適用されます
これらを鑑みて設定した、私用の具体的な keyword_patterns の設定はこんな感じ。以下抜粋。