繁体   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