当我在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内部的完成知之甚少,不知道从哪里开始查看手册页。
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>
确实。