以子目录列表为参数的zsh别名



我的目标是键入client airtab并完成我的~/clients目录中的客户端列表。

由于我的客户端列表有望增长,我不想再硬编码别名命令,而是使用处理cd /Users/pjammer/clients部分的client,然后使用zsh奇迹般地显示该目录的ls,使我能够在目录中自动完成目录名并直接转到那里。

想法?

警告,这是一种宣传

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

主要概念是diraction,一个支持的目录书签。它是一个别名,使您能够跳转到附加的目录中,或者在其上下文中执行一些操作。

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

它最初是一个shell函数,后来发展成为一个插件,并在某个时候完成。您还可以免费获得一个环境变量来引用命令中任何位置的目录,以及一个命令套件和配置系统来设置书签。

对于这样的导航需求,我使用一个简单但可能更通用的解决方案:我使用模糊选择工具设置别名(例如pick:https://github.com/thoughtbot/pick,但是还有许多其他的——fzf,c.f:http://junegunn.kr/2014/04/fzf+vim+tmux/)。

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

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

然后,你可以在.rc中对其进行别名(我喜欢用2个助记符来表示这类别名):

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

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

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

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

另一个例子是打开和编辑一些src文件,你不太记得它的名字,它在目录的深层嵌套中,但你也不太记得:

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

在这里,pf别名("pick file")快速在调用cmd的目录中构建一个文件集合,不包括隐藏目录,并允许您模糊选择要发送到stdout的文件名。将这个别名与vim等编辑器结合使用,可以找到并打开只使用一个别名选择的文件——这结合了查找、cd’ing和打开文件的命令操作。

需要明确的是,这里并没有什么新鲜事——模糊选择工具很流行,它们有很多实现(在Go、Haskell、python、ruby等中),每个都有自己的缺点/优点。我只是传递我的工作流/移动别名,我相信这些别名可以解决您的特殊需求,并提供一种可推广的方法。

最新更新