LoginSignup
28
24

More than 5 years have passed since last update.

zshで"autoload -Uz compinit && compinit -u"を実行すると"compinit:473: bad floating point constant"のエラーが出る

Posted at

発生箇所を見てみる。

$ locate compinit
    /usr/share/zsh/functions/Completion/bashcompinit
    /usr/share/zsh/functions/Completion/compinit
if [[ -f "$_comp_dumpfile" ]]; then
  if [[ -n "$_i_check" ]]; then
    read -rA _i_line < "$_comp_dumpfile"
    if [[ _i_autodump -eq 1 && $_i_line[2] -eq $#_i_files &&
        $ZSH_VERSION = $_i_line[4] ]]
    then
      builtin . "$_comp_dumpfile"
      _i_done=yes
    fi
  else
    builtin . "$_comp_dumpfile"
    _i_done=yes
  fi
fi

$_comp_dumpfile があやしい!

$ file ~/.zcompdump 
    /home/ore/.zcompdump: symbolic link to `/home/ore/Dropbox/dotfiles/.zcompdump'

ウッ 他の環境かなんかのゴミファイルが同期されてた……

unlink ~/.zcompdump
rm ~/Dropbox/dotfiles/.zcompdump
exec zsh

でOKになった。

実験

touch .zcompdump
dd if=/dev/zero of=.zcompdump  bs=1024000 count=1
ln -s /dev/null ~/.zcompdump

あたりは ~/.zcompdump が正常なものに上書きされるので上記問題は出なかった。
であるので、zcompdumpとしては正常なんだけどzshバージョン差異などで解釈時にエラーが出ているということなんだと思った。

.zcompdump とは?

compinit の実行を高速化するために、ダンプされた設定ファイルが生 成され、今後の起動ではこれが読まれる。これは初期設定であるが、 -D オプションをつけて compinit を呼べば無効にすることができ る。ダンプファイルは初期化ファイルと同じディレクトリ中(例えば $ZDOTDIR や $HOME)の .zcompdump である。あるいは、 `compinit -d dumpfile' で明示的にファイル名を与えることがで きる。次回の compinit 呼び出しでは、全初期化を行う代わりにダンプ ファイルを読む。

zsh: Completion System

中身は補完コマンドの初期化設定。zshスクリプトとして読み込みできる。

source ~/.zcompdump

よりゆるふわな結論

zshの補完で何かしらうまくいかないことがあったら~/.zcompdump を一旦消せ

28
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
24