2017-02-24 83 views
0

我已經安裝了Git for Windows,並且通常對它提供的Bash shell中設置的功能感到滿意。我遇到了別處的問題,在我嘗試過的其他地方都能正常工作。用於Windows的Git Bash shell'less'命令在顯示來自Git日誌的格式化文本時顯示垃圾

別名:

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外殼,該別名會產生好的結果。

alias executed under Cygwin

在GFW的Bash shell中,輸出是相當錯位:

alias under Git For Windows Bash

如果我直接運行命令,沒有一個別名,它工作正常。所以我知道這不是GFW的Bash shell不知道如何解析命令,因爲我寫了它。

我的問題:如何讓這個別名在Git For Windows下正常工作?

我打算使用替代別名。如果一個linux函數或一個真正的Git別名會更好地工作,我很滿意這些替代方案。儘管如此,搞清楚爲什麼會發生這樣的情況會很好。

更新/發現 該問題似乎與解釋別名完全不同。如果我將管道移到「較少」的位置,輸出將正確顯示。所以看起來Git Bash Shell中實現的'less'命令與其他實現不同地解釋了轉義序列(字面意思,我猜)。因此,無論是在功能或其他方面打包電話都不會解決核心問題。

+0

'alias ls'的輸出是什麼? – smarber

+0

alias ls ='ls -F --color = auto --show-control-chars' –

回答

4

正如評論所述,損壞的東西是顏色轉義序列。要使less正確顯示,請使用less -R

從手冊頁,

-R或--raw-CONTROL-煤焦 -r一樣,但只有ANSI 「顏色」 轉義序列是在 「原始」 形式輸出。與-r不同,在大多數情況下屏幕外觀保持正確 。 ANSI「顏色」轉義序列是 形式的序列:

ESC [ ... m 

,其中「......」是零個或更多的色彩規範字符有關跟蹤屏幕外觀的 目的,ANSI顏色逸出 序列假定不移動光標。您可以減少認爲 除「m」以外的字符可以結束ANSI顏色轉義序列 將環境變量LESSANSIENDCHARS設置爲可以結束顏色轉義序列的 字符列表。通過將環境變量 LESSANSIMIDCHARS設置爲可出現的字符列表,您可以減少 認爲除ESC標準之外的其他字符可能在ESC和m之間出現 。