ubuntu 18.04 LTSをメインマシンで使用しています。ubuntuではdefaultのshellがbashですよね。bashももちろん悪くはないのですが、ここ数年はzshの柔軟さが気に入ってます。
という事で、今回はzshの環境構築を。
zshへの切り替えはzshのパッケージをインストールしてchshするだけで良いのですが、それだけではカスタマイズがちょっと面倒という事で、preztoという環境を利用させてもらっています。
https://github.com/sorin-ionescu/prezto
環境構築手順
- zshインストール&起動
- zsh起動
- preztoインストール
- シェル切り替え
- 各種設定
zshインストール&起動
これはまぁシンプルにいきましょう。
$ sudo apt install zsh
$ zsh
zshを起動すると、次のようなメッセージが表示されます。(初回起動時)
zshでは各種設定を .zshrc や .zprofile などに記載するのですが、これの初期ファイルを作るかどうか聞いているようですね。preztoを使う場合、preztoの設定ファイルで更新しますので、ここでは作成しない (q) を選択で良いです。
まずはシェルがzshに切り替わりますので、プロンプト表示が変わります。一見色気もなくてbashの方がよか〜とか思うかもしませんが、それはこれから設定するという事で。
prezroインストール
githubの手順説明の通りに進めます。まずはcloneですね。
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git ${ZDOTDIR:-$HOME}/.zprezto
ここでホームディレクトリの指定方法が bash と違う事に気づくと思います。bashだったら $HOME だけで良かったのにと。いえ、zshでも $HOME で良いんです。ただzshは仮想環境も考慮されているようで、${ZDOTDIR}を使うことで各種設定ファイルの保存ディレクトリを変更する事ができるわけですね。ホームディレクトリに .zなんちゃら ファイルがいくつもできるのが嫌な人にも朗報。とは言え、関連ファイルは6ファイルなので、仮想環境を作らない人は気にしなくても良いかも。
さて、preztoの設定ファイルをホームにリンクします。
$ setopt EXTENDED_GLOB
$ for rcfile in ${ZDOTDIR:-$HOME}/.zprezto/runcoms/^README.md(.N); do
ln -s $rcfile ${ZDOTDIR:-$HOME}/.${rcfile:t}
done
for〜doneまでが1行です。改行すると for> とか表示が出ますんで、気にせず続けて入力しましょう。
さて、ここで少し面白いのが ${rcfile:t} ですかね。これzshのmodifierってやつでして、$rcfile に記録されているファイルパスからファイル名だけを取得する方法です。bashで言うところのdirnameやbasenameでパス分解していたのと同じような処理ができます。
さて、ここまでくるとホームディレクトリに以下のようなファイル(正確にはシンボリックリンク)ができているはずです。
- .zlogin
- .zlogout
- .zpreztorc
- .zprofile
- .zshenv
- .zshrc
これらは全てcloneしたリポジトリ内のファイルにリンクされています。カスタマイズが必要になったら、実ファイルを自分のホームディレクトリにコピーして編集する方が良いでしょうね。
shell切り替え
まずは一旦zshを抜けて、再度起動してみましょう。
$ exit
$ zsh
どうでしょう?いきなり色付きの派手目の表示になったかと。ちゃんと動いてそうであればshの切り替えをしましょう。
$ chsh -s `which zsh`
これで次回ログインからzshがディフォルトで起動するようになります。zshではファイル名の大文字/小文字を問わない曖昧なマッチングやオプション等の候補表示など、かなりリッチな機能が提供されています。手に馴染めば使いやすくなるかと。