我的目标是键入client air
tab并完成我~/clients
目录中的客户列表。
由于希望我的客户列表会增长,我不想再对别名命令进行硬编码,而是使用client
它来处理该cd /Users/pjammer/clients
部分,然后使用 zsh 奇迹般地基本上显示ls
该目录的内容,允许我在目录中自动完成目录名称并正确那里。
想法?
我的目标是键入client air
tab并完成我~/clients
目录中的客户列表。
由于希望我的客户列表会增长,我不想再对别名命令进行硬编码,而是使用client
它来处理该cd /Users/pjammer/clients
部分,然后使用 zsh 奇迹般地基本上显示ls
该目录的内容,允许我在目录中自动完成目录名称并正确那里。
想法?
警告,这是 [kindof] 宣传
我开发了一个插件,它可能会达到你想要的程度。
主要概念是其中之一diraction
,一个有源目录书签。它是一个别名,可让您跳转到附加的目录,或在其上下文中执行某些操作。
看看 github.com/AdrieanKhisbe/diractions,它作为一些上下文完成aliasdir subpath <tab>
它从一个 shell 函数开始,然后发展成为一个在某个时候完成的插件。您还可以免费使用一个环境变量来引用命令中任何位置的目录,以及一个命令套件和配置系统来设置您的书签。
对于这样的导航需求,我使用了一个简单但可能更通用的解决方案:我使用模糊选择工具设置了一个别名(例如选择:https ://github.com/thoughtbot/pick ,但还有很多其他的——fzf,参见: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”将使您从任何起始位置转到您选择的客户端。
这种方法改变了我在 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 等中),每个都有自己的缺点/优势。我只是传递我的工作流程/运动别名,我相信它们可以解决您的特殊需求,并提供一种通用的方法。