24

Nodejs CLI アプリにタブ補完を追加したい (タブ補完を動的に生成することが望ましい)。

いくつかの npm モジュールを見つけましたが、実際にそれらを実装する方法がわかりません:

https://github.com/hij1nx/complete

https://github.com/mklabs/node-tabtab

だから私が探しているのは、次のようなnodejsファイルを持つことができるようにすることです:

my-cmd create arg1 arg2

しかし、次のようにオートコンプリートしたい場合があります。

my-cmd cr<tab> -> create

ありがとう!

4

4 に答える 4

5

編集 - 迅速な回答

答えた後、タブタブのソースを少し読み続けたところ、実行できることに気付きました

 pkgname completion install 

完成品を取り付けます。私の環境はすでに汚れていたので、実際に何かをしたかどうかはわかりませんが、私にはそう思われます..

より長い答え

@CameronLittle は素晴らしいドキュメントを提供してくれました。

せっかちな場合は、実行することから始めることができます

sudo bash -c 'pkgname completion > /etc/bash_completion.d/pkgname'
source /etc/bash_completion.d/pkgname

これにより、現在の bash セッションに補完が追加されます。

私の知る限り、新しいセッションは自動的に完了します。

ユーザーにとってプロセスをシームレスにするために、package.jsonでinstallおよびフックを使用できます。postinstall

https://docs.npmjs.com/misc/scripts

デフォルトでは何も印刷しないようにしてください。実行するpkgnameと出力が得られないことを意味します。そうでない場合は機能しません。

重要!tabtab をマスターからのみインストールする

tabtab には、master で解決されたがリリースには至らなかった厄介なバグがあるようです..

これを修正するための関連するコミットは次のとおりです :

で始まる文字列の補完を処理します--

コミットは 2014 年 2 月からですが、最新リリース (2015 年 1 月) は 2014 年 1 月から 0.0.2 です。これ以上のリリースはないと思います。

したがって、この修正を取得したい場合は (!)、master からのみ tabtab をインストールしてください。

私のようにあなたが間違ったことを理解するために2時間を無駄にしないでください:)

どうやってこの答えにたどり着いたのですか?TL;DR

@CameronLittle の回答は舞台裏の説明を提供していますが、回答に到達する方法を説明したいと思います。

tabtabインストールに関する明示的なセクションがあるパッケージを使用してみました。https://www.npmjs.com/package/tabtab#completion-installを参照してください

しかし、それは私にはうまくいかないようでした。

彼らが追加するように指示するコードを見ると、次のようprocess.argv.slice(2)[0] === 'completion'にコマンドpkgname completionを実行したことがわかります。これは、で始まる何かを出力します

###-begin-pkgname-completion-###
### credits to npm, this file is coming directly from isaacs/npm repo
#
# Just testing for now. (trying to learn this cool stuff)
#
# npm command completion script
#
# Installation: pkgname completion >> ~/.bashrc  (or ~/.zshrc)
#

その言葉this file is coming directly from isaacs/npm repoは私をさらに驚かせました。ここで他の回答に続いて、私は /etc/bash_completion.d/npm を見ました - これはまったく同じ内容を示していました..そしてコメント。

走ることにしました

pkgname completion > /etc/bash_completion.d/pkgname

ただし、sudo権限が必要なため、

sudo bash -c "pkgname completion > /etc/bash_completion.d/pkgname

そして、それを現在のbashセッションに適用するために、実行する必要がありました

 source /etc/bash_completion.d/pkgname

そして出来上がり!できます!

別の端末を開こうとしたときも機能したので、すべてのユーザーに適用されると思います。そうでない場合は、.bashrc などに追加する必要があります。

于 2015-01-15T20:27:33.217 に答える
4

コマンドとオプションの bash 補完ショートカットを有効にするnpm パッケージ yargsがあることを付け加えたいと思い ます。

.bashrc 完了スクリプトを出力するオプションがあります。次に、生成されたスクリプトを取得することで、Bash 補完が有効になります。

現在、npm で積極的に管理されているパッケージであり、1 か月に 100 万回以上ダウンロードされています。

于 2015-05-23T10:13:28.737 に答える
2

@Joeが言ったように、これはユーザーのシェルが提供するものです。bash の場合、基本的には、プログラムの名前を入力した後にユーザーがタブ移動したときに実行される関数を作成して登録します。この関数は、オートコンプリートに使用できる文字列を返します。

イントロについては、このチュートリアルを参照してください

http://www.debian-administration.org/article/316/An_introduction_to_bash_completion_part_1

この例も気に入っています。単純で、何を行う必要があるかを示しているからです。これは、python ツール ファブリック用です。

https://raw.githubusercontent.com/marcelor/fabric-bash-autocompletion/master/fab

于 2014-11-20T00:48:05.487 に答える