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
,
Что я пробовал:
rm ~/.zcompdump*
- Reinstalling oh-my-zsh
- Reinstalling zsh from source
- Добавление
/usr/share/zsh/functions
в$fpath
chown -R 755 /usr/share/zsh/functions
- 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 .
Примечание. В предварительном просмотре я не вижу ни курсива , ни жирного шрифта , поэтому они могут не отображаться.