Восстановите индекс автоматического заполнения (или независимо от того, что это называют), и двоичные файлы в кэше $PATH в zsh

Определить - / и т.д.? имеет некоторую хорошую историю.

Можно найти ссылки на "и так далее" в старой Bell Labs руководства UNIX и так далее – в наше время она использовала только для конфигурации системы, но она раньше была, куда весь материал, который не вписывался в другие каталоги, пошел.

78
05.10.2014, 20:18
3 ответа

Для восстановления кэша исполняемых команд использовать rehash или hash -rf.

Удостоверьтесь, что Вы не сбросили hash_list_all опция (это вызывает даже меньше доступов к диску, но делает обновление кэша менее часто).

Если Вы не хотите должными быть вводить команду, можно сказать zsh не доверять своему кэшу при завершении, вставив следующую строку Ваш ~/.zshrc¹:

zstyle ":completion:*:commands" rehash 1

Существует стоимость производительности, но это незначительно на типичном рабочем столе, устанавливающем сегодня. (Это не, если Вы имеете $PATH на NFS или исчерпавшей ресурсы RAM системе.)

zstyle сама команда документируется в zshmodule страница справочника. Значения стилей документируются в zshcompsys и zshcompwid страницы справочника, или можно считать источник (здесь, _command_names функция). Если Вы хотели некоторую читаемую документацию … при нахождении некоторых сообщите мне!

¹ требует zsh≥4.3.3, Chris Johnsen спасибо

79
27.01.2020, 19:30
  • 1
    Любое колдовство рехеширования должно включить завершение названия команды “новых команд” в оболочках, которые были ранее полностью хешированы. Устанавливание ПУТИ (или пути) также вызовет рехеширование; таким образом PATH="$PATH" также сделал бы задание. HASH_LIST_ALL показывается значением по умолчанию в моей документации. –  Chris Johnsen 17.09.2010, 14:13

Если у Вас есть проблемы при получении “завершения аргумента”, работающего на новые команды затем compinit, вероятно, команда, в которой Вы нуждаетесь, однако это имеет механизм кэширования, который мог бы вызывать Вашу проблему.

В документации для моей версии (4.3.10) говорится, что compinit использует кэшируемый “файл дампа”, .zcompdump, сохранить скомпилированные функции завершения для ускорения последующих вызовов. Это только делает недействительным файл дампа, когда это замечает изменение в количестве файлов завершения (fpath файлы элемента, которые запускаются с #compdef … или #autoload …). По-видимому, установка нового программного обеспечения изменила бы количество таких файлов завершения (предполагающий, что это также установило свои файлы автоматического заполнения zsh в правильном месте), таким образом, я буду ожидать плоскость compinit работать. Если Вы находитесь в ситуации, где она не работает, Вы, возможно, должны обойти или вручную делать недействительным файл дампа.

Для пропуска использования файла дампа использовать compinit -D; это будет только влиять на текущую оболочку.

Для восстановления файла дампа удалите его и повторно выполнитесь compinit:

rm -i ${ZDOTDIR:-${HOME:?No ZDOTDIR or HOME}}/.zcompdump &&
compinit

Это будет влиять на текущую оболочку, существующие оболочки, которые выполняют плоскость compinit, и любые будущие оболочки.

13
27.01.2020, 19:30

Я обнаружил, что при работе с/разработке дополнений, которые находятся в файле с #compdef _foo foo, который мне нужно использовать при каждом редактировании:

unfunction _foo && compinit

, чтобы увидеть завершение обновленной команды fooс обновленными изменениями.

4
20.08.2021, 13:39

Теги

Похожие вопросы