dorapon2000’s diary

忘備録的な。CTFやってます。

macをHigh Sierraにアップデートしたらoh-my-zshでタブ補完ができなくなった

1年ぶりのブログ更新になってしまいました。

ブログにまとめようとメモはたくさん残しているんですが、メモで満足してしまう感があります。

環境

さて、今のmacのターミナル環境はiterm2にzshとoh-my-zshを入れているのですが、気づかぬうちにタブ補完ができなくなりました。

1単語目ならコマンドの候補が、2単語目以降はファイルの候補が出てくるはずです。

タブを押してもボンボンというビープ音しか聞こえません。

自分のようなせっかちな人のために結論から述べると、High Sierraにアップデートしたことでoh-my-zshで謎の不具合が発生したことが原因です。

当初はzshからbashに切り替えてもタブ補完はできず、zshとoh-my-zshをアップデートしてもできず。

しかし、iterm2ではなくmacに初期搭載されているターミナルで試すとタブ補完できるということからiterm2に問題があるのだと思っていました。

High Sierraがiterm2のタブキーの機能を上書きしてしまったという当たりをつけて検索しても解決出来ませんでした。

結局放置してファイル名は長らくタイプしていました。

解決策

最近改めて検索したところ、oh-my-zshgithub issueに解決策が投稿されていました。

1nv3rse commented on 3 Dec 2016

I have solved it! in .oh-my-zsh/oh-my-zsh.sh, look at 14th line:

:${ZSH_DISABLE_COMPFIX:=true}

turn true to false, save it,then execute source ~/.zshrc ,restart your terminal,you will know some directory which are insecure,then execute chmod 755 <insecure-directory>, at last, back to .oh-my-zsh/oh-my-zsh.sh,the 14th line,turn false to true, and source ~/.zshrc

it will be solved!!!

github.com

まずホームディレクトリ以下にある.oh-my-zsh/oh-my-zsh.shの14行目をfalseにします。

 $ vim ~/.oh-my-zsh/oh-my-zsh.sh

.zshrcを再読込し、ターミナルを再起動します。

 $ source ~/.zshrc

すると次のようなメッセージがoh-my-zshから出ます。

Last login: Tue Feb 27 22:12:50 on ttys000
[oh-my-zsh] Insecure completion-dependent directories detected:
drwxrwxr-x    5 dorapon2000  admin    160  7  4  2015 /usr/local/Cellar/zsh/5.0.5/share/zsh
drwxrwxr-x  915 dorapon2000  admin  29280  7  4  2015 /usr/local/Cellar/zsh/5.0.5/share/zsh/functions
[oh-my-zsh] For safety, completions will be disabled until you manually fix all
[oh-my-zsh] insecure directory permissions and ownership and restart oh-my-zsh.
[oh-my-zsh] See the above list for directories with group or other writability.

[oh-my-zsh] Insecure completion caches also detected:
-rw-r--r--  1 dorapon2000  staff  1090  2 27 22:33 /Users/dorapon2000/.zcompdump-dorapon2000-MBA-5.0.5
[oh-my-zsh] Moving to "/Users/dorapon2000/.oh-my-zsh/cache/zcompdump-bad/"...

/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:81: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:95: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:102: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:115: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:125: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:135: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:144: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:150: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:153: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:156: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:159: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:169: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:172: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:174: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:188: command not found: compdef
/Users/dorapon2000/.oh-my-zsh/plugins/git/git.plugin.zsh:200: command not found: compdef

上のファイルパスが示されている2行に注目して、それらに対して権限を755にします。

 $ chmod 755 /usr/local/Cellar/zsh/5.0.5/share/zsh
 $ chmod 755 /usr/local/Cellar/zsh/5.0.5/share/zsh/functions

再び~/.oh-my-zsh/oh-my-zsh.shの14行目をtrueに戻せば.zshrcを再読込すればタブ補完が復活します!

 $ vim ~/.oh-my-zsh/oh-my-zsh.sh
 $ source ~/.zshrc

具体的な原因やなぜ復活するのかなどの疑問は塵となり海未の藻屑と化しました。

issueではタブキーをオーバーライドしてHigh Sierraのキー設定を上書きした方もいらっしゃるようです。

検索した当初は同じように悩んでる人がたくさんいると思ってたのですが、日本語記事は見当たらず、そんな人の助けになれば幸いです。

参考

stackoverflow.com