[Zsh] Preztoを使ってお手軽にシェルを強化する

Powerline10k user customization 14
この記事は約15分で読めます。

経緯

CLIはあまり使いたくない。iniみたいなフォーマットの設定ファイルの手書きとかしたくない。そんな自分も色々な制約なりしがらみによってCLIを使わざるを得ないことがある。

何もカスタマイズしていないbashだと補完も弱くて不便。
でも、zshのカスタマイズ方法を調べて設定するのは面倒だからイヤ。

想定

想定環境

  • Ubuntu Linux 20.04/22.04 LTS x64で手順を確認
  • Zshのinstall手順以外は他のdistributionでも変わらないはず
  • Windows PCからSSH接続する(もしくはWSL2等の)ユースケースを想定

想定読者

  • CLI(コマンドラインインターフェース)初級者
    • SSHの接続方法は分かるし、CLIで基本的なコマンドを実行したこともあるけれど、bash/zsh等のカスタマイズはほとんどしたことがない
    • Windowsのアプリ・フォントのインストールは躓くことなく出来る
  • 自分なりのカスタマイズをしたい訳ではなく、それなりに万人向けの設定を簡単に済ませたい人
決め打ちで設定ではなく中身を理解してカスタマイズしたい人は他サイトやPreztoの公式ドキュメントへGO

実現したいこと

  • コンソールで様々な補完が効くようになる
  • Gitの現在のbranchなどの情報がプロンプトに表示される
  • 見た目がモダンになる

実現方法

  • ZshPreztoを使う
  • Powerlevel10kテーマを使う
  • syntax-highlighting, autosuggestionsを有効にする

手順

Nerdフォントのインストールとターミナルの設定

Nerdフォントのインストール

ターミナルにアイコンを表示させるには対応したフォントが必要。

Terminalを利用するPC(SSH接続するWindowsやUbuntuのGUIで直接表示するならUbuntu)に下記のようなNerd Font統合済みのフォントのいずれかをインストールし、Terminalのアプリに設定する。

よく分からない場合、合字(リガチャ)対応フォントや半角:全角比が1:2ではないフォントは避けた方が無難。
  • HackGen
    • HackGenNerd_vx.x.x.zipをダウンロードしてHackGenNerd-xxx.ttfもしくはHackGenNerdConsole-Regular.ttf(どちらか好みの方)をインストール
  • UDEV Gothic
    • UDEVGothic_NF_vx.x.x.zipをダウンロードしてUDEVGothicNF-xxx.ttfをインストール
  • PlemolJP
    • PlemolJP_NF_vx.x.x.zipをダウンロードしてPlemolJPConsoleNF-xxx.ttfをインストール
  • Firge
    • FirgeNerd_vx.x.x.zipをダウンロードしてFirgeNerd-xxx.ttfもしくはFirgeNerdConsole-xxx.ttf(どちらか好みの方)をインストール
  • Cica
    • Cica_vx.x.x.zipをダウンロードして、入っているCica-xxx.ttfをインストール
どれが良いか分からない場合、恐らく一番メジャーと思われるHackGenNerdをまずはインストールしてあとで好みで変えればOK。

ターミナルアプリのフォント設定

先ほどインストールしたフォントをターミナルアプリに設定する。以下は代表例。

ターミナルアプリによってはフォントを設定しても期待通りの表示が得られないこともある。使い慣れたターミナルアプリで上手くいかない場合、下記のようなモダンなターミナルアプリを試してみて欲しい。
Windows Terminal

Windows TerminalはMicrosoft純正のターミナルアプリ。GitHubでも公開されている。

Font configuration for Windows Terminal

「既定値」もしくは対象のプロファイルの外観のフォント フェイスをNerdフォントを統合したフォントに置き換える。

Windows TerminalはHackGenNerdだと文字化けして上手く表示されなかったため、HackGenNerd Consoleを指定している。
Tabby

推しのターミナルアプリを訊かれたらTabbyを挙げる。モダンなcross-platformのターミナルアプリ。

Font configuration for Tabby

設定の外観のところにあるフォントから設定する。しかしなぜかインストールしたフォント候補に出てこないし1文字ずつ入力しようとしても上手くいかない。(v.1.0.176)

Ctrl+Vでペーストなら入力出来るので、HackGenNerdのようなフォント名をコピーしておいて貼り付けることで設定する。

Visual Studio Code

最強エディタと名高いVSCodeの内蔵ターミナル。

Font configuration for VSCode

Terminalのフォントだけを設定したい場合Terminal > Integrated: Font FamilyHackGenNerdのような値を設定する。空欄にすればエディタのフォントと同じになるので、エディタフォント側を設定しても良い。

Zshのインストール

Zshの存在確認

