zsh别名将子目录列表作为参数

时间:2015-03-31 14:00:14

标签: zsh zsh-completion zsh-alias

我的目标是输入client air 标签并填写我~/clients目录中的客户列表。

由于希望我的客户列表能够增长,我不再需要硬编码别名命令,而是使用client来处理cd /Users/pjammer/clients部分,然后使用zsh奇迹般地显示ls部分该目录的1}},允许我在目录中自动填充目录名并直接进入。

思想?

2 个答案:

答案 0 :(得分:2)

警告,这是[kindof]宣传

我开发了一个可能达到你想要的远程插件。

主要概念是diraction供电目录书签之一。 它是一个别名,使您可以跳转附加的目录,或在其上下文中执行某些操作。

看一下github.com/AdrieanKhisbe/diractions,它在上下文完成中有些aliasdir subpath <tab>

它起初是一个shell函数,然后长大到一个在某个时刻完成的插件。您还可以免费使用环境变量来命令命令中的任何位置,以及命令套件和配置系统来设置书签。

答案 1 :(得分:0)

对于这样的导航需求,我使用了一个简单但可能更通用的解决方案:我使用模糊选择工具设置别名(例如,选择:https://github.com/thoughtbot/pick,但还有许多其他 - fzf,cf:{ {3}})。

巧妙的技巧是将find的内容传递给模糊选择器工具,例如:

cd $(find ~/path/to/clients/ -maxdepth 1 -type d | pick )

然后,您可以在.rc中使用别名(我喜欢使用2个助记符来表示这些别名):

2cli='cd $(find ~/path/toclients/ -maxdepth 1-type d | pick) 

键入'2cli'会将您从任何起始位置转到您选择的客户端。

这种方法改变了我在shell中的核心导航。它有效地推广了流行的vim插件Command-T for shell。例如,在git中工作时,我使用以下别名来更改分支:

alias gb='git checkout $(git branch -a | pick)'

另一个例子是打开并编辑一些src文件,你不记得它的名字是在深深的目录中的某个地方,但又是你不太记得的地方:

alias pf="find . \( ! -regex '.*/\..*' \) -type f | pick "
vim $(pf) 

这里,pf别名('选择文件')快速在调用cmd的目录中构建文件集合,不包括隐藏目录,并允许您模糊选择要发送的文件名到stdout。将此别名与vim等编辑器结合使用,可以查找并打开一个只用一个别名选择的文件 - 这样就可以一步一步地找到查找,cd'ing和打开文件的命令行为。

要明确的是,这里没有什么新东西 - 模糊选择工具很受欢迎,并且有许多实现(Go,Haskell,python,ruby等),每个都有自己的dis / ad-vantages。我只是传递我的工作流/运动别名,我相信这可以解决您的特殊需求,并提供一种通用的方法。