最近、リモートワークということもあり、ペアプロというかAWS、GCPなどの操作をする際に一緒に画面を見ながら作業する機会が多いです。若手の同僚がターミナルソフトを起動してコマンドを実行するのですが、傍から見ているとエイリアスなりキーバインドなりを使えば効率的に操作できるのにと思うことがあります。
最近はGUIで操作することが多いのでターミナルソフトでコマンド操作することがあまりないのかもしれませんが、私は少し前までは(クラウドしかできない)ITインフラエンジニアをやっており、プログラミングよりもコマンド操作するのが圧倒的に多かったため、ちょっとしたことならGUIよりもターミナルで操作することが多いです。Windowsを使っていますが WSL2 + Ubuntu 20.04 LTSで開発環境を整えているため、操作に不自由はほとんどしません。
この手のエイリアスやzshなどのオススメ設定はググれば出てくるので、色々調べながら自分だけの最高の設定環境を整えるというのはとても楽しいものです(そして時間はあっという間に溶ける)。どうせ同じことをするなら打つ文字数が少ないほうが間違えづらいし、早いです。わずか1、2秒の差かもしれませんが塵も積もれば山となるです。
今回は、個人的にGit操作時によく使うエイリアスとzshキーバインドを紹介します。
エイリアス
まず、git
コマンドそのものが長いです。g
にしましょう。
# ~/.zshrc alias g="git" # 補完を効かせる compdef g=git
私のGitエイリアスは以下の通りです。
# ~/.gitconfig [alias] s = status b = branch l = log cm = commit ss = status -s co = checkout rb = rebase st = stash sh = show pr = pull -r ps = push # 今のブランチと同名のリモートブランチにpush psi = !git rev-parse --abbrev-ref HEAD | xargs git push --set-upstream origin # リモートブランチをローカルにチェックアウト cr = !git branch -r | peco --prompt 'BRANCH>' | cut -d'/' -f2- | xargs git checkout # エイリアス一覧 alias = !git config --get-regexp '^alias\\.' | sed 's/alias\\.\\([^ ]*\\) \\(.*\\)/\\1\\\t => \\2/' | sort # グラフ gr = log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s' # ログからpecoで探す lp = !git log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s' | peco df = diff # 変更のあったファイルとそのファイルの修正ライン数を表示 ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat # ブランチを削除 bd = !git branch | grep -Ev '\\*|master|main' | peco | xargs git branch -D
エイリアス一覧
設定したエイリアスを忘れたときに毎回 ~/.gitconfig
を見にいくのが面倒なので g alias
で一覧表示します。
pecoと組み合わせる
pecoは文字入力する度にインタラクティブにフィルタできるツールです。これと組み合わせることで利便性が格段に上がります。私の場合、以下のエイリアスで使用しています。
g cr
でGitHub等のリモートブランチを選択するとローカルにそのブランチでチェックアウトできるg lp
でGitの履歴を調べたいときにうろ覚えでも調べるができるg bd
でmaster、mainとカレントブランチ以外を削除する
キーバインド
zshのキーバインドを使うことでエイリアスではできないショートカットが実現できます。
チェックアウト
先ほど紹介したpecoを使ってチェックアウトします。
# prefix + [ bindkey '^[' peco-git-checkout function peco-git-checkout () { local selected_branch=$(git branch --list --no-color | colrm 1 2 | peco) if [ -n "$selected_branch" ]; then BUFFER="git checkout ${selected_branch}" zle accept-line fi zle clear-screen } zle -N peco-git-checkout
ghqとpecoでリポジトリ管理
詳細はghqでリポジトリ管理とpeco連携で快適git生活 - Qiitaなどを読んでいただいた方が早いですが、導入するとめっちゃリポジトリ操作が捗ります。
# prefix + F bindkey '^F' peco-src function peco-src() { local selected_dir=$(ghq list | peco --query "$LBUFFER") if [ -n "$selected_dir" ]; then selected_dir="$GOPATH/src/$selected_dir" BUFFER="cd ${selected_dir}" zle accept-line fi zle clear-screen } zle -N peco-src
GitHubリポジトリを開く
先ほどのghqでリポジトリ管理をしている前提ですが、コマンドラインからGitHubリポジトリを開きたいときに便利です。
WSL2を使っているのでwslview
コマンドがあるか否かで分岐させています。
# prefix + o bindkey '^o' open-git-remote function open-git-remote() { local selected=$(ghq list | peco --query "$LBUFFER") if [ -n "$selected" ]; then if [ -x "`which wslview`" ]; then BUFFER="wslview https://${selected}" else BUFFER="open https://${selected}" fi zle accept-line fi zle clear-screen } zle -N open-git-remote