如何使用System.Console.ANSI为字符串添加转义序列实现终端着色?
使用System.Console.ANSI实现带颜色的文本输出
核心实现步骤
- 先确保已安装
ansi-terminal包,代码中引入模块:import System.Console.ANSI - 你提到的"strawberry"风格函数(如
red、green、blue等)直接返回对应颜色的ANSI转义字符串,搭配reset函数(重置终端格式),就能在纯代码里为字符串包裹颜色转义序列:-- 纯函数:给文本添加红色转义序列 redText :: String -> String redText txt = red ++ txt ++ reset -- 其他颜色的实现逻辑一致 greenText :: String -> String greenText txt = green ++ txt ++ reset - 将处理后的字符串传入IO monad的打印函数,就能在终端显示带颜色的文本:
main :: IO () main = do putStrLn $ redText "这是红色的文本" putStrLn $ greenText "这是绿色的文本" putStrLn "这是恢复默认格式的文本"
关键注意点
- 必须添加
reset转义序列,否则后续所有终端输出都会保持当前设置的颜色或格式。 - 部分老旧终端可能不支持ANSI转义序列,此时会直接显示转义码而非彩色文本。
关于Example.hs链接404的问题
该示例文件已从原位置移除,可前往ansi-terminal的官方仓库的examples目录查找相关示例代码。
内容的提问来源于stack exchange,提问作者Enlico
相关产品推荐
相关产品推荐

