好的,简单介绍一下背景:我使用 Mac,并且尽可能在 CLI 中进行操作。
特别是,我经常插入 USB 记忆棒cp
或mv
文件,然后立即希望弹出(卸载并断开连接)它。这通常可以通过几次击键来完成,除了卸载它,这需要(在 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
。