2014-10-10 40 views
1

當我打開less時,它在一個單獨的緩衝區中(也許還有另一個術語?):終端的滾動條消失,我可以用鼠標滾輪滾動。一旦less關閉,我的bash會話被恢復。如何使用較少的獨立緩衝區顯示較長的git輸出?

如果我有git的長輸出,它會自動傳輸到less,但在這種情況下,它使用與我的會話相同的緩衝區。終端的滾動條停留,用鼠標滾輪滾動會話並前後滾動(用鍵盤)留下終端中顯示的所有內容。最後一件事情可以通過連續擊打j和k來輕鬆顯示。滾動終端緩衝區時,第一行將重複多次。

使用less工作的其他工具,例如psql的長輸出顯示爲less在單獨的緩衝區中。我怎樣才能讓git做同樣的事情?

回答

2

git-config(1)說:

core.pager

git會使用分頁輸出的命令。可以用GIT_PAGER環境變量覆蓋。請注意,如果git在運行尋呼機時未設置,那麼git會將LESS環境變量設置爲FRSX。

關鍵部分是LESS變量的X。諮詢少手冊頁:

-X或--no-INIT

禁止發送的termcap初始化和還原字符串到終端。如果去初始化字符串做了一些不必要的事情,比如清除屏幕,這有時是可取的。

所以我們需要禁用它。幸運的是,git-config(1)顯示瞭解決方案:

如果您想有選擇地覆蓋Git的LESS默認設置,可以將core.pager設置爲例如少 - + S。這將通過Git傳遞給shell,它將最終的命令轉換爲LESS = FRSX less - + S。

太好了,如果我們對默認設置感到滿意,這比自己設置LESS變得更容易。因此,解決方案變爲:

git config --global core.pager 'less -+X -+F' 

這會重新啓用termcap初始化,這涉及到創建新緩衝區。不幸的是F也有被禁用。如果輸出適合屏幕,則會導致立即退出。由於輸出位於另一個緩衝區中,因此該命令立即返回而不打印任何內容。