ZSH completion functions broken

My oh-my-zsh install which has been working for almost a year has just broken. When I open a terminal, I get:

/home/marcel/.oh-my-zsh/lib/theme-and-appearance.zsh:2: colors: function definition file not found
/home/marcel/.oh-my-zsh/oh-my-zsh.sh:78: compinit: function definition file not found
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:80: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:93: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:100: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:109: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:119: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:129: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:138: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:144: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:147: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:150: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:153: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:163: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:166: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:168: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:182: command not found: compdef
/home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:193: command not found: compdef
$SPACESHIP_PROMPT_TRUNC is deprecated. Use $SPACESHIP_DIR_TRUNC instead.
spaceship_setup:3: add-zsh-hook: function definition file not found
spaceship_setup:4: add-zsh-hook: function definition file not found
$SPACESHIP_PROMPT_TRUNC is deprecated. Use $SPACESHIP_DIR_TRUNC instead.
spaceship_setup:3: add-zsh-hook: function definition file not found
spaceship_setup:4: add-zsh-hook: function definition file not found

I have looked around and a lot of other answers suggest running compaudit, Running this gives me zsh: compaudit: function definition file not found,

Что я пробовал:

  1. rm ~/.zcompdump*
  2. Reinstalling oh-my-zsh
  3. Reinstalling zsh from source
  4. Добавление /usr/share/zsh/functions в $fpath
  5. chown -R 755 /usr/share/zsh/functions
  6. Loading and running compaudit Внутри zsh -f

Моя среда:

  • uname -a: Linux Hermes 4.11.6-1-ARCH #1 SMP PREEMPT Sat Jun 17 08:19:42 CEST 2017 x86_64 GNU/Linux
  • zsh --version: zsh 5.3.1 (x86_64-unknown-linux-gnu)
  • which zsh: /usr/local/bin/zsh

Редактировать:

I have confirmed that it is a permissions problem. Если я сделаю

sudo zsh -f
autoload -U compaudit
compaudit

Команда работает как положено. Я тогда сделал

sudo chmod 777 /usr/share/zsh/ -R # Just for testing I promise

and I still got zsh: compaudit: function definition file not found при беге compaudit,

Я тоже пробовал

sudo chown user:users /usr/share/zsh/ -R

and it's still not working. If all these files are owned by my user AND are 777 how does zsh work as root and not as my user?

3 ответа

Решение

Согласно подсказке в проблемах установки с цветами, плагином compinit и git # 4757, кажется, что проверка "содержимого переменной $FPATH" содержит правильный путь к месту установки функций, которое должно помочь решить проблему.

Кроме того, копирование содержимого zsh в такое место, как корень или путь, уже определенный в $FPath может помочь решить и эту проблему.

Первое, что нужно сделать, это проверить содержимое переменной FPATH: echo $FPATH. В нормальной ситуации возвращаем что-то подобное: /home/charmander/.oh-my-zsh/plugins/git:/home/charmander/.oh-my-zsh/functions:/home/charmander/.oh-my-zsh/completions:/home/charmander/.oh-my-zsh/plugins/python:/home/charmander/.oh-my-zsh/plugins/pip:/home/charmander/.oh-my-zsh/plugins/git:/home/charmander/.oh-my-zsh/functions:/home/charmander/.oh-my-zsh/completions:/usr/share/zsh/site-functions:/usr/share/zsh/5.0.2/functions,

В моем случае это вернуло: /opt/intel/composer_xe_2011_sp1.7.256/mkl/include, Когда я пытаюсь удалить.oh-my-zsh и запустить только zsh вернул это: /usr/share/zsh/5.0.2/scripts/newuser:6: zsh-newuser-install: function definition file not found, Поиск в Интернете Я нашел этот отчет об ошибке: zsh: во многих определениях функций отсутствуют zsh-newuser-install, compinit и т. Д., Которые говорят, что может иметь переменную перезапись, сделанную компилятором Intel: /

Таким образом, можно обойти эту проблему, вставив следующие строки в ваш.bash_profile, если вы не можете запустить эту команду chsh -s $(которая zsh).

FPATH=/home/modelagem/beatriz.fonseca/.oh-my-zsh/plugins/python:/home/modelagem/beatriz.fonseca/.oh-my-zsh/plugins/pip:/home/modelagem/beatriz.fonseca/.oh-my-zsh/plugins/git:/home/modelagem/beatriz.fonseca/.oh-my-zsh/functions:/home/modelagem/beatriz.fonseca/.oh-my-zsh/completions:/usr/share/zsh/site-functions:/usr/share/zsh/5.0.2/functions

export FPATH

источник

Кроме того, согласно подсказке о цветах: файл определения функции не найден # 4607, похоже, что другие решили эту проблему, добавив $HOME/usr/share/zsh/'version of zsh'/functions чтобы решить это, как установка Zsh как $HOME/usr может вызвать эту проблему.


Дальнейшее чтение

   FPATH  The search path for function definitions.  The directories in this  path  are  searched
                 for  a  file  with the same name as the function or command when a function with the -u
                 attribute is referenced and when a command is not found.  If an  executable  file  with
                 the name of that command is found, then it is read and executed in the current environ-ment. environment.
                 ment.  Unlike PATH, the current directory must be represented explicitly by  .   rather
                 than by adjacent : characters or a beginning or ending :.

источник


9.1 Функции автозагрузки

Функция может быть помечена как неопределенная с помощью встроенной функции автозагрузки (или "functions -u" или "typeset -fu"). У такой функции нет тела. Когда функция выполняется в первый раз, оболочка ищет ее определение, используя элементы переменной fpath.

источник

Я просто хотел добавить краткое замечание, что эта ошибка также может произойти, если у вас установлены две отдельные версии ZSH. Убедитесь, что в вашей FPATH нет ничего, что было бы несовместимо с версией ZSH, которую вы используете для своей реальной оболочки входа в систему.

Я нашел подсказку или, по крайней мере, другой случай, когда это не удается. Это также помещает? часть? вина на зш. Убедитесь, что вы действительно отслеживаете, где происходят ваши ошибки. Я перехожу на zsh с bash и стараюсь сохранить как можно больше общего в своих файлах .rc. Одна вещь, которая сейчас терпит неудачу, — это такие назначения (идиома BASH):

      : ${*var*:=DEF_VAR_VAL}
zsh: :: function definition file not found
# `:=' may also be one of =, :=, etc.
# Oddly, the operator works anyway and *var* is set if needed.
# However, the following works w/nary a problem:
var=${var-DEV_VAR_VAL}
# as does:
true ${var:=DEF_VAR_VAL}
# Odd, because `:' is supposed to be an alias for true(1)

Док все еще говорит:должно работать, и раньше это работало.

: [ arg ... ] Эта команда ничего не делает, хотя выполняется [sic] обычное расширение аргументов , что может повлиять на параметры оболочки. Возвращается нулевой статус выхода.

Источник: http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html .

Примечание. В предварительном просмотре я не вижу ни курсива , ни жирного шрифта , поэтому они могут не отображаться.

Другие вопросы по тегам