После установки нового программного обеспечения уже открытый терминал с zsh не будет знать о новых командах и не сможет автоматически их заполнить. Видимо, открытие нового терминала решит проблему, но можно ли перестроить индекс (или как вы его называете), чтобы автозаполнение работало на старом терминале?
Я пытался, compinit
но это не помогло. Кроме того, есть ли способ, который не зависит от оболочки? Приятно также иметь возможность проверить ответ (кроме удаления чего-либо и переустановки).
Я имею в виду, что после ввода нескольких символов имени команды я могу нажать Tab, а zsh
остальное нужно сделать, чтобы вывести полное имя.
zsh
autocomplete
phunehehe
источник
источник
Ответы:
Чтобы восстановить кэш исполняемых команд, используйте
rehash
илиhash -rf
.Убедитесь, что вы не сбросили эту
hash_list_all
опцию (она вызывает еще меньше обращений к диску, но реже обновляет кэш).Если вы не хотите вводить команду, вы можете указать zsh не доверять ее кешу при завершении, добавив следующую строку в ваш
~/.zshrc
¹:Производительность снижается, но сегодня она незначительна для типичной настольной системы. (Это не так, если у вас
$PATH
NFS или система с недостатком оперативной памяти.)Сама
zstyle
команда описана наzshmodule
странице руководства . Значения стилей задокументированы на страницахzshcompsys
and иzshcompwid
man, или вы можете прочитать источник (здесь,_command_names
функции). Если вам нужна читаемая документация ... если найдете, дайте мне знать!¹ требуется zsh≥4.3.3, спасибо Крис Джонсен
источник
PATH="$PATH"
, также сделал бы работу.HASH_LIST_ALL
отображается в моей документации по умолчанию.Если у вас возникают проблемы с «завершением аргументов» при работе с новыми командами , возможно, вам нужна команда compinit , однако она имеет механизм кэширования, который может вызывать вашу проблему.
В документации к моей версии (4.3.10) говорится, что compinit использует кэшированный «файл дампа»
.zcompdump
, чтобы хранить скомпилированные функции завершения для ускорения последующих вызовов. Он делает недействительным файл дампа только тогда, когда он замечает изменение количества файлов завершения (fpath
файлы элементов, начинающиеся с#compdef …
или#autoload …
). Предположительно, установка нового программного обеспечения изменит количество таких файлов завершения (при условии, что оно также установит свои файлы автозаполнения zsh в нужном месте), поэтому я ожидаю, что обычный файл будетcompinit
работать. Если вы находитесь в ситуации, когда это не работает, вам может потребоваться обойти или вручную сделать недействительным файл дампа.Чтобы пропустить использование файла дампа, используйте
compinit -D
; это повлияет только на текущую оболочку.Чтобы восстановить файл дампа, удалите его и запустите снова
compinit
:Это повлияет на текущую оболочку, существующие оболочки, которые работают в обычном режиме
compinit
, и любые будущие оболочки.источник
zim
позволяют использовать файлы дампа для каждого хоста. В этом случае также удалите$zcompdump_file
вместе с.zcompdump
.