まくろぐ
更新: / 作成:
僕たちの英雄 アトムへ
君ならできると思っていたよ。

ひとまわりも ふたまわりも
大きくなって帰ってきてくれた。

これからも、愛と正義の心を
持ち続けてくれ。
ありがとう、アトム。

お茶の水より

子供の頃クリアできなかったファミコンの『鉄腕アトム』 をやっとクリアしました。 念願の夢が叶いました。 当時は攻略本まで買ったのにクリアできませんでした。 ファミコンのアクションゲームって本当に難しい。

最後にお茶の水博士の手紙が読めるのですが、そこにお茶の水博士はいます。 設定がよくわからない。

/p/shzzgai/img-001.png
図: FC『鉄腕アトム』博士の手紙

説明書のストーリーには、「愛と正義の子『アトム』よ。神の申し子セレナードとインドラを救い出し、アトランチスに光と平和を取り戻すのだ」と書いてあるのですが、ますますよくわからない。 そういえば『アトランチスの謎』もそうだったけど、当時はアトランティスではなくてアトランチスと言うのが主流だったのかな。

ゲームの中の謎解きをするには、敵を殴りつけながらヒントを吐かせる必要があります。 かわいいペンギンさんもボコボコにします。 鬼畜ですねアトムさん。

/p/shzzgai/img-002.png
図: FC『鉄腕アトム』殴って脅迫

このゲーム、走りながらリズムよく 3 回ジャンプすることで発動する飛行アクションが必須なのですが(これができないと 1 面すらクリアできない)、これが難しくて、結局最後まで完璧に出せるようにはなりませんでした。 クヤシイ。

最終的には足場が超狭いところで 3 回ジャンプが必要です。 鬼畜ですね。

/p/shzzgai/img-003.png
図: FC『鉄腕アトム』極狭3段ジャンプ

ちなみに、全面クリアするとファミコンのゲームっぽく 2 周目が始まるのですが、一度でもやられると即ゲームオーバーという仕様になります。 鬼畜ですね。

/p/shzzgai/img-004.png
図: FC『鉄腕アトム』おはか

(¯人¯) チーン

関連記事

更新: / 作成:

Alacritty とは

Alacritty(アラクリッティ) は、macOS や Windows の「ターミナル」アプリの代わりに使えるターミナルエミュレーターで、次のような特徴を持っています。

  • Windows/macOS/Linux/BSD など主要な OS をサポート(ノウハウや設定を使いまわせる)
  • Rust で実装されていて高速。レンダリングも GPU で高速。
  • VI モードでキーボードによる快適な操作が可能
  • 設定ファイルが TOML 形式でわかりやすい(シンプルさを追求しているため、GUI ベースの設定画面は提供しない)
  • vimtmux のようなターミナルに寄生するアプリと相性がよくて表示の問題が起きにくい
  • スクロールバッファ内の検索が可能
  • マルチウィンドウモードもあり(ただし思想としては tmux などのターミナルマルチプレクサーを使うべきとしている)

簡単にまとめると、vimtmux 使いで、シンプルで高速なクロスプラットフォームなターミナルアプリを求めている人にうってつけということですね! ちなみに、Alacritty という名前の末尾が tty になっているのがおしゃれです(「敏捷性」を表す英単語「alacrity」をもじってます)。

VI モード

VI モードに切り替えると、VI 風のキーバインドを使ったカーソルの移動、画面スクロール、検索などが可能になります。 VI モードへの入り方だけ特殊 (Ctrl + Shift + Space) ですが、あとはほぼ VI の操作方法に従って操作できます(参考: まくまく Vim ノート)。

キーバインド説明
Ctrl + Shift + SpaceVI モード ON/OFF
iVI モード OFF(普通のプロンプト操作に戻る)
h / j / k / lカーソル移動
v / Ctrl + v / Shift + v選択/矩形選択/行選択
y選択したテキストをヤンク(コピー)
Ctrl + B / Ctrl + F上下スクロール
/ / ?前方検索/後方検索

スクロールバッファ内の検索

下記のキーコンビネーションで、スクロールバッファ内のテキストをインクリメンタルサーチできます。 まぁ、これを使わなくても VI モードに入って / で検索しちゃえばよい気はします。

キーバインド説明
Ctrl + Shift + f (Cmd + f)前方検索(インクリメンタルサーチ)
Ctrl + Shift + b (Cmd + b)後方検索(インクリメンタルサーチ)
Enter / Shift + Enter次/前の一致箇所へ
Esc検索を終了

次のような正規表現パターンを使って検索できます。 例えば、\d{4}-\d\d-\d\d と入力すると、2024-03-26 のような日付を検索できます。

