簡體   English   中英

從 mac 終端向下滾動 git diff

[英]scrolling down git diff from mac terminal

我在 OS X 10 Yosemite 的終端上使用 git。

當我執行 git diff 時,我會得到一長串更改,有時我只需要滾動到最后,但除了按住 MacBook Pro 上的 keydown 然后它慢慢滾動之外,我想不出辦法做到這一點。

如果我按下 FN+down 鍵,那么它不會滾動,除非我已經使用向下按鈕進行了向下滾動,但不會向下滾動...

任何建議都會不勝感激,這很煩人...... :(

git diff使用與less Unix 命令相同的尋呼機。

  • 使用鍵du向下/向上半頁(技術上向前/向后)
  • 跳到最后一行: G
  • 如果要顯示幫助,請使用h

另一個技巧是將差異存儲為補丁文件,就像他們過去在電子郵件時代所做的那樣! 然后你可以在任何程序中打開補丁(Sublime 有語法高亮紅色/綠色)

一些例子:

git diff master > ~/patch

git show someCommitSHA > ~/patch

git diff master myBranch -- *.js *.css > ~/patch patch of js & css diff from master


git apply ~/patch

通常你會通過應用差異來使用補丁,但你可以在任何文本編輯器中打開文件。 如果您不想完全提交差異,但仍想在其他地方使用它或將其發送給朋友,這很有用


你也可以使用git diff master | grep -C 2 someKeyword git diff master | grep -C 2 someKeyword在某個關鍵字周圍顯示 diff +/- 2 行

git config --global core.pager "less -+\$LESS -RS"

在我的新 macOS 筆記本電腦上,git log 滾動按我的預期工作(向上/向下翻頁按鈕工作、顏色、滾輪滾動)。

為什么這行得通? 根據git-config 手冊頁

請注意,如果在運行尋呼機時未設置 LESS 環境變量,則 git 會將其設置為 FRSX。

根據較少的聯機幫助頁

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

我實際上不知道這意味着什么,但是 X 打破了向上翻頁/向下翻頁/滾輪。

-F 如果整個文件可以顯示在第一個屏幕上,則讓 less 自動退出。

如果你沒有 X,那么 F 在沒有分頁時會中斷,大概是因為 less 立即退出並且某些東西阻止它直接打印到終端。

根據 mzabaluev 的評論:

OS X 終端與 less 有一些神奇的集成,當 less 作為 git 的子進程運行時會中斷:when run as git diff | 更少,可以使用觸摸板手勢向前滾動,但是使用 git diff 的輸出它只會滾動終端輸出並且不能告訴更少向前滾動。 有趣的是, git help 並沒有遇到這個問題。 mzabaluev 1 月 4 日 0:39

這個魔法還包括啟用向上翻頁 (FN+up) 和向下翻頁 (FN+down)。

解決此問題的一種快速而骯臟的方法是通過以下方式調用less自己:

git diff --color=always | less -r

命令行選項保留 git 的彩色輸出。 我從可以少保留彩色輸出嗎?

您可以使用任何 less 命令來瀏覽歷史記錄。 見:常用的less命令

示例:在終端的左下角,您一定會看到類似這樣的內容。 在此處輸入圖像描述

在上面的示例中,歷史記錄有 221 行,當前窗口顯示第 21-62 行。

直接轉到行號:您可以通過鍵入直接轉到行

line-number (followed by) g   (no spaces necessary)

例如:要轉到第 100 行,只需輸入100g

跳過 x 行:鍵入一個數字並按 Enter。

向下滾動並向下滾動使用 Fn

或使用以下替代品。

按空格鍵。 正如 ILI 建議的那樣。

向上滾動一頁

按“w”

回家

Fn 左箭頭轉到結尾Fn 右箭頭

最簡單的方法是使用less來讀取 diff 輸出。 您需要使用--color-R選項來保持着色。

git diff --color | less -R

這對我來說很好。

你可以為這個命令制作一個宏。


自從我寫了這個答案后,我發現您可以使用LESS環境變量來設置less的選項,因此您可以更輕松地執行與上述相同的操作:

LESS=R git diff
brew install less
git config --global core.pager "less -+\$LESS -RSF"

安裝較新版本的 less 修復了-F導致小輸出在沒有-X的情況下完全消失的錯誤,然后 config 命令刪除-X ,這是中斷滾動的原因。

這將用最新版本替換 MacOS 附帶的less版本,但由於它們是相同的實用程序(與 GNU coreutils 與 BSD coreutils 不同),這不應該破壞事情。

解釋

這是對ognockocaten 答案的擴展。

該答案表明:

git config --global core.pager "less -+\$LESS -RS"

這刪除了兩個選項:

-F / --quit-if-one-screen

如果整個文件可以顯示在第一個屏幕上,則導致 less 自動退出。

-X / --no-init

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

這適用於手頭的問題,但不是最理想的,因為無論輸出有多小, less總是會切換到備用頁面。 所以,即使是像git diff這樣的小命令,你也會得到一個完整的備用屏幕。

仔細閱讀,似乎重新添加-F可以解決這個問題。 然而,兩件事的結合導致了這個問題:

  • 在 MacOS 附帶的 less 版本487上,less 將首先切換到備用屏幕,然后檢查文本是否足夠小,從而將輸出打印到備用屏幕緩沖區。 這已在版本530中修復(請參閱https://unix.stackexchange.com/a/107355/39135
  • 在沒有-X的 MacOS 上,從備用緩沖區切換回主緩沖區會清除屏幕,從而擦除剛剛打印到備用屏幕緩沖區的所有文本。

因此,只需重新添加-F ,您就會得到完全擦除的小輸出,就好像它們從未打印過一樣。 我們無法重新添加-X來解決這個問題,因為這會破壞滾動,但我們可以更新到更新版本的less

因此這一切都結合在一起了——我們可以使用自制軟件安裝最新的less版,然后根據本文開頭的命令塊配置尋呼機以包含-F選項。

只需在git diff之后打開的終端中按下h - 它使用快捷方式調用幫助窗口

幫助文本較少的屏幕截圖

基於@ognockocaten 的答案,您可以通過更改LESS環境變量來更改傳遞給less命令的默認選項。

為此,請將此行添加到您的啟動腳本中。 (可能是~/.bashrc~/.zshrc~/.bash_profile

export LESS="RS"

它應該適用於您打開的任何新終端。

fn + 選項 (⌥) + 向下

在mac上為我工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM