在命令行中使用 Tab 自动完成文本

Ale*_*lex 6 c shell command-line autocomplete

我想知道如何用 C 实现一个程序,它可以自动完成您在命令行中输入的命令或文本。例如,假设您的程序提示用户输入文件名。大多数情况下会使用scanf()or else 来做到这一点。然后在命令行中用户会像please input the file name:_.

假设shakespeare.txt在同一目录中有一个。现在我已经输入shakes,然后我希望计算机shakespeare.txt为我自动完成,就像大多数程序在用户点击Tab. 如何实施?

编辑:为了更清楚,另一个例子:

如果您grep在命令行中使用,例如grep -i "shakespeare" shakespeare.txt,在您完成shakespeare.txt自己之前,如果您只是使用Tab,则会出现一些候选人。

当我尝试在使用类似功能时提示用户输入时,如何实现我的程序以使其拥有这些实用程序scanf()

A B*_*A B 0

因为在 C 中,没有可移植的解决方案可以在不按 Enter 键的情况下知道您在提示中键入的内容,因此您需要逐个字符地读取。

  • 在 Windows 中,您可以使用 _getch() 函数读取一个字符,而无需按 Enter 键。该函数定义在 conio.h 中
  • 在Linux中,您可以使用getch()函数。

注意:您可能需要使用 getche() 来回显该字符。

您需要定义一个缓冲区,在其中存储用户按下的所有字符,直到用户按下 Enter 键或按下 Enter 键。当您找到 \t 时,您将分析缓冲区中的内容并据此做出决定。

以下代码是一个过于简化的示例:

char c;
int i = 0;

 do {
     c = _getche();
         if (c == '\t') {
             // Autocomplete
             // Print the rest of the word here
         }
    else {
        buff[i++] = c;
    }

 } while (c != '\n' && c!='\r');
 buff[i] = '\0'; // Let's keep the standard
Run Code Online (Sandbox Code Playgroud)