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

asd*_*dfg 99 bash alias expansion

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

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 
Run Code Online (Sandbox Code Playgroud)

Den*_*son 131

您可以按Ctrl- Alt-e执行readline的功能shell-expand-line,这将做别名,历史和字扩展。请注意,在某些键盘Meta上不是Alt. 你可能需要按Esc然后Ctrl-e

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

"\e\C-l": alias-expand-line
Run Code Online (Sandbox Code Playgroud)

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

  • 事实上,`ESC Ce` 适用于 Bash,但`Cx a` 适用于 Zsh。也在 OS X 上测试过。 (4认同)
  • @asdfg:如果你这样做,它会破坏其他完成。它*可能*工作(未经测试)以创建如上所示的地图,然后添加此附加地图以替换 Tab 的现有地图:`"\Ci": "\e\Cl\e\e"` 这将创建一个宏执行 `alias-expand-line` 和 `complete`。这取决于我上面回答中的绑定,并且 Esc-Esc 的默认绑定保持不变。如果您想执行默认完成,您仍然可以执行 Esc-Esc。 (2认同)

Can*_*Rau 7

对于安装了 zsh 和 Oh My ZSH 并寻找简单解决方案的人来说,globalias可能是你的朋友

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

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl
Run Code Online (Sandbox Code Playgroud)

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

plugins=(... globalias)
Run Code Online (Sandbox Code Playgroud)

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

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