如何实现制表符补全

发布于 2024-10-21 11:14:05 字数 224 浏览 2 评论 0原文

我试图弄清楚如何在 C++ 应用程序中实现子命令的制表符补全。我希望它的功能与 Git 的制表符补全非常相似。我正在浏览 Git 的源代码,但它并没有引起我的注意。

我已经搜索了实现选项卡完成的方法,但没有找到直接的答案,因此我猜测它可能不一定是每个单独的应用程序都必须实现的功能。制表符补全是执行应用程序的特定 shell 的功能吗?关于让我的应用程序支持制表符补全(尤其是在 C++ 中),我需要了解哪些基础知识?

I'm trying to figure out how to implement tab completion for subcommands in a C++ application. I would like it to function much like Git's tab completion. I'm trolling through Git's source, but it's not jumping out at me.

I've searched for ways to implement tab completion and haven't found a straight-forward answer, so I'm guessing it might not necessarily be a feature each individual application has to implement. Is tab completion a feature of the particular shell the application is being executed from? What are the basics I need to know about getting my application to support tab completion (particularly in C++)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋千易 2024-10-28 11:14:05

该问题已在评论中得到解答。

制表符补全是执行应用程序的特定 shell 的功能吗?

关于让我的应用程序支持制表符补全(尤其是在 C++ 中),我需要了解哪些基础知识?

基本上了解有关 bash-completion 的更多信息

The question was answered in the comments.

Is tab completion a feature of the particular shell the application is being executed from?

yes

What are the basics I need to know about getting my application to support tab completion (particularly in C++)?

basically learn more about bash-completion

踏月而来 2024-10-28 11:14:05

我已经搜索了实现制表符补全的方法,但没有找到
直接回答

请查看此处的代码。这应该给你一个很好的起点。

关于让我的申请成功,我需要了解哪些基础知识
支持tab补全

您应该熟悉 Trie 数据结构,因为这是用于实现 tab 补全的常用数据结构。网上有很多教程解释的,你可以查一下。

伪代码(给定字符串列表):

对于列表中的每个字符串,将其字符存储在 Trie 数据结构中。

当用户按下 Tab 键时:

(极客对于极客)
给定查询前缀,我们搜索具有此查询的所有单词。

  1. 使用标准 Trie 搜索算法搜索给定查询。
  2. 如果查询前缀本身不存在,则返回 -1 表示相同。
  3. 如果查询存在并且是 Trie 中的词尾,则打印查询。这可以通过查看最后一个匹配节点是否具有 isEndWord 标志来快速检查
    放。我们在 Trie 中使用这个标志来标记单词节点的结尾,目的是
    正在搜索。
  4. 如果查询的最后一个匹配节点没有子节点,则返回。
  5. 否则递归打印最后一个匹配节点的子树下的所有节点。

I've searched for ways to implement tab completion and haven't found a
straight-forward answer

Look at the code here. This should give you a pretty good starting point.

What are the basics I need to know about getting my application to
support tab completion

You should be familiar with Trie data structure, as this is the common data structure used to implement tab completion. There are lots of tutorials explaining it online, look it up.

Pseudo-code (given a list of strings):

For each string in the list, store its characters in Trie data structure.

when the user hit tab key:

(GeeksForGeeks)
Given a query prefix, we search for all words having this query.

  1. Search for given query using standard Trie search algorithm.
  2. If query prefix itself is not present, return -1 to indicate the same.
  3. If query is present and is end of word in Trie, print query. This can quickly checked by seeing if last matching node has isEndWord flag
    set. We use this flag in Trie to mark end of word nodes for purpose of
    searching.
  4. If last matching node of query has no children, return.
  5. Else recursively print all nodes under subtree of last matching node.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文