bash别名不自动完成与别名相同

Posted

技术标签:

【中文标题】bash别名不自动完成与别名相同【英文标题】:bash alias not autocompleting same as aliased 【发布时间】:2015-08-05 20:08:36 【问题描述】:

我正在尝试用更直观的 watch 命令替换 vlc。

所需的功能

    自动补全

    观看 /path/to/mo Tab --> 观看 /path/to/movie.avi

    执行 vlc

    watch /path/to/movie.avi Enter # 这应该运行 `vlc /path/to/movie.avi

目前我在上面使用别名 todo :

~/.bashrc

...
alias watch='vlc'
...

这符合上面的execute vlc,但没有给出正确的autocompletion [1]

当前行为

$ vlc /path/to/mo Tab --> vlc /path/to/movie.avi (成功完成)

$ watch /path/to/mo Tab --> watch /path/to/mo(不自动完成..)

正如@GUIDO 提到的,watch 是一个内置命令。 这在某种程度上影响了自动完成。更改为 play 有效,但想了解为什么这不起作用,以及如何解决..

注意

类似于How do I get bash completion to work with aliases?

但定义函数 wrap_alias(在我的 ~/.bashrc 中)并调用

wrap_alias watch vlc ''

无法解决自动完成问题

【问题讨论】:

您知道watch 是一个默认存在于大多数(如果不是所有)Linux 发行版中的命令吗? How do I get bash completion to work with aliases?的可能重复 @pasabaporaqui 该答案中的 wrap_alias 不能解决问题 【参考方案1】:

如果我们查看命令“vlc”的完成,我们会看到:

$ complete | grep vlc
complete -F _minimal vlc

所以包装函数是“_minimal”。我们可以对新命令使用相同的:

$ alias watch='vlc'
$ complete -F _minimal watch 

现在必须解决问题。

【讨论】:

以上是关于bash别名不自动完成与别名相同的主要内容,如果未能解决你的问题,请参考以下文章

如何让 bash 完成以在 Windows 10 bash 中使用别名?

别名 g='git' 并且 bash 完成仍然有效 [重复]

别名函数的 Git 完成 [重复]

bash脚本中的大写命令别名?

Python subprocess.call 一个 bash 别名

Laravel Bash 别名