パターン説明
.任意の 1 文字に一致
[abc]a, b, c のいずれかに一致
\d / [0-9]任意の数値に一致
*(前の文字が)0 回以上
+(前の文字が)1 回以上
?(前の文字が)0 回 or 1 回
{4}(前の文字が) 4 回
{1-2}(前の文字が)1 回 or 2 回

ちょっと高度な使い方:

  1. Cmd + f で検索モードに入る
  2. doc.* と入力して doc で始まるテキストを検索
  3. Esc で検索モードを終了
  4. 最後に選択されていたヒット箇所がハイライトされているので、Cmd + cCmd + v などでコピペ

Alacritty の設定

Alacritty の設定ファイルは下記のパスに配置します。 バージョン 0.13 以前は YAML 形式が使われていましたが、今は TOML 形式で作成します。

  • Linux/macOS の場合: ~/.config/alacritty/alacritty.toml
  • Windows の場合: %APPDATA%\alacritty\alacritty.toml

~/.alacritty.toml というパスで配置しても認識しますが、設定を複数ファイルに分けて記述するのであれば、~/.config/alacritty ディレクトリにまとめて配置するのがよいでしょう(これは XDG 標準に従った配置でもあります)。

☝️ XDG 標準の .config ディレクトリ

~/.config の代わりに別のディレクトリを使いたいときは、$XDG_CONFIG_HOME 環境変数にそのディレクトリパスを設定します。 これは、Alacritty の仕組みではなく、Linux や macOS で config ディレクトリを設定するための標準的な仕組み (XDG) です。

設定ファイルの詳細は マニュアルページ で確認できますが、以下に簡単な設定例を紹介しておきます。

設定ファイルのオートリロード

Alacritty の設定ファイルをリロードするには Alacritty の再起動が必要ですが、下記の設定をしておくと、設定ファイルを修正したときに自動でリロードしてくれるようになります。 最初にこの設定をしておくと便利です。

~/.config/alacritty/alacritty.toml
# 設定ファイル変更時にオートリロード
live_config_reload = true

ただし、ウィンドウの見た目の設定 ([window]) などは、Alacritty の再起動が必要なことがあります。

ウィンドウの表示設定

[window] セクションでウィンドウの表示をカスタマイズできます。

~/.config/alacritty/alacritty.toml
[window]
# ウィンドウサイズ
dimensions = { columns = 100, lines = 30 }
# 画面端のパディング
padding = { x = 4, y = 2 }
# 背景を透過させる
opacity = 0.9

色の設定

[colors] セクションで色の設定を行えます。

~/.config/alacritty/alacritty.toml
[colors.primary]
# 背景色
background = "#000055"

[colors]
# カーソル色
cursor = { text = "CellBackground", cursor = "#00ff00" }
# VI モードのカーソル色
vi_mode_cursor = { text = "CellBackground", cursor = "#ff0000" }
# 選択範囲の色
selection = { text = "CellBackground", background = "#ffaaaa" }

カーソル

[cursor] セクションでカーソルの表示方法を設定できます。

~/.config/alacritty/alacritty.toml
[cursor]
# カーソルを点滅させる
style = { blinking = "On" }
# 点滅のインターバル
blink_interval = 500
# 点滅を停止するまでの秒数(0: 停止しない)
blink_timeout = 0

フォント

[font] セクションでフォントの表示設定を行えます。

~/.config/alacritty/alacritty.toml
[font]
# フォントサイズ(デフォルトは 11.25)
size = 16

キーバインド

Alacritty のデフォルトのキーバインドは alacritty-bindings(5) で確認できます。 これ以外のキーバインドを設定したいときは [keyboard] セクションで設定します。 キー名(F1PageUp)のリストは こちら で確認できます。

次の例では、PageUpPageDown キーを画面スクロールに割り当てています(デフォルト設定でも Shift + PageUp/PageDown で画面スクロールできます)。

~/.config/alacritty/alacritty.toml
[keyboard]
binding = [
  { key = "PageUp", action = "ScrollPageUp" },
  { key = "PageDown", action = "ScrollPageDown" },
]

カラーテーマ

カラーテーマ をインポートすることで、まとめて色の設定を行うこともできます。

Windows 用の設定

WSL の Ubuntu を使う

Windows で Alacritty を起動したときに WSL 側のシェルを使いたいときは、[shell] セクションで以下のように設定しておきます。 起動時のワーキングディレクトリを移動したいときは --cd オプションで指定できます(Windows 形式の C:/aaa や、Linux 形式の /mnt/x~/gitwork といったパスを指定できます)。

~/.config/alacritty/alacritty.toml
[shell]
program = "wsl"
args = ["--cd", "D:/y/gitwork"]

