経緯
CLIはあまり使いたくない。iniみたいなフォーマットの設定ファイルの手書きとかしたくない。そんな自分も色々な制約なりしがらみによってCLIを使わざるを得ないことがある。
想定
想定環境
- Ubuntu Linux 20.04/22.04 LTS x64で手順を確認
- Zshのinstall手順以外は他のdistributionでも変わらないはず
- Mac向けの情報が知りたい人はGoogle先生に聞こう
- Windows PCからSSH接続する(もしくはWSL2等の)ユースケースを想定
想定読者
- CLI(コマンドラインインターフェース)初級者
- SSHの接続方法は分かるし、CLIで基本的なコマンドを実行したこともあるけれど、bash/zsh等のカスタマイズはほとんどしたことがない
- Windowsのアプリ・フォントのインストールは躓くことなく出来る
- 自分なりのカスタマイズをしたい訳ではなく、それなりに万人向けの設定を簡単に済ませたい人
実現したいこと
- コンソールで様々な補完が効くようになる
- Gitの現在のbranchなどの情報がプロンプトに表示される
- 見た目がモダンになる
実現方法
- ZshとPreztoを使う
- Powerlevel10kテーマを使う
syntax-highlighting
,autosuggestions
を有効にする
手順
Nerdフォントのインストールとターミナルの設定
Nerdフォントのインストール
ターミナルにアイコンを表示させるには対応したフォントが必要。
Terminalを利用するPC(SSH接続するWindowsやUbuntuのGUIで直接表示するならUbuntu)に下記のようなNerd Font統合済みのフォントのいずれかをインストールし、Terminalのアプリに設定する。
- 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
をインストール
ターミナルアプリのフォント設定
先ほどインストールしたフォントをターミナルアプリに設定する。以下は代表例。
Windows Terminal
Windows TerminalはMicrosoft純正のターミナルアプリ。GitHubでも公開されている。
「既定値」もしくは対象のプロファイルの外観のフォント フェイスをNerdフォントを統合したフォントに置き換える。
Tabby
推しのターミナルアプリを訊かれたらTabbyを挙げる。モダンなcross-platformのターミナルアプリ。
設定の外観のところにあるフォントから設定する。しかしなぜかインストールしたフォント候補に出てこないし1文字ずつ入力しようとしても上手くいかない。(v.1.0.176)
Ctrl+Vでペーストなら入力出来るので、HackGenNerd
のようなフォント名をコピーしておいて貼り付けることで設定する。
Visual Studio Code
最強エディタと名高いVSCodeの内蔵ターミナル。
Terminalのフォントだけを設定したい場合Terminal > Integrated: Font Family
にHackGenNerd
のような値を設定する。空欄にすればエディタのフォントと同じになるので、エディタフォント側を設定しても良い。
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つが便利なので有効化する。
$ 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-highlighting
とautosuggestions
を追加する。
この順番を守って記載すると次のようになる。
# 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に設定
引き続き.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? ---> XXXXXXXXX <--- (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)
ここから先は純粋に好みに基づくカスタマイズになる。以下に選択の例は示すが、原則として自分の好みで選べば問題ない。
3 Rainbow
を選択。
1 Unicode
を選択。
2 24-hour format
を選択。
1 Angled
を選択。
2 Blurred
を選択。
2 Blurred
を選択。
2 Two lines
を選択。
3 Solid
を選択。
4 Full
を選択。
2 Light
を選択。
2 Sparse
を選択。
2 Many icons
を選択。
1 Concise
を選択。
n No
を選択。
Powerlevel10kの初期設定 (3)
以降の設定は好みで選ぶカスタマイズではないので、特別な理由がなければrecommendedの選択肢を選ぶ。
1 Verbose
を選択。
y Yes
を選択。
Zshをログインシェルに変更
上述のカスタマイズステップが終わったらシェルの使い勝手をある程度試してみることを推奨する。
もし合わなかったら、p10k configure
でPowerlevel10kのカスタマイズをやり直す、違うテーマを使うなどの方法で再調整する。
使い勝手に問題ないことを確認したら、以下のコマンドを実行してユーザーのログインシェル(デフォルトのシェル)をzshに変える。
$ chsh -s `which zsh`
再ログイン(SSHであれば切断して再接続)すると、ログイン直後からzshが実行され、Preztoで設定したテーマが反映されている。
まとめ
- Preztoを使うとお手軽にZshの表示や補完などを強化出来る。
- Powerlevel10kテーマを使うと簡単に美しいシェル表示を実現出来る。ただしNerdフォントが必要。
- もし使っていないなら、tmux, byobuなどのターミナルマルチプレクサをインストール・設定するのが次のステップ。