zsh补全:从特定目录获取文件名

zsh补全:从特定目录获取文件名

好的,简单介绍一下背景:我使用 Mac,并且尽可能在 CLI 中进行操作。

特别是,我经常插入 USB 记忆棒cpmv文件,然后立即希望弹出(卸载并断开连接)它。这通常可以通过几次击键来完成,除了卸载它,这需要(在 10.7 中)进入一个空的桌面空间(通常至少相距两个空格),选择磁盘,然后按“command-e”。坦率地说,这个卸载过程是整个过程中最耗时、最乏味的部分,有几个数量级。

只需键入以下内容会更加自然和高效:

ej<tab> J<tab>

假设我的 USB 记忆棒安装在 /Volumes/Jefferson。我期望从 6 次击键中得到的结果如下:

eject /Volumes/Jefferson

这应该运行以下命令:

diskutil unmount /Volumes/Jefferson

所以,我写了一个很好的小函数:

eject() {
    diskutil unmount /Volumes/$1
}

还有一个与之配套的完成函数:

compdef '_files -g "/Volumes/*"' eject  

然而,这有一个问题。该_files函数生成完整路径。现在,我可以将“弹出”函数中的行更改为diskutil unmount $1,并且事情会起作用,但随后我无法键入安装点名称的第一个字母,因为路径以 /Volumes/ 开头。例如,如果我输入J<tab,我将自动完成 PWD 中的文件。我必须输入/Volumes/J<tab>才能获得所需的完成。

那么,是否有一个补全函数可以从预定义的特定位置获取文件名,而不是生成完整路径?

我真的很想将击键次数减少到 6 次。

答案1

_files -W /Volumes

请参阅文档_path_files

相关内容