Во-первых, фрагмент кода, который вы показываете, не имеет никакого отношения к завершению. Вместо этого он записывает стек каталогов в файл, чтобы сохранить его между сеансами zsh. (Лично я даже не уверен, что это хорошая идея.)
Хорошим местом для начала изучения zsh-завершений является виджет _complete_help
ZLE. По умолчанию она привязана к ^Xh
в карте клавиатуры zsh viins
(vi insert), но не привязана по умолчанию в таблице клавиш emacs
. Если вы хотите использовать его в emacs
раскладке клавиатуры (по умолчанию для многих людей), вы должны связать его:
bindkey -M emacs "^Xh" _complete_help
Теперь вы можете ввести cd -
(или cd +
) и следовать за ним, набрав CTRL-X h вместо TAB . Вы должны увидеть следующий вывод:
tags in context :completion::complete:cd::
directory-stack (_directory_stack _cd)
(На данный момент я признаю, что мы приближаемся к пределам моих знаний о системе завершения zsh.)
Теперь вы можете увидеть завершающие функции для тега directory-stack
в этом конкретном контексте. Вероятно, вас интересует _directory_stack
, и вы можете увидеть содержимое этой функции с помощью:
functions _directory_stack
… вот где на самом деле генерируются эти первые числа.
Возможно, возможно написать аналогичные функции завершения для других контекстов завершения и применить использование zstyle
. Тем не менее, это нетривиальная магия завершения, и помимо всего, что я пытался