NeetEch

preztoをZDOTDIR付きでインストールする

こんにちは,ぎいとです.

デキる人はzshを使うみたいな風潮があると聞いたことがあるようなないような.筆者はデキない人ですがデキる人のマネから入るのでzshを使っています.

思っていたより記事が長くなりました.筆者の環境で失敗が起こったため,無駄な部分も含まれていますが優しい目で見てください.
なお,ZDOTDIRを指定する方向けに記事を作成したため,他サイトの記事における”${ZDOTDIR:-$HOME}”を”${ZDOTDIR}”としてコマンドを実行しております.ご注意ください.

さっさとインストールしたい方はこちら

そもそもpreztoってなに

zshを使っている人はとりあえずこれをインストールして良いカンジの見ために変更している人も多いのではないかと思いますが,そもそもpreztoってなんなんでしょうね.
preztoのREADME.mdには次のように説明されています.

Prezto is the configuration framework for Zsh; it enriches the command line interface environment with sane defaults, aliases, functions, auto completion, and prompt themes.

https://github.com/sorin-ionescu/prezto/README.md

日本語にすると「zshを使いやすくする」とかそんな感じです.そんな感じだと思います.日本語は便利ですね.

冗談はさておき見た目の変更以外にも結構デキるっぽいんですよね.インストール後確認してみると複数のモジュールが用意されていることが確認できます.
モジュールを読み込むと良く使うあのコマンドを短縮できたりするんです.gitを有効にした場合,gb -> git branch みたいなエイリアスが作成されたりします.やり方は後述
筆者は全然使いこなせてなかったのですが今後は慣れていきたい所存使いこなしたい所存

こんな感じで見ためを変更するだけじゃないんですね.こいつを今回はZDOTDIRを指定してからインストールしてみます.

注意点ですが,今後 「~/.zshrc にこれを書き込め」という指示は「 $ZDOTDIR/.zshrc にこれを書き込め」に読み替える必要があります.巷ではZDOTDIRを設定していないことを前提とした記事がほとんどです.これを忘れると.zshrcを用意したのに読まれてないみたいなことになります.

preztoのインストール

Ubuntu 20.04 LTS を例にインストールしていきます.その他のOSでも適宜読み替えていただけたら問題ないと思います.基本的にpreztoのREADME.mdに従いますのでそちらも参照.

$ sudo apt-get update
#  zshのインストール
$ sudo apt-get install zsh
#  ログインシェルの変更
$ chsh -s $(which zsh)

zshのインストールとログインシェルの変更です.ユーザのパスワードを求められると思います.環境によってはchshで失敗するかもしれませんが,再起動してみてもう一度.それでもダメなら/etc/shells に $ which zsh の出力結果を書き込み再チャレンジ.これでダメならもう頑張るしかないです.コメントください.


#  zsh起動
$ zsh
#  ~/.zconfig.d/ に設定ファイルをまとめる
% export ZDOTDIR="$HOME"/.zconfig.d
zsh_prefix

zshコマンド時に図のような画面になることがありますが,とりあえずキーボードから[q]と入力して脱出します.
zshは設定(ドット)ファイルが結構たくさん作られます.それ全て読み込むようなのでバラバラに管理したくない場合にはZDOTDIRをexportしましょう.タイトルの通りZDOTDIRを指定する前提で話を進めます.指定しない場合は,不具合が起こりますので他の記事やpreztoのREADME.mdを参照してください.
なお .zconfig.d という名前はお好きなものにして大丈夫ですが,後から変更するのは少しだけ面倒.ZDOTDIRという変数名は変更不可です.

次のようにして設定を残します.

#  再起動後も設定を保存  # /etc/zshenvの可能性もあるので既にあるどちらかのファイルに書く
% sudo vim /etc/zsh/zshenv

#  ファイルの最後でいいので次を記述
#  ディレクトリ名が 「.zconfig.d」の場合 最初の.に注意
zdotdir=zconfig.d
if [[ -d "$HOME"/."$zdotdir" ]]
then
    export ZDOTDIR="$HOME"/."$zdotdir"
fi
unset zdotdir

もちろんvimではないエディタでもOK.設定ファイルにZDOTDIRの環境を置いておかないと再起動のたびに設定することになるので/etc/zsh/zshenvにZDOTDIRを設定しておきます(参考,または man zsh).最後でもいいですがこのタイミングでしておくと安全です.


#  preztoをclone
% git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR}/.zprezto"
#  一応うまくいっているか確認
% ls -A "$ZDOTDIR"
.zprezto

#  ちょっとした設定と確認
% setopt EXTENDED_GLOB; setopt | grep extendedglob
extendedglob    # と出力されればOK

#  シンボリックリンクの作成
% for rcfile in "${ZDOTDIR}"/.zprezto/runcoms/^README.md(.N); do  
    ln -s "$rcfile" "${ZDOTDIR}/.${rcfile:t}"  
  done

GitHubからpreztoをcloneして,$ZDOTDIR/.zpreztoにおきます.
注意です.ちょっとした設定をして for 文でシンボリックリンクを作成していきますが,見かけ上できているのになぜか失敗する現象が発生.何度かチェックしたのですが,失敗することが多かったです.
リンクの作成は問題ないのですが,リンク先のファイルにアクセスできなくなってしまいます.cloneしたら一旦再起動する方がいいかもしれません.それでもできるかは不明

