fish shellでaws-cliのコマンド補完

fish shellでaws cliのコマンド補完を設定してみたので設定方法を紹介したいと思います。

環境

Mac Sierra
fish 2.2.0

設定方法

bashzshについては以下の公式で設定方法が紹介されているのですがfishはありませんでした。
docs.aws.amazon.com

色々調べたところ以下をfishのconfig(~/.config/fish/config.fish)に設定することでコマンド補完ができます。

 complete -c aws -f -a '(begin; set -lx COMP_SHELL fish; set -lx COMP_LINE (commandline); /usr/local/bin/aws_completer; end)'

設定後にテストを行ったところ、以下のように補完候補の末尾に何故かバックスラッシュ(\)がセットされてしまいました。

> ~ aws  acm\                                                         
acm\                       ecs\                            mobile\
alexaforbusiness\          efs\                            mq\
apigateway\                elasticache\                    mturk\
application-autoscaling\   elasticbeanstalk\               opsworks\
appstream\                 elastictranscoder\              opsworks-cm
appsync\                   elb\                            organizations\
athena\                    elbv2\                          pinpoint\
autoscaling\               emr\                            polly\

そのため、補完はされるのですが、このまま実行してもエラーになるので、いちいちバックスラッシュを消す必要があります。
これではせっかく補完されてもあまり嬉しくないので、回避策がないかさらに調べてみました。

以下のとおり補完プログラムを修正することで対応できました。
■修正ファイル
/usr/local/lib/python2.7/site-packages/awscli/completer.py(パスは環境にあわせてください)
■修正箇所

def complete(cmdline, point):
    choices = Completer().complete(cmdline, point)
    #print(' \n'.join(choices)) ← コメントアウト
    print('\n'.join(choices)) ←追加

なぜかスペースをバックスラッシュとして解釈してしまうようなのでスペースを削除します。

再度テストするとバックスラッシュが除去されています。

> ~ aws  acm
acm                       ecs                            mobile
alexaforbusiness          efs                            mq
apigateway                elasticache                    mturk
application-autoscaling   elasticbeanstalk               opsworks
appstream                 elastictranscoder              opsworks-cm
appsync                   elb                            organizations
athena                    elbv2                          pinpoint
autoscaling               emr                            polly

これで快適にコマンド補完できました。
ただし、残念なことにawscliのアップデートの度に修正が必要になりそうです。