ターミナル操作を超効率化する設定例集

## はじめに

エンジニアの憧れ、ターミナル。
このターミナルを使いこなせば「なんかかっこいい」だけではなく、様々な作業を効率化することができます。

本記事では、普段ターミナル操作を効率化するために設定している内容を紹介します。

この記事を読むことで、ターミナルの魅力が伝わればと思います。

### 環境

- macOS 10.15
- zsh 5.7.1

### 注意

本記事では、各項目について細かな設定のやり方は載せていません。
詳細については、各々が個別に調査をお願いします。

ただし、シェルの設定はすべて GitHub の [dotfiles](https://github.com/m5d215/dotfiles) リポジトリにありますので参考にしてください。

## プロンプトのカスタマイズ

[powerline-go](https://github.com/justjanne/powerline-go)

⭐️ コマンドを実行せずに必要な情報を得ることができ、作業効率が上がります。
⭐️ おしゃれな画面でやる気がアップします。

<img width="682" alt="custom-prompt.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339066/311d5ca6-0a0b-1bf9-49d6-8bd3e6e2e680.png">

通常、コマンドを入力するカーソルの手前にユーザー名やディレクトリ名、`$` 記号などが組み合わさったプロンプトが表示されています。

このプロンプトは、環境変数 `$PS1` 等を書き換えることで自由にカスタマイズできます。

## Tmux

[tmuxline.vim](https://github.com/edkolev/tmuxline.vim)

⭐️ ひとつの画面を分割することで必要な情報を一度に得られます。
⭐️ 作業の論理的なグループごとにタブやセッションを切り替えることができます。

<img width="682" alt="tmux.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339066/bddf891d-269b-e8ea-c11d-085d501cc615.png">

Tmux は、ひとつの画面を複数分割することができるソフトウェアです。
画面分割の他にも様々な機能がありますが、画面分割がメインかと思います (少なくとも自分は)。

iTerm のような画面分割機能を備えたソフトウェアもありますが、Linux サーバーを相手にするなど、Tmux が活躍する機会は多いと感じます。

## コマンドの自動補完

[zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions) は、現在入力中のコマンドを履歴から検索して、前方一致するコマンドを自動入力してくれます。

⭐️ 長いコマンドを素早く入力できるようになります。
⭐️ 曖昧な記憶から完全なコマンドを得られます。

![zsh-autosuggestions.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339066/4c0cce97-e6da-0320-e200-af5923f77cfe.gif)

例えば、過去に `git commit` と実行したことがあったとして、今 `git` と入力すると、後ろに薄い色でコマンドを補完してくれます。
さらに続けて `git commit --` のように追加で入力すると、自動的に最適な履歴へ置き換わります。

この機能は、前方一致させる必要があるという欠点があります。
そのため、実は曖昧なコマンドを思い出す用途で使うことはほとんどないです。
よく実行するコマンドをさらに素早く入力する目的で使用しています。

## ファジー検索

[zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)

⭐️ 過去に入力したコマンドは、完全に記憶していなくともすべて引き出せます。

![fuzzy-history.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339066/8cc92e23-15ff-b20c-102e-2c2107a463ea.gif)

[zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions) は、前方一致したコマンドをひとつだけ表示するものでした。
ファジー検索というものを使用すると、入力した文字列をベースに、過去の入力データから曖昧検索することができます。

パッケージをインストールする際に活用しています。

## 略語展開

[zsh-abbrev-alias](https://github.com/momo-lab/zsh-abbrev-alias)

⭐️ よく使うパイプ先のコマンドを素早く入力できます。

![zsh-abbrev-alias.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339066/a6be9d3c-0d09-51e9-3b39-b77d98673ff6.gif)

キーワード `FGN`、`G`、`L` それぞれに以下の文字列を割り当てています。
キーワードの直後にスペースを入力すると略語が展開されます。

- **FGN:** `find . -type d \( -name .git -o -name node_modules \) -prune -o -print`
- **G:** `| grep --color=yes -Hn`
- **L:** `| less`

`less`、`grep`、`xargs` のようなよく使うパイプ先のコマンドを登録することが多いです。

## ファジー UI + キーバインド

[git-fuzzy-log](https://github.com/m5d215/dotfiles/blob/master/src/.zsh/functions/git-fuzzy-log)

⭐️ 現在のコマンド入力を破棄せずに、まったく別の情報を確認できます。

![git-fuzzy-log.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339066/01da4b98-45ee-8a7e-0130-2e162c2ddacc.gif)

`fzf` ベースの自作コマンドです。

コマンド入力中にショートカット (`GG` にバインドしています) を入力すると、Git のログが表示されます。
ESC で元の画面に戻ることができ、その際はコマンド入力を保持したままです。

`git log` に限らず、いくつかの操作をこのような「ファジー UI + キーバインド」形式で登録しています。
元のコマンド入力内容が破棄されないため、思考の流れを邪魔せずに作業できます。