自定义 Bash 自动完成文件路径完成
Custom Bash Autocomplete with File Path Completion
我正在为我维护的项目开发 bash 自动完成功能。你可以find the script here。在一些比我更了解完成 API 的贡献者的帮助下,我靠自己的一些技巧拼凑了这个。
我们所拥有的一切都很好——只有一个例外。我们可以像这样管理完成
//type
pestle.phar som[TAB]
//completes to
pestle.phar some-command-name
但是,一旦我们到达这里,我们 丢失 文件 path/name 完成,这是库存的一部分 bash shell。也就是说,如果用户键入
,则继续前面的示例
//type
pestle.phar some-command-name /va[TAB]
我们希望它完成到
//completes to the following, because var exists
pestle.phar some-command-name /var
有没有办法告诉 complete
命令类似
Hey, in addition to everything we're telling you to do with our custom bash function, also keep your normal file path completion
如果没有,是否有一些已知的 science/boilerplate 可以在您自己的自定义基本完成函数中重新实现文件路径完成?
一些 and the docs 似乎 表明 -o filenames
或 -o bashdefault
选项应该处理这个——但它没有似乎在 OS X 10.11 上工作。我不确定我是否误解了 -o
,或者我的完成文件中的代码是否以某种方式覆盖了 -o
行为,或者如果 OS X 正在做它是 I'我只是一个表现良好的 unix 东西。
此外 - 如果不是很明显 - 这 是 我的第一个深度 bash 完成牛仔竞技表演。如果我在上面说了一些看似 dumb/naive 的话,请告诉我。我现在可能正在寻找鱼,但我想自己在bash完成河中学习到鱼。
我认为 -o default
(没有 -o filenames
)应该适合你。根据手册:
- bashdefault
Perform the rest of the default bash completions if the compspec generates no matches.
- default
Use readline's default filename completion if the compspec generates no matches.
- filenames
Tell readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory
names, quoting special characters, or suppressing trailing spaces). Intended to be used with shell functions.
(有关 -o default
和 -o bashdefault
之间的区别,另请参阅 'complete -d -o default cd' issue。)
我正在为我维护的项目开发 bash 自动完成功能。你可以find the script here。在一些比我更了解完成 API 的贡献者的帮助下,我靠自己的一些技巧拼凑了这个。
我们所拥有的一切都很好——只有一个例外。我们可以像这样管理完成
//type
pestle.phar som[TAB]
//completes to
pestle.phar some-command-name
但是,一旦我们到达这里,我们 丢失 文件 path/name 完成,这是库存的一部分 bash shell。也就是说,如果用户键入
,则继续前面的示例//type
pestle.phar some-command-name /va[TAB]
我们希望它完成到
//completes to the following, because var exists
pestle.phar some-command-name /var
有没有办法告诉 complete
命令类似
Hey, in addition to everything we're telling you to do with our custom bash function, also keep your normal file path completion
如果没有,是否有一些已知的 science/boilerplate 可以在您自己的自定义基本完成函数中重新实现文件路径完成?
一些 -o filenames
或 -o bashdefault
选项应该处理这个——但它没有似乎在 OS X 10.11 上工作。我不确定我是否误解了 -o
,或者我的完成文件中的代码是否以某种方式覆盖了 -o
行为,或者如果 OS X 正在做它是 I'我只是一个表现良好的 unix 东西。
此外 - 如果不是很明显 - 这 是 我的第一个深度 bash 完成牛仔竞技表演。如果我在上面说了一些看似 dumb/naive 的话,请告诉我。我现在可能正在寻找鱼,但我想自己在bash完成河中学习到鱼。
我认为 -o default
(没有 -o filenames
)应该适合你。根据手册:
- bashdefault
Perform the rest of the default bash completions if the compspec generates no matches.- default
Use readline's default filename completion if the compspec generates no matches.- filenames
Tell readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). Intended to be used with shell functions.
(有关 -o default
和 -o bashdefault
之间的区别,另请参阅 'complete -d -o default cd' issue。)