私はReadlineモジュールを使ってNodeJSで簡単なCLIアプリケーションを作っています。私はユーザーの入力をオートコンプリートしたいです。このため、私はモジュールのautocompletion functionを使用しています:NodeJS readlineでいくつかの単語が自動補完される
function completer(line) {
const completions = '.help .error .exit .quit .q'.split(' ');
const hits = completions.filter((c) => c.startsWith(line));
// show all completions if none found
return [hits.length ? hits : completions, line];
}
この機能により、私は1つのコマンドを完了することができるよ同じ行に複数のコマンドがない:
例えば:
(CLI App) > .e<tab>
.error .exit
(CLI App) > .err<tab>
(CLI App) > .error
(CLI App) > .error .ex<tab>
.help .error .exit .quit .q
は、私は、ユーザーが書いている現在のコマンドの唯一のオートコンプリート機能の提案を取得するためのcompleter関数を変更:
function completer(line) {
const completions = '.help .error .exit .quit .q'.split(' ');
const hits = completions.filter((c) => c.startsWith(line.split(' ').slice(-1)));
return [hits.length ? hits : completions, line];
}
と私は正しいアドバイスを得ることなく、ユーザーの入力が変化しない:
(CLI App) > .e<tab>
.error .exit
(CLI App) > .err<tab>
(CLI App) > .error
(CLI App) > .error .ex<tab>
.exit
(CLI App) > .error .ex
は、この問題を解決する方法はありますか?あなたが与えることができるすべての援助は非常に高く評価されるでしょう。
ありがとうございました。
ヒットが1つしかない場合、 'line'の最後の部分をヒットに置き換えるのはどうですか?追加するのが難しいはずはありません。 –
ありがとうございます@ChrisSatchell。私は 'line'の最後の部分を置き換えて動作させました! –