原因の予想がついたので追記.
筆者の実行時には,ZDOTDIRを相対パスで指定していたことが原因の可能性が高いです.シンボリックリンクの相対パスによる指定には若干の注意が必要でした.この記事では絶対パスによる指定としていますので,ここまでの手順通りであれば問題なく動作するはずです.

ということで確認として次のコマンドを入力してみます.

% cat ~/"${ZDOTDIR}"/.zshenv 

(zehenvでなくてもいいですが,)これで.zshenvの内容が読み込めているようなら成功しているはずです.読み込めていないような出力の場合には失敗してると考えていいでしょう.失敗した場合の処理は次です.成功している場合は不要です.


失敗した場合の処理

失敗した場合はunlinkコマンドで全てのシンボリックリンクを削除し再起動します.

#  作成したシンボリックリンクを削除
% for rcfile in $(find "${ZDOTDIR}" -maxdepth 1 -type l); do
    unlink "$rcfile"
  done

#  再起動
% reboot

# ログインしてターミナルを起動する 設定画面は[q]で脱出

# /etc/zsh/zshenvに設定を書いていない場合はもう一度
% export ZDOTDIR="$HOME"/.zconfig.d

# ちょっとした設定から再開
% setopt EXTENDED_GLOB; setopt | grep extendedglob
extendedglob

% for rcfile in "${ZDOTDIR}"/.zprezto/runcoms/^README.md(.N); do  
    ln -s "$rcfile" "${ZDOTDIR}/.${rcfile:t}"  
  done

確認してみましょう.

% cat ~/"${ZDOTDIR}"/.zshenv 

今度は成功すると思います.それでもできない場合は…コメントください.


本筋に戻ります.ターミナルを閉じて再度起動してみましょう.場合によってはPCの再起動が必要かも.次の画像のようになっていれば成功です.

sorin_style

初期設定から見ためを変更する

派手なのが好きならこれでいいですが,正直そんなカッコよくないので見ためは変更します.

% prompt -p
...

#  好きなテーマを決めたらthemeの名前を覚えて変更
% vim "$ZDOTDIR/.zpreztorc"
...
119行目  zstyle ':prezto:module:prompt' theme 'sorin'  の'sorin'を'pure'に変更して保存

最初のコマンドでお気に入りを見つけます.そのテーマの名前を覚えておきましょう.選ぶのが面倒だったらpureでいいと思います.他のはちょっと個性が過ぎるかな.シンプルにpureがおすすめです.
こんな感じ.

pure_style

いい感じでしょう.色は保留です.

モジュール

こっちが多分preztoの主役だと思います.あまり使いこなせてないので軽く触れるだけです.
冒頭で軽く触れましたが,こちらは使いこなせるとすごいのかもしれないモジュールたちです.初期設定のままで既にいくつかは有効になっているのですぐに実感できます.プロンプトの見ためが変わるのもpromptモジュールによるものですかね.多分.

デフォルトで有効になっているutilityモジュールを見てみます.モジュールそれぞれにREADME.mdが用意されているようです.

% cat "$ZDOTDIR/.zprezto/modules/utility/README.md" | less

英語なので読みづらいですがなにやら大量のエイリアスを作成しているようです.実際,

% alias

とかしてみると作った覚えのないエイリアスがズラリ.which-command以外はutilityモジュールが作ってくれてました.

prezto_utility_alias

1枚に収めようとしたら文字が小さくなりました.
よく使うであろうlsコマンド関連だけでも10個以上のエイリアスが作成されています.これらをカッコよく使いこなせる大人になりたい.

モジュールの追加

.zprezto/modulesには様々なモジュールが用意されています.大半の方々はgitを使っていると思いますので,とりあえずgitを例にモジュールを追加してみますが,基本的にやり方は同じです.vimが色々キモいのは気にしないでください.

.zperztorcの32行目から始まる,zstyle ‘:prezto:load’ pmodule に続くモジュールたちに倣って,’git’を加えればOK.ターミナルを再起動するとaliasがまた変化しているはずです.関数もいくつか用意されています.何気にgit-flow系のコマンドもエイリアスが作成されていますね.


脱線

なにやらプロンプトの出力も拡張することができるようですが,筆者の知識が足りないため断念.調べた限りでは,.zprezto/modules/prompt/functions/promtp_NAME_setup(シンボリックリンク)が存在しておりここになにやら書いていけばいいらしい.NAMEはプロンプトテーマ名で,筆者の場合は’pure’,初期のままなら’sorin’かと思われます.
このファイルに定義されている prompt_pure_setup 関数に,gitであれば zstyle ‘:prezto:module:git:info:context:subcontext’ format ‘string’ と書いておけばgit関連のフォーマットコードが使えるようになるらしいですがチョットワカランなので辞めました.

このあたりがわかっている人であれば,プロンプトをさらに自分好みに変更できるんだと思います.ガンバレ.


まとめ

preztoはzshをもっと使いやすくします.
インストールでは記事があまり多くなかったのでZDOTDIRを利用しています.失敗してもめげない心が大事です.
おまけ程度にモジュールについて調べたことを語りました.使いこなせる日はまだ遠い.

最後にもう一度注意ですが,今後「~/.zshrc にこれを書き込め」という指示は「 $ZDOTDIR/.zshrc にこれを書き込め」に読み替える必要があります.ターミナル起動のたびに注意書きを出力するなどの工夫をしましょう.

ご意見ご感想いただきたいです.また勉強したら戻ってくるかも?良いzshライフを〜

Follow me!