通常はデフォルトの Ubuntu ディストリビューションが起動するはずですが、他のディストリビューションを起動したいときは -d <dist> オプションで指定できます。 WSL にどのようなディストリビューションがインストールされているかは、wsl -l で確認できます。

C:\> wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
podman-machine-default

Windows と macOS 用の設定ファイルを分ける

Alacritty はクロスプラットフォームなアプリですが、shell 設定などは OS 別の設定をしたくなります。 そのようなケースでは、次のように共通部分の設定ファイルと OS ごとの設定ファイルを分けて作っておいて、import で読み込むようにすれば OK です。

  • alacritty-common.toml … 共通の設定
  • alacritty-mac.toml … macOS 用の設定
  • alacritty-win.toml … Windows 用の設定

後から読み込んだ設定ファイルで設定が上書きされるので、OS ごとの設定ファイルは後ろに来るように並べてください。

下記は、各 OS 用の alacritty.toml の記述例です。 ここでは、dotfiles という Git リポジトリで設定ファイルを管理していることを想定しています。

import = [
  "~/gitwork/dotfiles/alacritty/alacritty-common.toml",
  "~/gitwork/dotfiles/alacritty/alacritty-mac.toml",
]
import = [
  "D:/gitwork/dotfiles/alacritty/alacritty-common.toml",
  "D:/gitwork/dotfiles/alacritty/alacritty-win.toml",
]

その他

Alacritty は、ターミナルマルチプレクサーである tmux と一緒によく使われます。 tmux を使うと、ターミナル内でタブのような機能を使えるようになります。

更新: / 作成:

tmux の基本要素

/p/hijkfza/img-001.drawio.svg
図: tmux の構成要素
クライアント
tmux の起動元となるターミナルアプリです。 クライアントは tmux サーバーを介してセッションやウィンドウを操作します。 最初に tmux コマンドを実行したときに tmux サーバーが立ち上がり、1 つ目のセッションとウィンドウが生成されます。 複数のクライアントが同じセッションに接続できます。
セッション
セッションは tmux 内での作業単位で、クライアントからセッションにアタッチすることで、セッション内のウィンドウを操作できるようになります。 セッション内には複数のウィンドウを作成することができます。 クライアントからセッションをデタッチしても、tmux サーバーが存在する限り、セッションは生き続けることができます。
ウィンドウ
ウィンドウはセッション内でのトップレベルの表示領域で、見た目としては Web ブラウザのタブのように見えます。 ウィンドウはセンション間で移動することができます。 ウィンドウは複数のペインに分割することができます。
ペイン
ペインはウィンドウ内の分割領域を表します。 IDE のようにウィンドウを分割して複数の作業を同時に行えます。

tmux のコマンド入力の仕組み

ターミナルアプリなどのクライアントから tmux コマンドを実行すると、tmux セッションが立ち上がり、クライアントがアタッチされます。 アタッチされたクライアント上で PREFIX キーとの組み合わせによるキーシーケンスを入力することで、tmux セッション内のウィンドウを操作できます。 PREFIX キーには、デフォルトで Ctrl + b が割り当てられています。

tmux の制御コマンドには名前が付けられており、tmux コマンドの引数で制御コマンド名を渡すことで実行できるようになっています(内部的には tmux サーバーにコマンドが送られています)。 tmux セッション内で tmux コマンドを実行すると、そのセッションに対しての操作になります。 また、PREFIX → : に続けてコマンド名を入力する方法もあります。

例えば、セッション内に新しいウィンドウを作成したいときは、以下のように複数の方法で実行できます。

  • PREFIX → c と入力する
  • PREFIX → :new-window と入力する(:neww でも OK)
  • ターミナル上で tmux new-window を実行する(neww でも OK)

セッション (Session)

tmux の一連の機能を使用するには、最初にセッションを作成する必要があります。 セッションを作成すると、同時に 1 つのウィンドウが作成されます。

キーバインド説明(パラメーター)
tmux
tmux new-session
セッションを作成する(セッション名はデフォルトで 0 からの連番になる)(new-session は省略形の new でも OK)
  • tmux new -s <NAME> … セッションを作成してついでに名前を付ける
  • tmux new -As <NAME> … セッションを作成してついでに名前を付けるが、すでに同名のセッションがあればそこにアタッチする
  • tmux new -ADs <NAME> … セッションを作成してついでに名前を付けるが、すでに同名のセッションがあればそこにアタッチする(アタッチされている既存のクライアントはデタッチされる)
PREFIXdクライアントをセッションからデタッチする
tmux attach (a)クライアントをセッションにアタッチする
  • (パラメーターなし) … 直近のセッションにアタッチする
  • -t <NAME> … 既存のセッションにアタッチする(存在しない場合はエラー)
  • -dt <NAME> … 既存のセッションにアタッチする(存在しない場合はエラー)(現在アタッチされているクライアントはデタッチされる)
