[英]scrolling down git diff from mac terminal
我在 OS X 10 Yosemite 的終端上使用 git。
當我執行 git diff 時,我會得到一長串更改,有時我只需要滾動到最后,但除了按住 MacBook Pro 上的 keydown 然后它慢慢滾動之外,我想不出辦法做到這一點。
如果我按下 FN+down 鍵,那么它不會滾動,除非我已經使用向下按鈕進行了向下滾動,但不會向下滾動...
任何建議都會不勝感激,這很煩人...... :(
git diff
使用與less Unix 命令相同的尋呼機。
d
和u
向下/向上半頁(技術上向前/向后)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
可以解決這個問題。 然而,兩件事的結合導致了這個問題:
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.