ターミナルに表示されている情報を色付き・テキストで保存する方法や、それを表示する方法を調べた。
前提
注意 もっと複雑なものもある1が一番簡単なものをまとめる
ターミナルは単純にシェルの標準出力を表示するだけではなく、そこにansi escape sequenceが入ってるとそれに応じてテキストを装飾することがある。

Juliaのprintstyledを使った装飾付き出力
しかし、一般的にターミナルの文字をコピーしようとすると表示されているテキストのみがコピーされ、色の情報などは失われてしまう。 この記事では装飾とテキストの両方の情報を残す方法について紹介する。
環境
前提で書いた通り、ターミナルの段階で装飾の情報は失われるので、どのターミナルを使うかに方法は依存している。
方法
保存方法
tmux capture-pane -e
詳しくはman tmuxでcapture-paneで検索。
-eでescape sequenceを入れてくれる。
-Jするとwrapしない。
-pで標準出力に出力。
デフォルトはバッファー(yankしたときに入るところ)。
-Sで開始行、-Eで終了行を指定。
デフォルトだと表示している範囲をキャプチャする。
0が表示されている一番上の行で、下の行の方向に正。
なので過去の履歴からキャプチャするときは負値を指定する。
-tでターゲットとなるペインを指定。
デフォルトだと現在操作中のペイン。
自分の環境(session “0"1つ)だと、ペイン名は<window number>.<pane number>だった。
なおfish使ってたら補完でいい感じに出てくるので心配しなくて良い。
これを適当なファイルに保存する。
表示方法
catすればいい。
もしくはless -R。
自分は環境変数LESSに-Rはいつも入れているので、tmux capture-pane -eJp | lessしている。
typstで
ansi-renderなる素晴らしいプラグインがあった。
#ansi-render(read("file_name"))
でOk。
こんな感じで使える。 Misskeyの投稿
forgejoに例を上げている。 (forgejoはansi escape sequence付きテキストファイルに色を付けて表示してくれた。多分CIの結果表示するときに使われるんだろう。)
neovimで
ansi.nvimが使えそう? まだ試してない。
yaziで
ただのテキストファイルなので、デフォルトだと$EDITORとかで開くはず。
自分はlessで開くオプションを追加した。
HTMLに変換して
ahaなるソフトがあるらしい4。
微妙なところ
-Sおよび-Eでの範囲指定が非常にやりづらい。
インタラクティブに結果を見ながらいじられるようにしたい。
追記: sixel
自分の環境(tmux on wezterm)だと、sixelが部分的にしか機能しない。
例えば、
img2sixelだと結果が表示されない。lsixは正常に動くtdfは動かない (Couldn’t transfer image to the terminal. 外部からkillしないと死なない)yaziは正常に動く(weztermを直接検出してるっぽい)5w3mはカーソルを動かした瞬間一瞬だけ表示される
yazi –debug
Yazi Version: 26.1.22 (Arch Linux 2026-01-24) Debug : false Triple : x86_64-unknown-linux-gnu (linux-x86_64) Rustc : 1.93.0 (254b5960 2026-01-19) Ya Version: 26.1.22 (Arch Linux 2026-01-24) Config Init : /home/qwjyh/.config/yazi/init.lua (376 chars) Yazi : /home/qwjyh/.config/yazi/yazi.toml (595 chars) Keymap : /home/qwjyh/.config/yazi/keymap.toml (1296 chars) Theme : /home/qwjyh/.config/yazi/theme.toml (No such file or directory (os error 2)) VFS : /home/qwjyh/.config/yazi/vfs.toml (No such file or directory (os error 2)) Package : /home/qwjyh/.config/yazi/package.toml (330 chars) Dark/light flavor: "" / "" Emulator TERM : Some("xterm-256color") TERM_PROGRAM : Some("tmux") TERM_PROGRAM_VERSION: Some("3.6a") Brand.from_env : Some(WezTerm) Emulator.detect : Emulator { kind: Left(WezTerm), version: "WezTerm 20240203-110809-5046fc22", light: false, csi_16t: (11, 20), force_16t: false } Adapter Adapter.matches : Iip Dimension.available: Dimension { rows: 82, columns: 123, width: 1353, height: 1640 } Desktop XDG_SESSION_TYPE : Some("x11") WAYLAND_DISPLAY : None DISPLAY : Some(":0.0") SWAYSOCK : None HYPRLAND_INSTANCE_SIGNATURE: None WAYFIRE_SOCKET : None SSH shared.in_ssh_connection: false WSL WSL: false Variables SHELL : Some("/usr/bin/bash") EDITOR : Some("/usr/bin/nvim") VISUAL : None YAZI_FILE_ONE : None YAZI_CONFIG_HOME : None YAZI_ZOXIDE_OPTS : None FZF_DEFAULT_OPTS : None FZF_DEFAULT_COMMAND: None Text Opener default : Some(OpenerRule { run: "${EDITOR:-vi} %s", block: true, orphan: false, desc: "$EDITOR", for: None, spread: true }) block-create: Some(OpenerRule { run: "${EDITOR:-vi} %s", block: true, orphan: false, desc: "$EDITOR", for: None, spread: true }) block-rename: Some(OpenerRule { run: "${EDITOR:-vi} %s", block: true, orphan: false, desc: "$EDITOR", for: None, spread: true }) Multiplexers TMUX : true tmux version : tmux 3.6a tmux build flags : enable-sixel=Supported ZELLIJ_SESSION_NAME: None Zellij version : 0.43.1 Dependencies file : 5.46 ueberzugpp : No such file or directory (os error 2) ffmpeg/ffprobe: 8.0.1 / 8.0.1 pdftoppm : 26.01.0 magick : 7.1.2-13 fzf : 0.67.0 fd/fdfind : 10.3.0 / No such file or directory (os error 2) rg : 15.1.0 chafa : 1.18.0 zoxide : 0.9.9 7zz/7z : No such file or directory (os error 2) / 26.00 resvg : 0.47.0 jq : 1.8.1 Clipboard wl-copy/paste: No such file or directory (os error 2) / No such file or directory (os error 2) xclip : 0.13 xsel : No such file or directory (os error 2) Routine `file -bL --mime-type`: text/plain See https://yazi-rs.github.io/docs/plugins/overview#debugging on how to enable logging or debug runtime errors.
なんで動かないのかわかってないので知見があるかたお知らせ下さい(コメント機能などでどうぞ)。
Comments
Reply to this post (misskey) to leave a comment.
Reply