Ubuntuはdefaultはbashになっている。以下で確認出来る。

$ echo $SHELL
/bin/bash

Zshがインストールされているかは次で確認出来る。Ubuntuの場合初期状態では存在しない。

$type zsh
# 存在する場合の出力
zsh is /usr/bin/zsh
# 存在しない場合の出力
-bash: type: zsh: not found

Zshのインストール

Zshが存在しない場合はapt(Ubuntu/Debianの場合)でインストールする。aptで提供されているものよりも新しいversionがいいという人や、sudo出来る権限がない人はHomebrewで入れても良いが、依存関係が多くて時間がかかるので注意。

$ sudo apt update && sudo apt install -y zsh

Preztoのインストール

Zshの設定ファイルの削除

既にzshがインストールされていた環境では、Zsh向けの設定ファイルが既に$HOME以下に存在している可能性がある。($ZDOTDIRをカスタマイズ済みの人はこの記事の対象者ではない。)下記のようなファイルが存在するとPreztoのインストールが出来ないので、先に移動するか消しておく。

  • .zshenv
  • .zprofile
  • .zshrc
  • .zlogin
$ mkdir ~/.zsh_config_backup
$ mv ~/.zshenv ~/.zsh_config_backup
$ mv ~/.zprofile ~/.zsh_config_backup
$ mv ~/.zshrc ~/.zsh_config_backup
$ mv ~/.zlogin ~/.zsh_config_backup

Zshの起動

$ zsh

設定ファイルがない状態でzshを起動すると、せっかく消した設定ファイルを作成するためのウィザードが起動してしまう。

This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~). This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q) Quit and do nothing. The function will be run again next time.

(0) Exit, creating the file ~/.zshrc containing just a comment.
That will prevent this function being run again.

(1) Continue to the main menu.

(2) Populate your ~/.zshrc with the configuration recommended
by the system administrator and exit (you will need to edit
the file by hand, if so desired).

--- Type one of the keys in parentheses ---

ここで設定ファイルを作ってしまうと上の手順が水の泡なので、qを選ぶこと。

PreztoをGit clone

公式のREADMEの通り、zshから下記コマンドを実行するだけ。

git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

$XDG_CONFIG_HOMEにインストールする方法も書いてあるが、分かっていて意図的にそうしたい人以外は関係ないので読み飛ばしてOK。

会社がproxy環境でgit clone出来ないって人はGoogle先生に聞こう

そもそもgitコマンドが無いって言われてしまった人は下記でインストールしてから上のコマンドを実行。

$ sudo apt update && sudo apt install -y git

Zshの設定ファイルのシンボリックリンクを作成

下記のコマンドをshellに貼り付けて実行し、$HOME以下にPreztoのzshの設定ファイルへのシンボリックリンクを張る。

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

もしZshの設定ファイルが残っているとここでエラーが出る。その場合は上の手順に戻ってやり直すこと。

Preztoのカスタマイズ

syntax-highlighting & autosuggestionsの有効化

以下の2つが便利なので有効化する。

syntax-highlighting: 存在しない/するコマンドで色が変わるなどの効果が得られる
autosuggestions: コマンド履歴からコマンドの補完候補が表示されるようになる
$ nano ~/.zpreztorc

nanoなどのエディタで開いたら下記のようなmoduleを定義している行を探す。

# Set the Prezto modules to load (browse modules).
# The order matters.
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'history-substring-search' \
'prompt'

このリストにsyntax-highlightingautosuggestionsを追加する。

公式ドキュメント曰く、下記順番で登録が必要という制約があるとのことなので、下に書き足さないこと。
syntax-highlighting>history-substring-search>autosuggestions>prompt

この順番を守って記載すると次のようになる。

# Set the Prezto modules to load (browse modules).
# The order matters.
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'syntax-highlighting' \
'history-substring-search' \
'autosuggestions' \
'prompt'

テーマをpowerlevel10kに設定

Gitのbranch情報やタスクの実行時間など有用な情報がプロンプトに表示されるようになる
見た目もモダンになり、対話形式のウィザードで好みに合わせて設定出来る

引き続き.zpreztorcファイルを編集。テーマを設定している以下の行を検索する。

# Set the prompt theme to load.
# Setting it to 'random' loads a random theme.
# Auto set to 'off' on dumb terminals.
zstyle ':prezto:module:prompt' theme 'sorin'

'sorin'となっている部分を'powerlevel10k'に変更する。

# Set the prompt theme to load.
# Setting it to 'random' loads a random theme.
# Auto set to 'off' on dumb terminals.
zstyle ':prezto:module:prompt' theme 'powerlevel10k'

変更したら保存(Ctrl+O)してエディタを終了(Ctrl+X)し、zshを実行し直す。

