技術(tech)

macのターミナルでHome/Endキーで行頭/行末に飛ばす設定

はじめに

 

自分のmacのターミナルにzsh + preztoを入れ直しました。
その際、キーボード(HHKB)のHomeキー/Endキーで
ターミナルの行頭/行末に戻れなくなってしまい、2時間程潰してしまいました。

同じような悩みを抱えている人に向けて、
ターミナルでHomeキー/Endキーを押した際に行頭/行末に戻れるようにするための
設定方法を紹介いたします。

 

この記事の妥当性

筆者の実体験を元に紹介しております

 

想定する読者

 

  • macのターミナル環境を構築している人(zsh + prezo)
  • ターミナルのHomeキー/Endキーに行頭/行末に飛ぶ動作を割り当てたい人

 

筆者の動作環境は以下の通りです。

  • MacBook Air(2018)
  • macOS Big Sur(ver 11.5.2)

 

本記事を読むことで得られるもの

 

  • Macのターミナルの見栄えや操作感が良い感じになる
    (本題ではなく、本記事の副産物的なものです)
  • ターミナルのHomeキー/Endキーに行頭/行末に飛ぶ動作を割り当てられる
    (本題はこっち)

 

設定方法を紹介

背景

ターミナルを触っていて、ふと「何だか今のターミナルの設定使いにくいな…」
となることはありませんか。

筆者は.zshrcへ都度都度設定を追記してたこともあり、
設定が入り乱れていました。
特に、シンタックスハイライトが上手く動作していなかったのもあり、
この機会にターミナルの環境を見直そうと思ったわけです。

ターミナルの環境を見直すに当たって、
まっさらな状態から設定し直すつもりでしたが、一から自分で設定するのは辛いので
先人が築き上げてくれた便利パックであるPreztoを導入することにしました。

Preztoについては本題から逸れてしまうので、
気になる方は以下をご覧ください。

Preztoリポジトリ
https://github.com/sorin-ionescu/prezto

Zsh + Preztoの環境構築方法の参考ページ
https://dev.classmethod.jp/articles/zsh-prezto/

事象

デフォルトの状態だと、Homeキーを押した際に
ターミナルのトップまで戻ってしまいます。


この状態でHomeキーを押すと


ターミナルのトップまで戻ってしまいます。

期待している「行頭まで戻る」という動作にはなっていません。

 

原因

以下の2つが原因でした。

  1. OS側のターミナル設定で、Homeキーに対応するアクションが設定されていない
  2. ターミナルで使っているZsh(.zshrc)の設定で、上記項番1で設定したアクションに対する操作が「行頭もしくは行末に戻る」となっていない

ネットで日本語記事をググっていると、
項番2の設定のみ紹介されているケースが多かったのもハマる要因の1つでした。

使っているmacの環境によっては、項番2の設定だけでも良いのかもしれません。

最終的には以下の記事が参考になりました。
https://apple.stackexchange.com/questions/372386/i-switched-to-catalina-and-enabled-zsh-now-my-home-end-key-do-not-work-in-termin

 

解決方法

1と2の手順を紹介します。

まずは1から。

ターミナルを開いて、ターミナル > 環境設定 を選び、プロファイルを表示します。

キーボードタブを選択します。

「+」を押して、キーに対応したアクションを設定します。
HomeキーとEndキーのアクションをそれぞれ設定しましょう。

Homeキーはこちら

  • キー:↖ Home
  • 装飾キー:なし
  • アクション:テキストを送信(\033[1~)

 

Endキーはこちら 

  • キー:↘ End
  • 装飾キー:なし
  • アクション:テキストを送信(\033[4~)

これで1の設定は完了です。

あとは、2を設定することで、ターミナル側でこのテキストを
「行頭/行末へ飛ぶ」と認識させます。

2の設定は簡単です。
~/.zshrcファイルへ以下の2行を追加します。

bindkey "\033[1~" beginning-of-line
bindkey "\033[4~" end-of-line

これで入力されたテキストが「行頭/行末へ飛ぶ」であると認識されます。

 

あとは、ターミナルを再起動しましょう。

Homeキーが行頭、Endキーが行末へ飛ぶようになっていることかと思います。

おわりに

 

ググって日本語記事が全然ヒットしなかったので記事にしました。

筆者が2時間悩んだ作業を、
この記事を見た人が10分で解決できるようになることを祈っております。

ここまで読んでいただき、ありがとうございました。

 

ご意見、コメントがありましたら、教えていただけると幸いです。