
Когда я использую стандартное автодополнение табуляции в bash или zsh, я ввожу первую часть имени файла или пути, затем нажимаю, чтобы завершить слово. Это работает хорошо, если только я не нахожусь в каталоге, полном файлов, где все вариации в именах файлов находятся в конце слова, например, каталог, полный файлов с отметкой времени, которые все начинаются с одного и того же префикса:
foo-20120701124501.log
foo-20120701124531.log
foo-20120701124601.log
foo-20120701124631.log
foo-20120701124701.log
foo-20120701124731.log
В этом случае, если я введу, foo<tab>
я получу foo-20120701124
-- я могу снова нажать клавишу Tab и увидеть все файлы... Мне придется ввести следующие 3 символа, чтобы получить уникальное имя файла.
Мне интересно, есть ли способ набрать, например, 4731.log
а затем завершить начало слова. Я предполагаю, что это будет сложно в bash, потому что автодополнение bash использует $COMP_CWORD
и $COMP_KEY
для своего программируемого автодополнения, и из того, как я это читаю, я не думаю, что они позволят дополнять слова слева. Я недостаточно знаю о автодополнении внутри zsh, чтобы знать, с чего начать искать в man-страницах.
решение1
Это сработает только в том случае, если перед нажатием клавиши Tab есть ведущая команда. Скорее всего, это не то, что вы ищете, но единственное, что мне удалось сделать, это получить желаемые результаты. Приведенный ниже пример должен сработать в вашем случае. Вам просто нужно оказаться в конце *4731.log и нажать Tab 1 раз. Если он уникален, он будет автоматически заполнен.
ls *4731.log