Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
150
Help us understand the problem. What is going on with this article?
@PruneMazui

ANSIエスケープシーケンス チートシート

More than 3 years have passed since last update.

ANSIエスケープシーケンスを駆使すれば、
こんな感じでターミナルの出力に色を付けたり
2017-11-02_18h13_43.png

出力した内容を書き換えたりできる。
escape.gif

[PHP]ゲーム作成初心者がPHPでテト〇ス風ゲームを作ってみた
上記記事にて出力されるブロックの色を変更したり、出力内容を上書きしたりするのに使った。

記法

指定がない限り、太字の部分が可変となる箇所。

カーソル移動

記法 内容
\e[nA 上にn移動
\e[nB 下にn移動
\e[nC 右にn移動
\e[nD 左にn移動
\e[nE n行下の先頭に移動
\e[nF n行上の先頭に移動
\e[nG 現在位置と関係なく左からnの場所に移動
\e[n;mH
\e[n;mf
現在位置と関係なく上からn、左からmの場所に移動

コンソールスクロール

記法 内容
\e[nS n行分コンソールを次にスクロール
\e[nT n行分コンソールを前にスクロール

出力消去

記法 内容
\e[nJ 画面消去
0(or省略)・・・カーソルより後ろを消去
1・・・カーソルより前を消去
2・・・画面全体を消去
\e[nK 行消去
0(or省略)・・・カーソルより後ろを消去
1・・・カーソルより前を消去
2・・・行全体を消去

出力文字の変更

注:ターミナルによって対応してる/してないが分かれる

記法 内容
\e[0m 指定をリセットし未指定状態に戻す(0は省略可)
\e[1m 太字
\e[2m 薄く表示
\e[3m イタリック
\e[4m アンダーライン
\e[5m ブリンク
\e[6m 高速ブリンク
\e[7m 文字色と背景色の反転
\e[8m 表示を隠す(コピペ可能)
\e[9m 取り消し

出力色の変更

先述した \e[0m でリセット可能。

文字色 背景色
\e[30m \e[40m
\e[31m \e[41m
\e[32m \e[42m
\e[33m \e[43m 黄色
\e[34m \e[44m
\e[35m \e[45m マゼンダ
\e[36m \e[46m シアン
\e[37m \e[47m

出力色の変更(拡張)

注:ターミナルによって対応してる/してないが分かれる

文字色 背景色 内容
\e[38;5;nm \e[48;5;nm nを0~255のカラーコードを指定
\e[38;2;r;g;bm \e[48;2;r;g;bm RGBでのカラーコードを指定
(対応端末少ない)

サンプル

サンプルは Windows10 + Cygwin で表示された内容

出力文字

for ((i = 1; i <= 9; i++)); do
    printf '\e[%dm%d\e[m ' $i $i
done

2017-11-02_16h32_26.png

ブリンクはしなかった。

文字色

for ((i = 30; i <= 37; i++)); do
    printf '\e[%dm%d\e[m ' $i $i
done

2017-11-02_16h13_32.png

背景色

for ((i = 40; i <= 47; i++)); do
    printf '\e[%dm%d\e[m ' $i $i
done

2017-11-02_16h15_20.png

文字色(拡張)

for ((i = 0; i < 16; i++)); do
    for ((j = 0; j < 16; j++)); do
        hex=$(($i*16 + $j))
        printf '\e[38;5;%dm0x%02X\e[m ' $hex $hex
    done
    echo "";
done

2017-11-02_16h16_52.png

背景色(拡張)

for ((i = 0; i < 16; i++)); do
    for ((j = 0; j < 16; j++)); do
        hex=$(($i*16 + $j))
        printf '\e[48;5;%dm0x%02X\e[m ' $hex $hex
    done
    echo "";
done

2017-11-02_16h17_54.png

150
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
PruneMazui
試行錯誤の毎日 割と雑食だけどよくいるのはこの辺 ⇒ アジャイル / プロジェクトマネジメント / バックエンドアーキテクチャ / OOP / FP / RDBMS
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
150
Help us understand the problem. What is going on with this article?