Git使いにお勧めのTerminalショートカットキー7選

「Git 用のGUIアプリをわざわざ全部のデバイスにインストールするのは面倒だなー」とか「Terminal でよくGit を使うんだけどもっと楽できないのかなー」と感じたことはありませんか?
そんな人のために、この記事ではTerminal 上でGit を最も効率よく使うためのキーボードショートカットを紹介します。

この記事ではなるべく便利なキーボードショートカットを厳選していますが、目次から「実際に使えるかもな」「使ってみたい」と感じられるものから見てみてください。なぜならショートカットキーを覚えるコツは、”実際に使ってみること”だからです。

修飾キーの表記について

修飾キーとは、command やoptionなどの、英数字のキーと組み合わせることでキーボードショートカットを実行するキーのことです。この記事では修飾キーやreturn キーをアイコンで表します。

  • command 
  • control 
  • shift 
  • option 
  • return 

例えば、command キーとshift キーを押しながらZを押すこと⇧⌘Z と表記します。
アイIとエルlを区別するためにアルファベットはすべて大文字で表記しますが、の表記がない場合はshiftを押す必要はありません。

また、入力するコマンドに空白(スペース)が必要なことを強調したい時には、git␣のようにで表します。

以前のコマンドに管理者権限を付け加えて実行し直す

半年に一度くらい「古いフォルダを削除するか」とrmコマンドを実行したけど管理者権限がないと言われ「あーー、確かにそうですね」と呟きながら、矢印キー()だけでコマンドの先頭に移動してsudoをつけ、実行し直したことはありませんか?

Apps % rm -r MyApp
rm: SeaMark/.git/objects/2e: Permission denied
rm: SeaMark/.git/objects: Permission denied
rm: SeaMark/.git: Permission denied
rm: SeaMark: Permission denied

直前のコマンドに管理者権限を付与したいだけならsudo !!で実現できます。

% sudo !!
sudo rm -r MyApp
Password: ⚿

しかし、それより前のコマンドに管理者権限を付与したい場合は矢印キーで履歴を遡る必要がありますね。
遡った以前のコマンドがどんなに長くても、以下の4つのショートカットキーで管理者権限を付与して再実行できます。

  1. : コマンド履歴(管理者権限がないコマンド)を表示
  2. ⌃A: カーソルを行の先頭に移動
  3. sudo␣をタイプ
  4. : カーソルがどこにあろうとreturn を押すだけでコマンドが実行されます。

comand not found: gti

おそらくgitを使ったことがある人の大半は、以下のようなミスをしたことがあるでしょう。

MyApp % gti push origin Release/macOS/NavigationSideBar
zsh: command not found: gti

打ち直すのは面倒ですね。そんなときは以下のショートカットコンビネーションをやってみましょう。

  1. : 直前のコマンド履歴(間違ったコマンド)を表示
  2. ⌃A: カーソルを行の先頭に移動
  3. ×2: カーソルをiに合わせる
  4. ⌃Ttiを転置 transpose する
  5. : カーソルがどこにあろうとreturn を押すだけでコマンドが実行されます。

ブランチ名やファイル名を最速ペーストする

git pullgit addのときなど、何度も何度も同じ名前をマウスで選択してコピーしてペーストすることはありませんか?しかもそれが長い名前だとマウスで選択するときに余計な文字や改行まで含まれたり…

以下のショートカットキーの組み合わせで、面倒な「マウスを使ってファイルパスを選択し、コピペする」を省略します。

  1. ⇧⌘ダブルクリック
    普通のダブルクリックは単語だけを選択しますが、⇧⌘を付け加えるとファイルパスを選択できます。
  2. ⇧⌘V
    Terminal 内で選択中のテキストをカーソルの場所にペーストします。
    クリップボードの内容は変わりません。

コツは⇧⌘を離さないことです。実際の2つのシチュエーションごとに、どのように活用できるか見てみましょう。

Git のブランチ名を最速ペーストする

  1. git branch⏎
  2. git pull origin␣まで入力
  3. “1” の結果で表示された目的のブランチを⇧⌘を押さえながらダブルクリック
  4. ⇧⌘を押さえたままVを押す