PREFIX → sセッションの一覧を表示して移動する
PREFIX → $セッションに名前を変更する (:rename-session)
tmux list-sessionsセッションの一覧を表示する(省略形: ls
tmux kill-session [-t <INDEX>]セッションを終了する

ウィンドウ (Window)

1 つのセッション内に複数のウィンドウを配置することができます。 概念的には、macOS や Windows のターミナルアプリにある タブ機能 に近いです。

キーバインド説明
PREFIX → c新しいウィンドウを作成する。ウィンドウには連番のインデックス (0, 1, 2, …) が割り当てられます。
  • :neww -n <NAME> … 作成するウィンドウの名前を指定する。
  • :neww -t <INDEX> … 作成するウィンドウのインデックスを指定する。
PREFIX → n次のウィンドウへ移動する (:next, :next-window, :select-window -n)
PREFIX → p前のウィンドウへ移動する (:prev, :previous-window, :select-window -l)
PREFIX → l直近のウィンドウへ移動する (:last, :last-window, :select-window -l)
PREFIX → 00 番のウィンドウへ移動する (:select-window -t0, :selectw -t0)
PREFIX → 11 番のウィンドウへ移動する (:select-window -t1, :selectw -t1)
PREFIX → '移動先のウィンドウを指定するプロンプトを表示
PREFIX → wウィンドウの一覧を表示して移動する (:choose-tree)
PREFIX → ,ウィンドウ名を変更する (:rename-window)
PREFIX → .現在のウィンドウの番号を変更する (:move-window, :movew)
tmux list-windowsウィンドウの一覧を表示する(省略形: lsw
exitウィンドウを閉じる

ペイン (Pane)

ウィンドウを分割することでペイン (Pane) を作成できます。

キーバインド説明(パラメーター)
PREFIX → %ウィンドウを水平方向(左右)にペイン分割する
  • :splitw -hb … 新しいペインを左に作成する
  • :splitw -hd … 分割後にペインを切り替えない
PREFIX → "ウィンドウを垂直方向(上下)にペイン分割する
  • :splitw -vb … 新しいペインを上に作成する
  • :splitw -vd … 分割後にペインを切り替えない
PREFIX → o次のペインへ移動する
PREFIX → ;直前のペインへ移動する
PREFIX → Up上のペインへ移動する (:select-pane -U)
PREFIX → Down下のペインへ移動する (:select-pane -D)
PREFIX → Left左のペインへ移動する (:select-pane -L)
PREFIX → Right右のペインへ移動する (:select-pane -R)
PREFIX → q各ペインの番号とサイズを表示する (:display-panes)
続けて数字キーを入力することでそのペインへ移動できます
PREFIX → {上のペインと入れ替える
PREFIX → }下のペインと入れ替える
PREFIX → Ctrl+oウィンドウ内でペインの位置を回転する (:rotatew, :rotate-window)
exitペインを閉じる

ターミナル上の tmux コマンドでも分割できるところが面白いです。 例えば、tmux sp -h で左右に分割できます(spsplitw の省略形)。

その他(ヘルプなど)

キーバインド説明
PREFIX → ?キーバインドの一覧を確認する(迷ったらコレ)(q で終了)
PREFIX → /入力したキーに割り当てられた機能を表示する
PREFIX → :コマンド名を入力してコマンドを実行する
tmux kill-servertmux サーバーを終了する(すべてのセッションが破棄されます)
tmux list-clientsクライアントの一覧を表示する(省略形: lsc
PREFIX → tペイン内に現在時刻を表示する

Alacritty

tmux と相性のよいモダンなターミナルエミュレーターとして、Alacritty があります。

シェル起動時に tmux セッションへ接続

tmux のセッションにアタッチしているときは、シェル上で TMUX 環境変数に値が入ります。 これを利用すると、シェルスクリプト内で tmux セッションにアタッチされているかどうかを判別することができます。 次のスクリプトでは、シェルの起動時に tmux コマンドの存在を確認し、tmux コマンドが存在するなら $TMUX の値を見て、値がセットされていなければ既存のセッション 0 にアタッチする、既存のセッションが存在しなければ新しくセッション 0 を作成する、ということをしています。

~/.zshrc
# tmux セッションにアタッチしていないときはアタッチ(必要があればセッション作成)
if which tmux >/dev/null 2>&1 && [[ ! -n $TMUX ]]; then
  tmux new-session -As 0
fi

# 単純に下記の 1 行だけでもいいかも(エラー表示は完全に無視されちゃうけどシンプル)
# tmux new -As 0 >/dev/null 2>&1

関連記事

メニュー

まくろぐ
サイトマップまくへのメッセージ