我怎样才能遍历 gnu readline 中可能的完成?

我怎样才能遍历 gnu readline 中可能的完成?

在实现的 shell 中GNU Readline,我可以点击该键来获取我开始输入的内容的可能补全列表。例如:

C:\>cd P<TAB>
PerfLogs\             Program Files (x86)\  Python27\
Program Files\        ProgramData\

我现在如何选择我想要使用的完成方式?

我知道如果我想要上面例子中的“Program Files”,我可以输入“rogram Files”,但我很懒:)。

有没有办法让我按下键盘快捷键来遍历可能的补全,以便我可以快速选择一个?类似于现代 IDE 中的自动完成/智能感知?

编辑:我的解决方案可能是使用 GNU Readline 的menu-complete命令(如下所述)?但是如何将其绑定到组合键?

menu-complete ()

    Similar to complete, but replaces the word to be completed with a single match
from the list of possible completions. Repeated execution of menu-complete steps 
through the list of possible completions, inserting each match in turn. At the end of 
the list of completions, the bell is rung (subject to the setting of bell-style) and 
the original text is restored. An argument of n moves n positions forward in the list 
of matches; a negative argument may be used to move backward through the list. This 
command is intended to be bound to TAB, but is unbound by default. 

答案1

在使用的 shell 中readline,您需要绑定menu-complete绑定到密钥。默认情况下不绑定complete

为此,请编辑~/.inputrc并添加以下内容:

TAB: menu-complete

这可能会影响所有使用 的程序readline。使用以下命令仅将此应用于bash

$if Bash
   TAB: menu-complete
$endif

答案2

命令行补全根据平台不同,以两种不同的方式工作。

Windows(NT 及更高版本)

首先,Windows 命令处理器 (cmd.exe)不是实现 GNU Readline。尽管如此,它确实支持制表符补全。

具体来说,cmd.exe 采用“旋转完成”,每个选项都Tab提供不同的选项。

在您的示例中,按Tab将首先获得PerfLogs,然后Program Files,等等。

bash(和其他 Unix shell)

大多数 Unix shell 都使用“提示完成”,正如 Daniel 上面所说,您必须输入另一个字符来缩小完成范围。

本节请参阅上面链接的维基百科文章以了解更多详细信息。

答案3

具体关于这个问题的这一部分

有没有办法让我按下键盘快捷键来遍历可能的补全,以便我可以快速选择一个?类似于现代 IDE 中的自动完成/智能感知?

我会说陣陣是您可能想要调查的内容。它是一种非常快速的模糊查找和选择工具。

相关内容