我试图弄清楚如何为 C++ 应用程序中的子命令实现制表符完成。我希望它的功能很像 Git 的制表符补全。我正在浏览 Git 的源代码,但它并没有在我身上跳出来。
我已经搜索了实现制表符完成的方法,但没有找到一个直截了当的答案,所以我猜测它可能不一定是每个单独的应用程序必须实现的功能。选项卡补全是否是正在执行应用程序的特定 shell 的功能?关于让我的应用程序支持制表符完成(特别是在 C++ 中),我需要了解哪些基础知识?
我试图弄清楚如何为 C++ 应用程序中的子命令实现制表符完成。我希望它的功能很像 Git 的制表符补全。我正在浏览 Git 的源代码,但它并没有在我身上跳出来。
我已经搜索了实现制表符完成的方法,但没有找到一个直截了当的答案,所以我猜测它可能不一定是每个单独的应用程序必须实现的功能。选项卡补全是否是正在执行应用程序的特定 shell 的功能?关于让我的应用程序支持制表符完成(特别是在 C++ 中),我需要了解哪些基础知识?
这个问题在评论中得到了回答。
选项卡补全是否是正在执行应用程序的特定 shell 的功能?
是的
关于让我的应用程序支持制表符完成(特别是在 C++ 中),我需要了解哪些基础知识?
基本上了解更多关于bash-completion
我已经搜索了实现制表符完成的方法,但没有找到直接的答案
看看这里的代码。这应该给你一个很好的起点。
关于让我的应用程序支持选项卡完成,我需要了解哪些基础知识
您应该熟悉 Trie 数据结构,因为这是用于实现 tab 补全的常用数据结构。网上有很多教程解释的,查一下。
伪代码(给定字符串列表):
对于列表中的每个字符串,将其字符存储在 Trie 数据结构中。
当用户按 Tab 键时:
(GeeksForGeeks) 给定一个查询前缀,我们搜索所有具有该查询的单词。
- 使用标准的 Trie 搜索算法搜索给定的查询。
- 如果查询前缀本身不存在,则返回 -1 表示相同。
- 如果查询存在并且是 Trie 中单词的结尾,则打印查询。这可以通过查看最后一个匹配节点是否设置了 isEndWord 标志来快速检查。我们在 Trie 中使用这个标志来标记单词节点的结尾以进行搜索。
- 如果查询的最后一个匹配节点没有子节点,则返回。
- 否则递归打印最后一个匹配节点的子树下的所有节点。