如何使用readlinebuild议使用tab完成文件?

在Bash shell中,我可以使用tab-completion来使用build议的文件和目录名称。 我怎样才能实现这与nodejs和readline ?

例子:

  • /<Tab>应该build议/root//bin/
  • /et<Tab>应该完成到/etc/
  • fo<Tab>应该完成foobar假设这样的文件存在于当前目录中。

我正在考虑使用globbing(pattern search_term.replace(/[?*]/g, "\\$&") + "*" ),但是有没有可能忽视的库?

这是我目前使用glob的方法,在使用//<Tab>时会被破坏,因为它返回规范化的名称,并且可能还有一些其他的特性:

 function command_completion(line) { var hits; // likely broken, one does not simply escape a glob char var pat = line.replace(/[?*]/g, "\\$&") + "*"; // depends: glob >= 3.0 var glob = require("glob").sync; hits = glob(pat, { silent: true, nobrace: true, noglobstar: true, noext: true, nocomment: true, nonegate: true }); return [hits, line]; } var readline = require("readline"); rl = readline.createInterface({ input: process.stdin, output: process.stdout, completer: command_completion }); rl.prompt(); 

也许你可以看看readdir: https : //www.npmjs.com/package/readdir

只要阅读用户制作标签的目录,然后将用户input与目录上每个文件的开头进行比较,并且如果文件名匹配,则将其显示给用户。 就像是:

 var readDir = require('readdir'); function strncmp(str1, str2, lgth) { var s1 = (str1 + '') .substr(0, lgth); var s2 = (str2 + '') .substr(0, lgth); return ((s1 == s2) ? 0 : ((s1 > s2) ? 1 : -1)); } var userInput = // get user input; var path = // get the path; readDir.read(path, [*], function(err, files) { for (var i = 0; i < files.length; i++) if (strncmp(files[i], userInput, userInput.length) == 0) console.log(files[i]); });