$ exit
$ zsh

Zshが起動するとPowerlevel10kの設定ウィザードが起動する。

Powerlevel10kの初期設定 (1)

   This is Powerlevel10k configuration wizard. You are seeing it because you haven't
  defined any Powerlevel10k configuration options. It will ask you a few questions and
                                 configure your prompt.

                    Does this look like a diamond (rotated square)?
                      reference: https://graphemica.com/%E2%97%86

                                     --->    <---

(y)  Yes.

(n)  No.

(q)  Quit and do nothing.

Choice [ynq]: 

最初にダイヤ型の表示が出来ているか訊かれる。yで回答出来ない場合は、ターミナルやフォント等に問題がある可能性あり。

                              Does this look like a lock?
                     reference: https://fontawesome.com/icons/lock

                                     --->    <---

(y)  Yes.

(n)  No.

(r)  Restart from the beginning.
(q)  Quit and do nothing.

Choice [ynrq]: 

次は錠アイコン。yで回答出来るのが期待。

                   Does this look like a Debian logo (swirl/spiral)?
                  reference: https://debian.org/logos/openlogo-nd.svg

                                     --->    <---

(y)  Yes.

(n)  No.

(r)  Restart from the beginning.
(q)  Quit and do nothing.

Choice [ynrq]: 

次はDebianのアイコン。yで回答出来るのが期待。

                      Do all these icons fit between the crosses?

                             --->  XXXXXXXXX  <---

(y)  Yes. Icons are very close to the crosses but there is no overlap.

(n)  No. Some icons overlap neighbouring crosses.

(r)  Restart from the beginning.
(q)  Quit and do nothing.

Choice [ynrq]: 

こちらはオーバーラップして表示されるnが期待。何というトラップ。

オーバラップ表示されない場合、期待通りの表示が出来ないので、ターミナルやフォント等を見直す必要がある。

ここまでの表示で問題があった場合、qで終了することが出来る。もし正しく表示出来る条件を満たせないまま設定を進めてしまった場合や、設定を変えたい場合、下記コマンドを実行すれば設定ウィザードを最初から実行出来る。

$ p10k configure

Powerlevel10kの初期設定 (2)

ここから先は純粋に好みに基づくカスタマイズになる。以下に選択の例は示すが、原則として自分の好みで選べば問題ない。

Powerline10k user customization 01

3 Rainbowを選択。

上記質問画面が表示されず、次の質問画面に遷移してしまう場合、使っているターミナルアプリの制約でRainbowのような複雑な表示が出来ない状況にある。qを選択して設定を終了し、ターミナルアプリの設定を見直して最初からやり直した方が良い。

Powerline10k user customization 02

1 Unicodeを選択。

Powerline10k user customization 03

2 24-hour formatを選択。

Powerline10k user customization 04

1 Angledを選択。

Powerline10k user customization 05

2 Blurredを選択。

Powerline10k user customization 06

2 Blurredを選択。

Powerline10k user customization 07

2 Two linesを選択。

Powerline10k user customization 08

3 Solidを選択。

Powerline10k user customization 09

4 Fullを選択。

Powerline10k user customization 10 

2 Lightを選択。

Powerline10k user customization 11

2 Sparseを選択。

Powerline10k user customization 12

2 Many iconsを選択。

Powerline10k user customization 13

1 Conciseを選択。

Powerline10k user customization 14

n Noを選択。

Powerlevel10kの初期設定 (3)

以降の設定は好みで選ぶカスタマイズではないので、特別な理由がなければrecommendedの選択肢を選ぶ。

Powerline10k user customization 15

1 Verboseを選択。

Powerline10k user customization 16

y Yesを選択。

Zshをログインシェルに変更

上述のカスタマイズステップが終わったらシェルの使い勝手をある程度試してみることを推奨する。

もし合わなかったら、p10k configureでPowerlevel10kのカスタマイズをやり直す、違うテーマを使うなどの方法で再調整する。

使い勝手に問題ないことを確認したら、以下のコマンドを実行してユーザーのログインシェル(デフォルトのシェル)をzshに変える。

$ chsh -s `which zsh`

再ログイン(SSHであれば切断して再接続)すると、ログイン直後からzshが実行され、Preztoで設定したテーマが反映されている。

まとめ

  • Preztoを使うとお手軽にZshの表示や補完などを強化出来る。
  • Powerlevel10kテーマを使うと簡単に美しいシェル表示を実現出来る。ただしNerdフォントが必要。
  • もし使っていないなら、tmux, byobuなどのターミナルマルチプレクサをインストール・設定するのが次のステップ。
0 0 votes
Rate Article
Subscribe
Notify of

0 Comments
Inline Feedbacks
View all comments
タイトルとURLをコピーしました