zsh: почему и как исправить ошибку автодополнения команды: “trial”

Вопрос или проблема

Почему я получаю эту ошибку при использовании zsh и как это исправить?

Ошибка завершения при выполнении команды: "trial" "foo" "--_shell-completion" "zsh:2"
Если вывод ниже не помогает, вам, возможно, придется отредактировать этот файл и перенаправить stderr в файл.
Ожидалась функция завершения, но вместо этого получено:

Шаги воспроизведения:

zsh -f  # Запуск чистого zsh без каких-либо rc файлов
autoload -U compinit
compinit
trial foo  # Нажмите tab

Если я запускаю foobar foo<tab>, ошибок нет, при этом обе команды trial и foobar не являются исполняемыми. Если это не исполняемый файл или отсутствует файл завершения, то должно происходить завершение пути к файлу, что именно я и хочу, но trial кажется какой-то специальной командой, которая нарушает автозавершение? Обратите внимание, что trial или _trial отсутствуют в любом из директорий $fpath.

Тестировалось на zsh 5.8 (x86_64-ubuntu-linux-gnu) и zsh 5.9 (x86_64-apple-darwin23.0).

Это особенно проблема для кого-то, у кого действительно есть инструмент командной строки под названием trial, и zsh просто выдает ошибки.

Это сообщение вызвано файлом определения завершения Completion/Unix/Command/_twisted, из которого я цитирую:

Это файл завершения ZSH для команд Twisted. Он вызывает текущую командную строку с специальным параметром “–_shell-completion”, который обрабатывается twisted.python.usage. t.p.usage затем генерирует код zsh на stdout для обработки завершений для данной командной строки.

Таким образом, насколько я понимаю, для тех команд, которые определены здесь (т.е. twist, twistd, trial, conch, cftp, ckeygen, pyhtmlizer, tkconch) zsh пытается вызвать команду для генерации завершений на лету. Но если команда не установлена, это приведет к сбою, отсюда это загадочное сообщение об ошибке.

Наверное, два, может быть, три решения:

  1. Установите команду trial.

  2. Удалите файл определения завершения _twisted.

  3. Отключите завершение для trial, выполняя:

    compdef -d trial
    

Последний вариант, кажется, наиболее целенаправленным, но это зависит от вашего конкретного случая.

Ответ или решение

Ошибка автозавершения, связанная с командой trial, возникает из-за того, что Zsh пытается выполнить команду и сгенерировать код завершения на лету. Однако, если команда не установлена в системе, это приводит к ошибке, так как Zsh ожидает корректного определения функции завершения, но вместо этого получает сообщение об ошибке.

Причина, по которой вы видите сообщение об ошибке «Completion error running command: "trial"», заключается в том, что файл определения завершения Completion/Unix/Command/_twisted пытается вызвать команду trial с опцией --_shell-completion. Если trial отсутствует, это вызывает неудачу и, как следствие, появление указанной ошибки.

Возможные решения:

  1. Установите команду trial.
    Если команда trial вам нужна, убедитесь, что она установлена в вашей системе. Это можно сделать с помощью менеджеров пакетов, таких как pip, если trial является частью Python-пакета Twisted.

    pip install Twisted
  2. Удалите файл определения завершения _twisted.
    Если вы не планируете использовать команды Twisted, вы можете удалить файл завершения _twisted. Это решение окажется более радикальным и исключит любые другие проблемы, связанные с этим файлом.

    Обычно файлы определений завершения находятся в директории Completion/Unix/Command/. Найдите и удалите _twisted.

  3. Отключите завершение для команды trial.
    Если вам нужно сохранить другие функции завершения, вы можете просто отключить автозавершение для команды trial. Для этого выполните следующую команду в вашей оболочке Zsh:

    compdef -d trial

    Это решение наиболее целенаправленное и позволяет избежать ошибок, не влияя на другие функции автозавершения.

Заключение

Выбор среди предложенных решений зависит от ваших потребностей. Если вы регулярно работаете с trial, установите его. Если нет — закройте эту проблему с помощью одного из двух других вариантов. Убедитесь, что после внесения изменений вы перезапустили оболочку Zsh или обновили её конфигурации, чтобы изменения вступили в силу.

Оцените материал
Добавить комментарий

Капча загружается...