我在/var/www/projects/some/long/path/strange-project-name有web项目
现在我想inputterminal:
webs str{TAB}
它应该自动完成webs strange-project-name (基于ls /var/www/projects/some/long/path/ ),执行命令后, pwd应指向项目path。 一种聪明的cd strange-project-name与自动完成
你将如何实现这个function? 一些聪明的别名? 函数在.bashrc ? 脚本?
一些聪明的别名?
你需要一个双亲。 一 ,完成脚本:
_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]}
二 ,function:
webs () { local projdir=/var/www/projects/some/long/path cd "$projdir" do_something_ "$@" }
我不确定这是不是你需要的…
在terminal…
sudo vim /etc/inputrc
find这些行并取消注释:
# alternate mappings for “page up” and “page down” to search the history #”\e[5~”: history-search-backward #”\e[6~”: history-search-forward
现在您可以使用页面向上/向下自动完成历史logging中的命令
我会为此创build一个自定义的bash自动完成脚本。 看看/etc/bash_completion.d目录及其众多的例子。 然后创build一个名为webs的文件到该目录,并根据您的需要进行调整。
纠正我,如果我错了,但我认为这正是闪电创build的。 这是一个Ruby项目,所以如果使用Bash本身就是一个目标,这不是一个好的答案。