如何在 bash 中内联扩展别名?

如何在 bash 中内联扩展别名?

有没有办法在 bash 中内联扩展别名?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

答案1

您可以按Ctrl- Alt-e执行 readline 函数shell-expand-line,该函数将执行别名、历史记录和单词扩展。请注意,在某些键盘上Meta不是Alt。您可能需要EscCtrl-e

默认情况下,函数alias-expand-linehistory-and-alias-expand-line不受绑定,但您可以通过在~/.inputrc文件中添加类似于以下的行来绑定它们。

"\e\C-l": alias-expand-line

这将使Ctrl- Alt- l(小写的“ell”)执行仅有的别名扩展。

答案2

对于安装了 zsh 和 Oh My ZSH 并正在寻找简单解决方案的用户,全球化可能是你的朋友

扩展所有 glob 表达式、子命令和别名(包括全局)。

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

要安装,只需将“globalias”添加到 .zshrc 插件列表中

plugins=(... globalias)

然后只需按下SPACE即可触发您所编写的命令的扩展。

如果只想插入空格而不扩展命令行,请按CTRL+SPACE

答案3

这不起作用。但我猜测/希望可以做类似的事情来做你想做的事情。你必须使用自己的完成脚本。这是你制作一个的方法:

_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 获取的脚本引用的。如果它不起作用,请告诉我。

谢谢。

答案4

这实际上可能是执行您要执行的操作的一种更简单的方法(bash版本 >= 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shoptman頁面:https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html

相关内容