最速コピーをしたいならエイリアスを作ろう

残念ながら「⇧⌘Vで選択中のテキストをペーストする」はTerminal 上でしか使えません。GitHub やチャットでブランチ名を共有したいときは⇧⌘ダブルクリック+⌘C でコピーしましょう。

もっと速く現在のブランチ名をクリップボードにコピーしたい場合は以下のようなエイリアスを作っておきましょう。

alias gitb="git branch | grep '^\*' | cut -d' ' -f2 | pbcopy && echo 'copied'"

使い方は通常のコマンドのlspwdのようにgitbとだけ入力すれば良いです。
仕組みとしては簡単で、git branchの結果を見て、で始まる行のを除いてコピーするだけです。

長すぎるファイルパスを最速でgit addする

似たようなシチュエーションとして、変更が加わったファイルをgit addすることもよくあります。
ファイルパスが短い場合は入力中にTab を押すことでディレクトリ名やファイル名が補完されますが、ファイルパスが長くなるほどタイプする時間は比例して長くなってしまいます。

ブランチ名をペーストするのと基本的にやり方は変わりませんが、git add は何度も連続して実行することが避けられない時があります。そこで何度もgit add をタイプしなくていいような方法をまとめました。

  1. git status⏎
  2. git add␣までタイプする
  3. “1” の結果で表示された、目的のファイルパスを⇧⌘を押しながらダブルクリック
  4. ⇧⌘を離さずVを押す
  5. : コマンドを送信
  6. : 直前のコマンドの表示
  7. ⌃W: カーソルから左側の1単語を消す(ファイルパス部分をまるっと削除)
  8. “3” へ戻る

今書いているコマンドを中断する

で履歴を遡ってもお目当てのコマンドが見つからず、delete⌫ キーを何度も押してコマンドを削除していた時期が筆者にもあります。

長ったらしいコマンドを書いているけど実行せずに中断する方法は以下の2つの方法があります。

  • ⌃U: 行全体を削除する
    • ⌃Y⌃Uで消した内容の復活
  • ⌃C: ブレークする(コマンドを実行せずに、新しい行へ移動する)
    • ⌘.でも操作は同じ

エラーと一緒に送られてきたURL をすぐに開く

エラー関しての詳しい説明をすることなく、ただURL を返してきて「詳しくはここみてね」という扱いを受けることはよくあります。

Landmarks % git push -u origin main
Username for 'https://github.com': ***
Password for 'https://***@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/***/Landmarks.git/'

そんなときは、を押しながらURLをダブルクリックするとそのリンク先をデフォルトブラウザーで開いてくれます

チャットアプリで共有するとき

「このコマンドを打つとこのようなエラーが返ってきます」という文言を添えて、Terminal のスクリーンショットを送りたい時に活用してほしいのが以下の3つのコマンドです。

  • ⌘K: 画面をクリアする
  • ⌘+: フォントサイズを1段階大きくする
  • ⇧⌘▲: マーク間を選択する

因みに、Mac で1つのアプリを選択してスクリーンショットをとるショートカットは⇧⌘5です。

Terminal のスクショに余計な情報を入れない

Terminal スクショを共有して原因を同僚や先輩に尋ねるときは、なるべく聞きたい内容以外の情報(ノイズ)をスクショから減らすようにしましょう。(何がエラーの原因になるのかが全くわからない時は動画でも撮って聞くしかないですが…)

⌘Kは現在カーソルが表示されている行が一番上になるように画面をクリアします。この機能を有効活用して不要な情報を減らしてみましょう。

以前の画面を消さずに画面を整理するには

⌘Kは画面全体をクリーンするので、以前のコマンドや結果の情報まで消えてスクロールができない状態となります。そこまでしたくないという方は、⌃⌘Lを使って何も消さずにカーソルがある行を画面の一番上にするのが良いと思います。

全てのコマンド履歴を含んだスクリーンショット
必要な情報だけ取り出したスクリーンショット

