Git for Windows Bash shell 'less' 命令在显示来自 Git 日志调用的格式化文本时显示垃圾

Git for Windows Bash shell 'less' command displays garbage while displaying formatted text from Git log call

我已经为 Windows 安装了 Git,我对它提供的 Bash shell 中的功能集总体上很满意。我在使用别名时遇到了问题,这个别名在我试过的其他任何地方都可以正常工作。

别名:

alias gl='git log --graph --format='\''%Cred%h%Creset %s    %C(yellow)%an | %C(cyan)%ad%Creset %C(green bold)%d%Creset'\''' | less

在 Cygwin、MacOS bash 终端中,当然在 Linux shell 中,别名会产生很好的结果。

在 GFW 的 Bash shell 中,输出非常混乱:

如果我直接 运行 命令,没有别名,它可以正常工作。所以我知道不是GFW的Bashshell不知道怎么解析我写的命令

我的问题:如何让这个别名在 Git For Windows 下正常工作?

我愿意使用替代别名。如果 linux 函数或真正的 Git 别名会更好地工作,我对这些替代方案感到满意。不过,最好弄清楚为什么会这样。

UPDATE/DISCOVERY 问题似乎根本不在于解释别名。如果我删除到 'less' 的管道,输出将正确显示。所以它看起来像在 Git Bash Shell 中实现的 'less' 命令对转义序列的解释与其他实现不同(我猜是字面意思)。因此,再多的函数包装调用也无法解决核心问题。

如评论所述,损坏的东西是颜色转义序列。要使 less 正确显示它们,请使用 less -R.

来自手册页,

-R or --RAW-CONTROL-CHARS Like -r, but only ANSI "color" escape sequences are output in "raw" form. Unlike -r, the screen appearance is maintained correctly in most cases. ANSI "color" escape sequences are sequences of the form:

ESC [ ... m

where the "..." is zero or more color specification characters For the purpose of keeping track of screen appearance, ANSI color escape sequences are assumed to not move the cursor. You can make less think that characters other than "m" can end ANSI color escape sequences by setting the environment variable LESSANSIENDCHARS to the list of characters which can end a color escape sequence. And you can make less think that characters other than the standard ones may appear between the ESC and the m by setting the environment variable LESSANSIMIDCHARS to the list of characters which can appear.