CLIでタブ補完をしようとすると"_values:compvalues:11: not enough arguments" と表示されてしまうケース

myuser@MyMacBookPro ~ % nova index|↦
_values:compvalues:11: not enough arguments

myuser@MyMacBookPro ~ % nova index|

これはZSHシェルに組み込まれている補完機能とnova CLIツールとがコンフリクトしている場合に起こります。

なぜ起こるのか

調査の結果恐らく、Oh-My-ZSH フレームワークをZSHシェルと共に使用した場合に起こります。

ZSHは、将来インストールされるであろうコマンドのための補完機能が組み込まれています。このうちの一つはウェブプラットフォームのOpenStackスイート用サブコマンドopenstack novaで、OpenStack Computeプラットフォーム(novaという名前で知られているもの)のためのものです。

これに対応するため、Novaはnovaツールと共に、/usr/local/share/zsh/site-functionsディレクトリにZSH補完機能用追加ファイルをインストールします。このファイルはZSHにOpenStackツールがインストールされているかどうかを確認するよう指示します。インストールされていない場合は常に、novaコマンド内で補完する際にコマンドラインツールを使用します。インストールされている場合はZSHによってどのようにするかが尋ねられます。

またZSHはシェルをできるだけ高速にするため、_事前計算(pre-compute)_しようとします。そのため、Oh-My-ZSHがインストールされる前に構築された事前計算された補完がZSH .zcompdumpファイルで構文エラーを引き起こす場合があります。これによりZSHのための補完用追加ファイルが参照されず、常にこの問題が発生してしまいます。

解決するには

最も簡単な方法は、ホームディレクトリからZSH補完ファイルのキャッシュを削除することです。これらは隠しファイルで、.zcompdumpで始まるファイル名を持っています。キャッシュをクリアすることで必要に応じて再構築され、novaツールが適切に含まれるようになります。

以下の状況ではこのキャッシュクリアが効果的です:

  • novaのインストール直前直後にOh-My-ZSHがインストールされたケース
  • Oh-My-ZSHのインストール直後にnovaが既にインストールされているケース

キャッシュファイルは通常、ユーザが編集することを意図していない補完機能のためのキャッシュであり、削除しても問題ありません。

これらのファイルはターミナルコマンド: rm ~/.zcompdump* でも削除可能です。

最終更新日: 2020年10月13日