在bash或zsh中左选项卡完成


2

当我在bash或zsh中使用标准制表符完成时,我键入文件名或路径的第一部分,然后点击以完成单词。除非我在一个文件目录中,文件名的所有变化都在单词的末尾,例如,这种情况很有效。一个充满时间戳文件的目录,所有文件都以相同的前缀开头:

foo-20120701124501.log
foo-20120701124531.log
foo-20120701124601.log
foo-20120701124631.log
foo-20120701124701.log
foo-20120701124731.log

在这种情况下,如果我输入 foo<tab> 我去拿 foo-20120701124 - 我可以再次选项卡,并查看所有文件...我必须输入接下来的3个字符才能获得唯一的文件名。

我想知道是否有办法输入例如 4731.log 然后完成单词的开头。我猜这在bash中很难,因为bash完成使用 $COMP_CWORD$COMP_KEY 对于它的可编程完成,从我正在阅读它的方式来看,我认为那些不会允许向左完成单词。我对zsh内部的完成知之甚少,不知道从哪里开始查看手册页。

Answers:


2

只有在按Tab键之前有一个前导命令时,这才有效。可能不是你想要的,但唯一的是我能得到理想的结果。以下示例适用于您的情况。你只需要在* 4731.log的末尾并点击标签1次。如果它是唯一的,它将自动完成。

ls *4731.log

是的,工作就像一个魅力。我使用生成了一系列文件 for i in {1..10}; do touch $(date -d "$i days $RANDOM seconds ago" +%Y%m%d%H%M%S); done...这创建了一系列看起来像的文件 20120915165427 20120916121328 20120917180952 如果我使用 ls *09<tab>,它没有扩大,但是 *09*<tab> 确实。
Barton Chittenden
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.