Answers:
您可以按Ctrl- Alt- e执行readline的功能shell-expand-line
,这将做别名,历史和字扩展。请注意,在某些键盘Meta上不是Alt。您可能需要按下Esc然后Ctrl-e
函数alias-expand-line
和history-and-alias-expand-line
缺省情况下未绑定,但是您可以通过在~/.inputrc
文件中添加类似于以下内容的行来绑定它们。
"\e\C-l": alias-expand-line
这将使Ctrl- - Alt(l小写“ELL”)执行仅别名扩展。
"\C-i": "\e\C-l\e\e"
创建将同时执行的宏alias-expand-line
和complete
。这取决于上面我的回答中的绑定,并且Esc-Esc的默认绑定仍然存在。如果您想执行默认完成,则仍然可以执行Esc-Esc。
ESC C-e
适用于Bash,但C-x a
适用于Zsh。在OS X上也测试
Control-x: history-and-alias-expand-line
。
实际上,这可能是您尝试执行的操作(bash
版本> = 4.2.29)更简单的方法:
shopt -s direxpand
shopt -s expand_aliases
shopt
的man
页面:https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
alias ll='ls -l
,shell会将“ ll”解释为可能不存在的命令/函数“ ll”。
这是行不通的。但是我猜/希望可以做这样的事情来做你想做的事。您将必须使用自己的完成脚本。这是您的制作方式:
_ll()
{
COMPREPLY=(ls -l)
#The next line does not work. I just hope there were a way to replace that word
COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll
现在,获取完整的bash_completion文件(http://caliban.org/bash),并将上述脚本放在bash_completion.d目录中的文件中,该文件是您从url参考中获得的。让我知道它是否无效。
谢谢。