3

我已经为 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 中,别名会产生很好的结果。

在 Cygwin 下执行的别名

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

Git For Windows Bash 下的别名

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

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

我愿意使用别名的替代方法。如果 linux 函数或真正的 Git 别名能更好地工作,我对这些替代方案感到满意。不过,很高兴弄清楚为什么会发生这种情况。

更新/发现 问题似乎根本不在于解释别名。如果我将管道移除为“更少”,则输出显示正确。因此,看起来 Git Bash Shell 中实现的“less”命令对转义序列的解释与其他实现不同(字面意思,我猜)。结果,再多的将调用包装在函数中或类似的东西都无法解决核心问题。

4

1 回答 1

6

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

从手册页,

-R 或 --RAW-CONTROL-CHARS 与 -r 类似,但只有 ANSI“颜色”转义序列以“原始”形式输出。与 -r 不同,在大多数情况下,屏幕外观保持正确。ANSI“颜色”转义序列是以下形式的序列:

ESC [ ... m

其中“...”是零个或多个颜色规范字符 为了跟踪屏幕外观,假定 ANSI 颜色转义序列不会移动光标。您可以通过将环境变量 LESSANSIENDCHARS 设置为可以结束颜色转义序列的字符列表来减少“m”以外的字符可以结束 ANSI 颜色转义序列的想法。通过将环境变量 LESSANSIMIDCHARS 设置为可以出现的字符列表,您可以减少在 ESC 和 m 之间出现标准字符以外的字符的想法。

于 2017-02-24T17:42:20.653 回答