フォントサイズを調整する

あのままのスクショでも良いのですが、ちょっとした改善点はまだあります。上のスクリーンショットのTerminal はフォントが小さくて少しだけ見にくいです。スクリーンショットを共有する際は⌘+でフォントを大きくしましょう。フォントを小さくする時は⌘-、元のサイズに戻すときは⌘0です。

僕はスクショを見るときにフォントサイズを気にしたときはないんですけどね。。
チームに40~50代の人がいるときには意識しましょう

実行したコマンドとその結果を最速でコピーする

また、最近のチャットアプリではチャット内にコードを挿入できるので、できれば画像だけでなく入力したコマンドとその結果のテキストデータを載せてあげるといいかもしれませんね。

そのような、コマンドと結果を選択したい時は⇧⌘▲で、マークごとに選択範囲を拡大することができます(⇧⌘▼でマークごとに選択範囲を縮小できることもあるのですが、うまくいかないときはescキーを押してやり直しましょう)。

⇧⌘▲でマーク間の選択
コマンドの結果だけをコピーしたい

コマンドは含めず、その結果だけを選択したい時は⇧⌘Aでマーク間を選択するのが速いです。

マークとは

マークとは、「returnキーや⌃C⌃Dを入力したときにつく目印」です。
マークが登録されている行の左端には[があり、ユーザーはその印(マーク)を頼りに過去のコマンドを効率よく探すことができます。

マークの設定はほぼ自動なのですが、以下のようにしてマークを設定しない、もしくはマークを削除することができます。

  • コマンドを実行する際に、⇧⌘を押しながらreturn を押すことで、その行だけマークを設定しない
  • メニューから「編集」>「マーク」>「プロンプトの行を自動でマーク」(Edit > Marks > Automatically Mark Prompt Lines)のチェックを外す
  • 既にコマンドを実行した場合は、トリプルクリックで行全体を選択して、⇧⌘Uでマークの解除

番外編: 履歴からコマンドを検索して表示したい

つい最近、「断片的にしか覚えていない、昔使った便利なコマンドをまた実行したい」と思うことがありました。この記事用に動画からGIF を作るコマンドです。コマンド名も”ffmp”なんとかしか覚えていませんし、そのオプションも完璧に忘れています。

そんな時はzshのショートカットキーの⌃Rを使いましょう。⌃Rはユーザーが入力した文字を使って過去のコマンドを検索し、マッチした結果を最近使った順に表示してくれます。百聞は一見にしかずということで、下のGIFを見るか是非ご自分の環境でやってみてください。

⌥▶, ⌃Wも活用しています

以下が、例として使った.movファイルから.gifファイルを作るコマンドです。多少の警告は無視して使っています。もし皆さんが試しに使ってみてまたいつか使いたいなと思ったときは⌃Rで検索してみてください。

ffmpeg -i in.mov -pix_fmt rgb24 -r 10 -f gif - > out.gif

その他のzshのキーボードショートカットキーは以下の記事にてまとめています。

まとめ

今回の記事では以下のショートカットキーをシチュエーション別に説明しました。

  • ⌃A: カーソルを行の先頭にどうする
  • ⌃T: カーソルの両隣の文字を転置する
  • ⇧⌘ダブルクリック: ファイルパスを選択する
  • ⇧⌘V: 選択中のテキストをペーストする
  • ⌃W: 1単語をまるっと消す
  • ⌘ダブルクリック: ダブルクリックしたURLを開く
  • ⌃U: 行全体を消す
  • ⌃C: ブレークする
  • ⌘K: 画面をクリアする
  • ⌘+: フォントを大きくする
  • ⇧⌘↑: マーク情報を使って選択範囲を拡張する
  • ⌃R: コマンド履歴の検索

紹介したショートカットキーが身についてきて、「もっと便利なショートカットキーを知りたい」と感じてきたら以下の記事をご覧ください。

私はもっと速い方法を知ってるよ!という方はぜひコメント欄や私のTwitterアカウントへのメンションで教えてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA