ANSI转义序列

ANSI跳脫序列是一種帶內訊號的跳脫序列標準，用於控制影片文字終端上的游標位置、顏色和其他選項。在文字中嵌入確定的位元組序列，大部分以ESC跳脫字元和"["字元開始，終端會把這些位元組序列解釋為相應的指令，而不是普通的字元編碼。
ANSI序列是在二十世紀七十年代引入的標準，用以取代特定於終端供應商的序列，並在二十世紀八十年代早期開始在電腦裝置市場上廣泛使用。與早期缺少游標移動功能的系統相比，新生的電子公告板系統使用ANSI序列改進其顯示。正是因為這個原因，ANSI序列變成了所有製造商共同採用的標準。
在21世紀，儘管硬體文字終端已經越來越少了，但ANSI標準依然存在，因為大多數終端類比器會對部分ANSI跳脫序列進行解釋。一個值得注意的例外是，在微軟Windows 10更新TH2之前，Windows作業系統的Win32控制台是不支援ANSI跳脫序列的。

歷史

最初，幾乎每個影片終端製造商都各自添加了特定的跳脫序列用於執行一些特殊操作，比如把游標置於螢幕上的某個位置。舉例來說，VT52終端允許通過傳送ESC字元、y字元，後面跟上兩個等於x,y位置的數值加上32的字元（這是為了從ASCII空格字元開始，並避開控制字元），將游標置於螢幕上的x,y位置。
由於這些序列對於不同的終端並不一樣，因此人們不得不開發了一些複雜的庫（比如termcap）和實用程式（比如tput），以便程式可以使用同一套API應對各種終端。另外，在很多終端中需要藉助字元的二進位值傳送數字（如行和列）。對於某些程式語言，以及內部不使用ASCII的系統來說，把數字轉換為正確的字元常常是有困難的，甚至完全做不到。
ANSI標準試圖解決這些問題。標準制訂了一種所有終端共用的指令集，並要求用ASCII的數字字元傳遞所有數值資訊。該系列的第一個標準是1976年通過的ECMA-48。它是一系列字元編碼標準的延續，其中第一個是從1965年的ECMA-6，一個7位標準，ISO 646就源自此標準。「ANSI跳脫序列」的名稱可以追溯到1979年ANSI採用ANSI X3.64。此外，ANSI X3L2委員會與ECMA委員會TC 1合作制訂了一個幾乎一模一樣的標準。以上兩個標準合併為ISO 6429的國際標準。1994年，ANSI取消了其標準，以支援國際標準。
第一個支援這個標準的流行影片終端是1978年推出的Digital VT100。這個終端在市場上非常成功，引發了各種各樣的仿製品，其中最早和最流行的是1979年的Zenith Z-19。其他品牌還有Qume QVT-108，Televideo TVI-970，Wyse WY-99GT。另外，許多其他品牌的終端也不同程度地相容可選的「VT100」、「VT103」或「ANSI」模式。 隨著越來越多的軟體（尤其是BBS系統）普及，越來越多的軟體依賴跳脫序列起作用，導致幾乎所有新的終端和終端類比器都支援了此標準。
1981年，ANSI X3.64被美國政府採用（FIPS 86）。後來，美國政府停止複製行業標準，所以FIPS 86又被撤回了。
ECMA-48已經經歷了多次更新換代，目前是從1991年開始的第5版。它也被ISO和IEC用作標準ISO/IEC 6429。

平台支援

隨著諸多BBS和線上服務廣泛使用ANSI，到20世紀80年代中期，ANSI幾乎得到了全平台支援。儘管許多作業系統在標準文字輸出中越來越多地支援ANSI，但大多數情況下是以終端類比器的形式（例如Unix上的xterm，或MacOS上的OS X Terminal或ZTerm，以及IBM PC上的許多通訊程式）。
Unix和AmigaOS都在作業系統中包含了對ANSI的一些支援，導致在這些平台上執行的程式廣泛使用ANSI。 類Unix作業系統可以通過像termcap和curses函式庫之類的庫來生成ANSI程式碼，許多軟體使用這些庫更新顯示方式。這些庫也應該支援非ANSI終端，但是現在很少有人測試，所以很可能已經不起作用了。許多遊戲和shell指令碼直接輸出ANSI序列（如彩色的提示資訊），因此無法在不支援ANSI的終端上執行。
AmigaOS不僅支援輸出到螢幕上的文字使用ANSI序列，印表機驅動程式也支援（用AmigaOS的專有擴充），並將它們轉換為與特定印表機實際通訊所需的程式碼。
儘管ANSI很普及，卻並沒有得到全平台支援。比如原始的「經典」Mac OS就沒有內建對ANSI的支援，再比如Atari ST使用的是VT52改編的命令系統，用一些擴充程式支援顏色顯示。

Windows和DOS

MS-DOS 1.x不支援ANSI或任何其他跳脫序列，只有少數控制字元（BEL、CR、LF、BS）可以由底層BIOS解釋，所以幾乎不可能做出任何全螢幕應用程式。所有顯示效果都必須通過BIOS呼叫，或者直接控制IBM PC硬體來完成，呼叫速度非常慢。
DOS 2.0引入了添加裝置驅動程式來支援ANSI跳脫序列的功能（事實上的標準是ANSI.SYS，但也使用了ANSI.COM、NANSI.SYS和ANSIPLUS.EXE等其他程式。因為繞過了BIOS，所以這些程式的速度比以前快了不少）。但由於實際執行速度仍然比較慢，以及預設並沒有安裝，所以還是很少得到利用。應用程式往往還是繼續用直接控制硬體的方式來顯示所需的文字。ANSI.SYS和類似的驅動程式繼續在Windows 9x上工作，直到Windows Me，在NT衍生系統中用於在NTVDM下執行的16位元傳統程式。
Win32控制台完全不支援ANSI跳脫序列。不過有一些控制台的替代品或者附加軟體具有解釋程式輸出的ANSI跳脫序列的功能，例如JP Software的TCC（以前的4NT）、Michael J. Mefford的ANSI.COM、Jason Hood的ANSICON和Maximus5的ConEmu。有一個Python軟體包在內部解釋了列印文字中的ANSI跳脫序列，將它們轉換為系統呼叫來操縱顏色和游標位置，以便更容易地將使用ANSI的Python程式碼移植到Windows。
2016年，在Windows 10發布「Threshold 2」時，微軟開始在控制台應用程式中支援ANSI跳脫序列，使得從Unix移植軟體或者遠端存取Unix變得更容易。

24位元

隨著16位元到24位元顏色的「真彩色」顯示卡的普及，Xterm、KDE的Konsole，以及所有基於libvte的終端（包括GNOME終端）支援了ISO-8613-3的24位元前景色和背景色設定。
   ESC[ … 38;2;<r>;<g>;<b> … m选择RGB前景色
   ESC[ … 48;2;<r>;<g>;<b> … m选择RGB背景色
作為ISO / IEC國際標準8613-6採用的ITU的T.416資訊科技-開放文件體系結構（ODA）和交換格式：字元內容體系結構給出了一個似乎不太受支援的替代版本：
   ESC[ … 38:2:<Color-Space-ID>:<r>:<g>:<b>:<unused>:<CS tolerance>:<Color-Space: 0="CIELUV"; 1="CIELAB">m选择RGB前景色
   ESC[ … 48:2:<Color-Space-ID>:<r>:<g>:<b>:<unused>:<CS tolerance>:<Color-Space: 0="CIELUV"; 1="CIELAB">m选择RGB背景色
請注意，這裡使用了保留的「:」字元來分隔子選項，這可能是在實際實現中造成混淆的始作俑者。它還使用「3」作為第二個參數來指定使用青-品紅-黃方案的方案，「4」用於青-品紅-黃-黑的方案，後者使用上面標記為「unused」（「未使用」）的位置作為黑色元件。
還要注意，許多辨識「:」作為分隔符的實現錯誤地忽視了色彩空間識別元參數，並因此改變了其餘部分的位置。

範例

CSI 2 J — 清除螢幕、（在某些裝置上）把游標置於1,1位置（左上角）。
CSI 32 m — 使文字呈綠色。在MS-DOS上，一般綠色是暗淡的綠色，可以用CSI 1 m啟用粗體使其變成明亮的綠色，或者將兩者合併為CSI 32 ; 1 m。MS-DOS ANSI.SYS用粗體狀態使字元變亮，閃爍狀態（通過INT 10, AX 1003h, BL 00h)使背景色變成明亮模式。MS-DOS ANSI.SYS並不直接支援SGR程式碼90–97和100–107。
CSI 0 ; 6 8 ; "DIR" ; 13 p — 重新分配F10鍵的功能為傳送字串「DIR」和Enter符號到鍵盤快取中，在DOS命令列里會顯示目前目錄的內容（僅MS-DOS ANSI.SYS）。這種序列有時用於「ANSI炸彈」。這是一個私用編碼（如字母p所示），用非標準的擴充使其包含一個字串參數。如果按標準，會認為字母D是序列的末尾。
CSI s — 儲存游標的位置。用序列CSI u會把游標重設回這個位置。假設目前的游標位置是7（y）、10（x）。序列CSI s會儲存這兩個數值。現在可以把游標移動到其他位置，比如用序列CSI 20 ; 3 H或CSI 20 ; 3 f把游標移動到20（y）、3（x）。現在如果用序列CSI u，游標會回到7（y）、10（x）。某些終端需要使用DEC序列ESC 7/ESC 8，這得到了更廣泛的支援。

使用Shell指令碼的範例

ANSI轉移程式碼常常用於UNIX和類UNIX終端，以提供語法突顯功能。例如，在相容的終端上，以下ls命令按類型對檔案和目錄的名稱進行顏色編碼。
ls --color
用戶可以在指令碼中使用跳脫碼，將其作為標準輸出或標準錯誤輸出的一部分。例如，下面的GNU sed命令通過反顯「WARN」開頭的單詞的行，以及使用暗紅色背景色和亮黃色前景色顯示以「ERR」開頭的單詞（字母大小寫被忽略）的行來修飾make命令的輸出。突出顯示了設定ANSI程式碼的部分。
make 2>&1 | sed -e 's/.*\bWARN.*/\x1b[7m&\x1b[0m/i' -e 's/.*\bERR.*/\x1b[93;41 m&\x1b[0m/i'
以下Bash函式會使終端閃爍（通過交替傳送反相和正常顯示模式程式碼），直到用戶按下任意鍵。這個函式可以用於當一個冗長的命令終止時提醒用戶，用法如make; flasher。
flasher () { while true; do printf \\e[?5h; sleep 0.1; printf \\e[?5l; read -s -n1 -t1 && break; done; }
下面這個命令可以重設控制台，類似現代Linux系統的reset命令。然而，即使在較早的Linux系統和其他（非Linux）UNIX變體上，也應該能起作用。
printf \\033c