M1 mac の環境構築 その2 ターミナル編
前回の記事 ↓ポータビリティをと作業効率のバランスがいい感じになるようにターミナルの環境構築を進めていきます。まずはzshの設定をいい感じにできるようにしていきます。
こんにちは、とりかつです。 前回に引き続き、M1 macのターミナルの環境構築を進めていきます。
前回の記事 ↓
M1 mac の環境構築 その1 - torikatsu.dev
ポータビリティをと作業効率のバランスがいい感じになるようにターミナルの環境構築を進めていきます。
prezto
インストール編
まずはzshの設定をいい感じにできるようにしていきます。 今回はpreztoをチョイスしました。
readmeにしたがって、導入していきます。 すでにzshの設定ファイルが存在するとlnエラーが出てインストールがうまくできません。 なので、あらかじめzshの設定ファイルはどこかに退避させておきます。 必要なファイルを退避させたら残っているファイルを全て消しておきます。
rm .zlogin.org && rm .zlogout.org && rm .zpreztorc && rm .zprofile &&rm .zshenv && rm .zshrc
preztoをクローンしてきます。
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
ターミナルで以下を実行します。
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
あらかじめ退避させておいた設定を、作成された.zshrcとかに移して完了です。
テーマの適用
preztoをインストールしたおかげで簡単にテーマを設定することができます。 今回はpureというテーマを設定します。
.zshrcに以下を追記するとpureが適用されます。
autoload -Uz promptinit
prompt pure
適用すると以下のようになります。
マルチライナーのおかげで、コマンドが見やすくなります。 さらにディレクトリ表示まわりもすっきりとしていて、作業に集中できそうですね。
設定編
ここではシンタックスハイライトとオートサジェスチョンを設定していきます。
シンタックスハイライト
シンタックスハイライトは、コマンドをいい感じにハイライトしてくれる機能です。
シンタックスハイライトoffの時

シンタックスハイライトonの時

コマンドが緑色でハイライトされているのがわかります。 また、タイポした時は赤色にハイライトしてくれたりします。

シンタックスハイライトがあると、視覚的にコマンドの構造を理解することができて、ターミナルの作業効率が上がります。
オートサジェスチョン
オートサジェスチョンはコマンド入力中に、historyから入力候補をうっすら表示してくれる機能です。 コマンド入力中に右キー(arrow_right or C-f)を押すことで、うっすら表示されているコマンドを入力することができます。
オートサジェスチョンがoffのとき

オートサジェスチョンがonのとき

わざわざgrepする必要がないので思考を邪魔することなくコマンドを入力できて便利ですね。
設定の追記
30行目あたりに以下の2行を追記してシンタックスハイライトとオートサジェスチョンを設定します。
'syntax-highlighting' \
'autosuggestions' \
追加後の.zpreztorc
32 zstyle ':prezto:load' pmodule \
33 'environment' \
34 'terminal' \
35 'editor' \
36 'history' \
37 'directory' \
38 'spectrum' \
39 'utility' \
40 'completion' \
41 + 'syntax-highlighting' \
42 + 'autosuggestions' \
43 'prompt'
'prompt'より前に書かないとうまく動かないみたいな噂を聞いたので、一応'prompt'の前に追加しました。
peco
ターミナルで効率よく作業をしていく上で、強力な履歴検索機能が欲しくなりました。 ツールはいろいろあるのですが、いろいろ調べて行ってpecoを導入することにしました。
pecoってなんぞや
pecoは入力をリストで表示し、選択されたアイテムを返却するという、非常にシンプルコマンドです。 花御さんも、シンプルなものほど応用が効いて強いことを認めています。
インストール
homebrewを使ってインストールします。
brew install peco
設定
pecoの導入に当たって以下の記事を参考にしました。
記事にしたがってpecoの設定を進めていきます。
peco自体の設定
zshrcに以下を追記します。 これはC-Rで履歴をgrepできるようにする設定です。
記事には以下のようにあります。しかし、このままではうまく動いてくれなかったので少しいじります。
function peco-history-selection() {
BUFFER=`history -n 1 | tac | awk '!a[$0]++' | peco`
CURSOR=$#BUFFER
zle reset-prompt
}
zle -N peco-history-selection
bindkey '^R' peco-history-selection
tacはcatを逆順にやってくれるコマンドです。 私のPCはOSXなのでtacコマンドは存在しません。

tacコマンドを実装する方法もあったのですが、少し面倒だったので、今回はtail -rを使ってあげます。
historyをgrepしてる時のイメージ

cdrの設定
過去のディレクトリ移動履歴もgrepできたら便利だと感じたのでcdrを設定していきます。
~/.zshrc
if [[ -n $(echo ${^fpath}/chpwd_recent_dirs(N)) && -n $(echo ${^fpath}/cdr(N)) ]]; then
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
zstyle ':completion:*' recent-dirs-insert both
zstyle ':chpwd:*' recent-dirs-default true
zstyle ':chpwd:*' recent-dirs-max 1000
zstyle ':chpwd:*' recent-dirs-file "$HOME/.cache/chpwd-recent-dirs"
fi
次にpecoの設定を追記します。 記事では以下のようにありますが、これも少しいじります。
function peco-cdr () {
local selected_dir="$(cdr -l | sed 's/^[0-9]\+ \+//' | peco --prompt="cdr >" --query "$LBUFFER")"
if [ -n "$selected_dir" ]; then
BUFFER="cd ${selected_dir}"
zle accept-line
fi
}
zle -N peco-cdr
bindkey '^E' peco-cdr
まず、selected_dirの部分ですがこのままだと数字が入力されてうまく機能しません。


上の画像だとcd ~/desktopとしたいところがcd 1 ~/desktopとなってしまっています。 これを回避するためにawkを使ってディレクトリのパスだけ引っこ抜きます。
- BUFFER="cd ${selected_dir}"
+BUFFER="cd `echo $selected_dir | awk '{print$2}'`"
さらに、returnしたらそのままcdが実行されてしまうのは自分の好みではなかったので、return時にコマンドを入力するよう設定を変更します。
- zle accept-line
+ CURSOR=$#BUFFER
+ zle reset-prompt
また、C-EはEmacsの行の最後にカーソルを移動するキーバインドと重なってしまうため、C-Gにリマップします。
最終的に以下のようになりました。
function peco-cdr () {
local selected_dir="$(cdr -l | sed 's/^[0-9]\+ \+//' | peco --prompt="cdr >" --query "$LBUFFER")"
if [ -n "$selected_dir" ]; then
BUFFER="cd `echo $selected_dir | awk '{print$2}'`"
CURSOR=$#BUFFER
zle reset-prompt
fi
}
zle -N peco-cdr
bindkey '^G' peco-cdr
いい感じになりました。


終わりに
ターミナルを快適に使えそうな状態になったので、今回の記事はここまでにします! zshの設定系で``zinitやz、ghq with peco```を考えたのですが、現時点で困ってることがなかったので一旦保留にしました。 どれも便利そうだったので、環境構築が落ち着いてから試してみたいと思います。
次回の記事では、tmuxやvimの設定をしていこうと思います。
-––