はじめに
普段使っているiTerm2
の設定を改めて行おうと思った際、以前設定したときのやり方を完全に忘れていたので、次にクリーンインストールなどを行う際に備えて手順を残しておこうと思います。
※2023/03/12 EC2・Linux向けの記事も書きました。
iTerm2でタイムスタンプ付きのログを出力
iTerm2
のログ出力設定はiTerm2
のメニューから「Settings」→「Profiles」の「Session」タブから行えます。
職場の同僚に聞くとタイムスタンプ付きのログが出力されていないと言っていた人もいたので以前はデフォルト値が違っていたのかもしれませんが、最新版であれば「Automatically log session input to files in:」をチェックしてログの出力ディレクトリを指定し、「Log plain text」をチェックしてログの表示を見やすくすることで以下のログ出力例のようにタイムスタンプ付きで表示されるかと思います。
[2023/02/05 10:48:24.675 AM] Last login: Sun Feb 5 10:47:35 on ttys001
[2023/02/05 10:48:24.763 AM] ~ ssh -l ec2-user -i ~/keypair/test.pem xx.xx.xx.xx
[2023/02/05 10:48:27.521 AM] Last login: Sun Feb 5 01:47:39 2023 from xxxx.xxxx.xx.xx.jp
[2023/02/05 10:48:27.521 AM] __| __|_ )
[2023/02/05 10:48:27.521 AM] _| ( / Amazon Linux 2 AMI
[2023/02/05 10:48:27.521 AM] ___|\___|___|
[2023/02/05 10:48:27.521 AM] https://aws.amazon.com/amazon-linux-2/
[2023/02/05 10:48:27.521 AM] 14 package(s) needed for security, out of 14 available
[2023/02/05 10:48:27.521 AM] Run "sudo yum update" to apply all updates.
[2023/02/05 10:48:27.545 AM] [ec2-user@ip-10-1-0-29 ~]$ exit
[2023/02/05 10:48:28.784 AM] ログアウト
もし、上記の設定を行ってもタイムスタンプが表示されない場合は、「Advanced」の検索ボックスに「timestamp」と入力することで以下「Session」の項目が表示されるので、「When logging plain text, include timestamps for each line?」を「Yes」にします。
もちろん、「No」にすることでタイムスタンプ表示を行わないようにすることもできるので、タイムスタンプを表示させたくない場合は「No」としてください。
ウィンドウの右側にタイムスタンプを表示
上記の「Profiles」→「Session」タブから「Show timestamps」の設定を変更することで、ウィンドウの右側にタイムスタンプを表示させることができます。
ずっと表示させておくこともできますが、タイムスタンプ分画面が狭くなるので、私は「When mouse hovers over scroll bar」に設定してマウスオーバーしたときだけ表示させるようにしています。
preztoとは
現在のMacOS
の標準シェルとなっているzsh
のフレームワークとなり、テーマを変えることで、見栄えを変えたり操作感を変えたりすることができます。
prezto
以外にもzsh
のフレームワークは色々とありますが、prezto
は他のフレームワークと比べて比較的軽量に動作するのと、Git
の状態がひと目で分かること、また見栄えが良いテーマがあった(重要)ので常用しています。
以下prezto
インストールとセットアップ手順です。
preztoのインストール
GitHubにprezto
のページがあるため、以下のGitHubページに沿ってインストールしていきます。
インストール手順通り、リポジトリをクローンします。
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
以下コマンドを実行し、prezto
のディレクトリに既存のzsh
各種構成ファイルのコピーとシンボリックリンクの設定を行います。
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
現在のMacOS
のデフォルトはzsh
なので以下は実行しなくても良いですが、以下でデフォルトのシェル設定を変更します。
chsh -s /bin/zsh
ウィンドウを開き直すことでprezto
のデフォルトのテーマとなるsorin
が適用され、以下の表示がされるかと思います。
テーマの確認
以下コマンドを実行することで、選択できるテーマの確認とそれぞれのテーマを選択した際の表示例が一覧で確認できます。
表示形式は後から変更することができるので、自分の好みに近いテーマを見つけます。
prompt -l
prompt -p
以下、コマンド実行例。
preztoのテーマとモジュールについて
ユーザのホームディレクトリに存在する.zpreztorc
(実際には/Users/[ユーザディレクトリ]/.zprezto/runcoms/zpreztorc
へのリンク)に適用するprezto
のテーマと追加したいモジュールを設定します。
モジュールは設定することで短縮文字でコマンドが実行できたり、コマンド履歴から入力したいコマンドを補完してくれるオートサジェストが有効になったりするので自分の使い方に応じて使うモジュールを選択しましょう。
デフォルトで設定できるモジュールは以下prezto
のモジュールディレクトリにあり、ここにあるものであれば.zpreztorc
の所定の場所に名前を記載するだけで使用できます。
また、各モジュールディレクトリのREADME
を見ると、どのような動きをするモジュールなのかがわかります。
ここからは個人によって好みや有効にしたいモジュールが異なるため、私の例となりますが、私はprezto
のテーマをsorin
からagnoster
に変更し、syntax-highlighting
とautosuggestions
、git
モジュールを追加で設定しています。
モジュールはデフォルトで有効となっているモジュール以外にもたくさんありますが、あまり多くモジュールを読み込ませても動作が重くなるので、使うものだけ最低限にしたほうが良いです。
以下で私が追加したモジュールについて簡単に紹介します。
syntax-highlighting
syntax-highlighting
はコマンドの構文を強調表示してくれるモジュールでコマンドとオプション、引数など色分けして表示してくれるので可読性が増します。
プロンプトの画面を日頃多く眺めている人に便利です。
autosuggestions
オートサジェストを行ってくれるautosuggestions
モジュールは、イメージとしてはCisco
等のネットワーク機器で実装されているタブキーによるコマンド補完と同じような動きをするモジュールで、途中までコマンドを入力すれば、コマンド履歴から薄い文字でサジェストしてもらえ、右キーを押すとサジェストされたコマンドが実行できる状態になります。
元々Cisco
機器などをコマンドで触っていた人は離れられなくなるかもしれません(笑)
git
Gitのリポジトリのステータス情報等を表示することができるモジュールです。
また、Git関連のエイリアスも提供されているため、Gitの各種情報をエイリアスから表示させたりもできます。
モジュールとテーマの変更
以下設定箇所の抜粋となりますが、以下の箇所の設定を修正&追記しています。
(略)
# Set the Prezto modules to load (browse modules).
# The order matters.
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'git' \ # 左記git追加
'completion' \
'syntax-highlighting' \ # 左記syntax-highlighting追加
'history-substring-search' \
'autosuggestions' \ # 左記autosuggestions追加
'prompt'
(略)
#
# Prompt
#
# 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行をコメントアウト
zstyle ':prezto:module:prompt' theme 'agnoster' # テーマをagnosterに変更
(略)
注意点として、追加するモジュールには指定の順序で適用しないといけないモジュールがあります。
指定の順序で適用しないといけないモジュールについては、各モジュールのREADME
に書かれており、今回追加したsyntax-highlighting
、autosuggestions
にもそれぞれのモジュールのREADME
に以下のように記載されております。
以下はsyntax-highlighting
のREADME
に記載されている内容抜粋。
If this module is used in conjunction with the history-substring-search module, this module must be loaded before the history-substring-search module.
Additionally, if this module is used in conjunction with the autosuggestions module, this module must be loaded before the autosuggestions module as well.
To elaborate, the relative order of loading the modules would be syntax-highlighting, history-substring-search, autosuggestions and prompt.
README
に記載の通り、以下の順で.zpreztorc
に記載しています。
syntax-highlighting
history-substring-search
autosuggestions
prompt
またgit
モジュールにもcompletion
モジュールより前の指定があるので、README
通りに指定しました。
テーマの修正
agnoster
のデフォルトでは[ユーザ名]@[ホスト名] [ディレクトリパス]
の形式で表示されるので、階層が深いディレクトリを表示すると見づらいという点と、個人用途でリモートアクセスするようなことも無い中でユーザ名とホスト名の表示があっても邪魔なだけなので、agnoster
のテーマが書かれているファイルを直接編集し、プロンプト表示に関わる箇所を書き換えました。
agnoster
のテーマのプロンプト表示に関わる設定は~/.zprezto/modules/prompt/functions/prompt_agnoster_setup
に書かれているため、以下のように修正します。
(略)
# Context: user@hostname (who am I and where am I)
prompt_context() {
local user=`whoami`
if [[ "$user" != "$DEFAULT_USER" || -n "$SSH_CONNECTION" ]]; then
# prompt_segment $PRIMARY_FG default " %(!.%{%F{yellow}%}.)$user@%m # デフォルト定義のコメントアウト
prompt_segment $PRIMARY_FG default " %(!.%{%F{yellow}%}.) " # 左記の設定を追加
fi
}
(略)
修正後はiTerm2
を起動し直すことでテーマが反映されます。
修正前後のプロンプトを比較すると以下のようになります。
また、Git管理されているリポジトリのディレクトリに移動すると、上述した「preztoとは」の図のようにブランチ名やGitの状態がわかるようになります。
デフォルトエディタの変更
ユーザのホームディレクトリにある.zprofile
に設定されているデフォルトエディタの設定がnano
となっているため、vim
に書き換えます。
(略)
#
# Editors
#
if [[ -z "$EDITOR" ]]; then
export EDITOR='vim' # 'nano'を'vim'に変更
fi
if [[ -z "$VISUAL" ]]; then
export VISUAL='vim' # 'nano'を'vim'に変更
fi
(略)
おわりに
iTerm2
のログ出力設定についてはともかく、prezto
の設定は初期設定時に色々と悩みながら設定したあと、どこを設定したのか完全に忘れていたため、今回改めて設定を確認しながら設定箇所を整理できました。
やはりメモを残しておかないと後々苦労すると感じた次第でした。