我有网络项目/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 本身就是目标,那么这不是一个好答案。