cd + bash 完成脚本

cd + bash 完成脚本

我有网络项目/var/www/projects/some/long/path/strange-project-name

现在我想在终端中输入:

webs str{TAB}

它应该自动完成webs strange-project-name(基于ls /var/www/projects/some/long/path/),并且在执行命令后,应该pwd指向项目路径。cd strange-project-name自动完成功能很智能

您将如何实现此功能?一些智能别名?.bashrc脚本中的函数?

一些聪明的别名?

答案1

您需要一个双人组。,完成脚本:

_webs() {
    local cur prev projdir=/var/www/projects/some/long/path

    COMPREPLY=()
    cur=$(_get_cword)
    prev=${COMP_WORDS[COMP_CWORD-1]}

    COMPREPLY=( $( compgen -W '$( command ls "$projdir/$cur*" | sed "s|$projdir/||")' -- '' ) )
}
complete -F _webs webs

_get_cword取决于正在安装的 bash-completions 包。如果没有,请将以下行更改为:

cur=$(_get_cword)

到:

cur=${COMP_WORDS[$COMP_CWORD]}

,一个函数:

webs () {
    local projdir=/var/www/projects/some/long/path
    cd "$projdir"
    do_something_ "$@"
}

答案2

我不确定这是否是你所需要的......

在终端...

sudo vim /etc/inputrc

找到以下行并取消注释:

# alternate mappings for “page up” and “page down” to search the history

#”\e[5~”: history-search-backward

#”\e[6~”: history-search-forward

现在您可以使用向上/向下翻页自动完成历史记录中的命令

答案3

我将为此创建一个自定义 bash 自动完成脚本。查看/etc/bash_completion.d目录及其众多示例。然后创建一个名为webs该目录的文件并根据您的需要进行调整。

答案4

如果我错了,请纠正我,但我认为这正是闪电是为了什么而创建的。这是一个 Ruby 项目,因此如果使用 Bash 本身就是目标,那么这不是一个好答案。

相关内容