我正在使用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];
}
有了這個功能,我能夠完成一個命令,但在同一行中沒有幾個命令:
例如:
(CLI App) > .e<tab>
.error .exit
(CLI App) > .err<tab>
(CLI App) > .error
(CLI App) > .error .ex<tab>
.help .error .exit .quit .q
我修改完成者的功能,僅保留自動完成的,用戶在寫當前命令的建議:
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
有什麼辦法解決?任何援助,你可以給予非常感激。
謝謝。
如果只有一次命中,用命中替換'line'的最後部分怎麼樣?應該不難添加 –
謝謝@ChrisSatchell。我替換了'line'的最後一部分,它的工作原理! –