我有多少种方法可以得到部分子猛砸别名完成?
-
21-08-2019 - |
题
问:我有一个问题,就是显然不是这个已经问bash补问题一回答>堆栈溢出。问题是,如何在局部子串得到击别名完成(对于任何别名)。
示例:强> 例如,假设我有以下别名:
open.alicehome="cd /usr/home/alice"
open.bakerhome="cd /usr/home/baker"
open.charliehome="cd /usr/home/charlie"
gohomenow="shutdown -now"
我想懒惰地只需键入“贝克{{TAB}}”来调用第二别名。
我想懒洋洋地只需键入“家{{TAB}}”来获得上述所有的别名,我就可以从与键盘(最佳)选择的列表或键入一个明确的子串之间进行区分选择三个选项(小于最优的)。
.. .. OR
我想懒洋洋地只需键入“家”,然后反复按{{TAB}},直到特定的别名我想显示出来,然后按{{ENTER}}执行它。
<强>随意创意:强> 如果你有办法做到这一点,即使它需要诉诸极端大师两轮牛车,请随时分享和随意解释你的大师两轮牛车到五十岁的水平谁就有尝试实施你的想法给自己。
链接到现有网络的网页或RTFMs是受欢迎的。
解决方案
可以生成用于与compgen -c -X'!*substring*'
指定的子
要包括这在bash自动完成,你可以在包含这样的事情你的home目录创建一个.bash_completion文件:
_comp() {
local cur
cur=${COMP_WORDS[$COMP_CWORD]}
COMPREPLY=( $( compgen -c -X '!*'$cur'*' ) )
}
complete -F _comp $nospace eval
当你按参数传递给<TAB>
命令eval
这场比赛,函数就会运行。我还没有找到一种方法,包括在bash第一个命令寻找新的匹配功能,我只找到了如何添加自定义完成为一个特定的命令,像上面eval
文档。
但我有点怀疑到这是多么有用的...有没有简单的方法来选择哪个匹配您从列表中选择所需。
其他提示
如果你真的想改变bash
的标签行为,
# ~/.inputrc
# The default binding for [Tab] is ``complete'', which is what we're used to.
# ``menu-complete'' gives you irssi-like behavior: cycle through completions.
"\t": menu-complete
不隶属于 StackOverflow