deocomplete-dictionaryを用いたAWSサービス名typo対策

typoが発生しがちなAWSサービス名について、手堅くtypo回避できる方法を検討してみました。
2019.08.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSのサービス名はtypoの宝庫です。見かける例として以下の通り。

  • (正)Amazon Lambda → (誤)Amazon Lamda
  • (正)Step Functions → (誤)StepFunction

なお、弊社にはtypo警察が常駐しており、それらtypoを的確にお縄としています。

指摘による品質がよくなるのは良いことですが、できることならtypoしないほうがベターです。特に同じtypoを繰り返してると穴に入りたくなります。今回はneovim + dein + deoplete環境にてAWS特有のtypoを防止する方法の一例をまとめてみました。

deocomplete-dictionary

deocomplete.vimの機能を用いるプラグインを利用します。指定したファイルの中身を補完候補に追加することができます

deoplete-plugins/deoplete-dictionary: deoplete source for dictionary

Readmeがあっさり目で使い方に戸惑いましたが、慣れてしまえばどうということはありません。

dein.toml

今回の辞書ファイルは~/.config/nvim/awsに設置しているとします。

[[plugins]]
repo = 'deoplete-plugins/deoplete-dictionary'
hook_add = '''
    setlocal dictionary+=expand('~/.config/nvim/aws')
    call deoplete#custom#source(
    \ 'dictionary', 'matchers', ['matcher_head'])
'''

先頭一致で問題ないため、matcher_head指定です。

補完用辞書の中身

単語を一行に一つ羅列します。辞書ファイルに拡張子は不要です。

Amazon EC2
Amazon RDS
Amazon Lambda

ただ、100以上のサービスが存在するため、以下の記事にあるような一覧取得がお薦めです。なお、完了まで少し時間がかかります。

% aws ssm get-parameters-by-path --path '/aws/service/global-infrastructure/services' --recursive --output json \         [~/Documents/DevelopersIO]
  | jq -r '.Parameters[] | select(.Name | endswith("longName")) | .Value' \
  | sort > ~/.config/nvim/aws

AWS Systems Manager パラメーターストアを利用してAWSサービス一覧を取得してみる

補完動作

2文字程タイピングすると候補が出てくるはずです。

候補が出てこない場合は

:call deoplete#enable()

のコマンドを実行してから再度タイピングしてみましょう。

辞書を複数追加する場合

dictonaryに追加する形で定義します。

    setlocal dictionary+=expand('~/.config/nvim/<source_file>')
    setlocal dictionary+=expand('~/.config/nvim/<source_file2>')

あとがき

deocomplete-dictionaryについては具体的な記事が見つかりづらいこともあり、試行錯誤しつつも使うことを諦める一歩手前の状態でした。補完のスタイルについてはdeoplete.vimのドキュメントに記載されているため、詳細を知りたい場合は参照してください。

deoplete.nvim/deoplete.txt at master · Shougo/deoplete.nvim