我想像在 emacs 中一样在终端中输入:
emacs 2019-*subject*
当我点击时,Tab我得到了第一场比赛:
2019-08-03-subject.markdown
我希望它能向我显示以下选项:
2019-08-03-subject.markdown 2019-bla-bla-subject-predicate.markdown etc...
我在网上查遍了所有地方,不敢相信这不是一个功能。
有许多 相似的提出的问题。答案并不像我想要的那样(如上所示)。我尝试过的其他解决方案:这里。
PS 我使用 Ubuntu 16。这是我在打开文件时在 emacs 中发现的典型功能。这非常方便。
答案1
之后发生的事情Tab取决于完成脚本。这个答案让我相信 2013 年至少有一位用户实现了所需的行为,但在 2019 年,我的 Debian 9 中的行为就像您描述的那样;可能从那时起脚本/行为就发生了变化。
此外,Bash 根据输入的命令(当前行中的第一个单词)选择脚本。任何单一更改都会影响所有补全以提供您想要的内容,这一点并不明显(我想该_filedir
功能是一个很好的开始)。
幸运的是,您可以根据需要获得可能的扩展。来自man 1 bash
(READLINE
标题下):
glob-complete-word
(M-g
)
point 之前的单词被视为路径名扩展的模式,并隐式附加星号。此模式用于生成匹配文件名的列表,以供可能的补全。
glob-expand-word
(C-x *
)
point 之前的单词被视为路径名扩展的模式,并插入匹配的文件名列表,替换该单词。如果提供了数字参数,则在路径名扩展之前附加一个星号。
glob-list-expansions
(C-x g
)显示
将生成的扩展列表,并重新绘制该线。如果提供了数字参数,则在路径名扩展之前附加一个星号。glob-expand-word
M-g
并C-x *
描述C-x g
默认键绑定。更友好的格式如下:
- Meta+ g(Alt+ g)表示
glob-complete-word
, - Ctrl+ x,(释放Ctrl)*表示
glob-expand-word
(注意:在我的键盘上*实际上是Shift+ ),8 - Ctrl+ x,(发布Ctrl)g对于
glob-list-expansions
。
以下代码设置这些绑定(以防它们由于某种原因丢失):
仅适用于当前 shell:
# commands to run in Bash bind '"\eg": glob-complete-word' bind '"\C-x*": glob-expand-word' bind '"\C-xg": glob-list-expansions'
或者在你的永久配置中(
/etc/inputrc
或~/.inputrc
):# lines to add "\eg": glob-complete-word "\C-x*": glob-expand-word "\C-xg": glob-list-expansions
(请注意,这只会影响新的 shell,除非你重新加载)。
您可能对glob-complete-word
或感兴趣glob-list-expansions
。主要区别:
glob-complete-word
总是附加一个星号,而glob-list-expansions
有条件地执行此操作(参见引用的手册)。- 如果有很多匹配项,那么您可能需要触发
glob-complete-word
两次(即按下组合键两次)才能打印某些内容;这取决于show-all-if-ambiguous
,比较已经提到答案。 - 如果只有一次匹配,那么
glob-complete-word
将执行实际的行完成,同时glob-list-expansions
仍然只显示匹配。
在您的特定情况下输入以下代码:
emacs 2019-*subject*
然后Ctrl+ x, g。