从mac终端向下滚动git diff

Ahm*_*med 19 git macos

我在OS X 10优胜美地的终端上使用git.

当我做git diff时,我会得到很长的变化列表,有时我只需要滚动到最后但我无法找到一种方法来做到这一点,而不是在MacBook Pro上保持keydown然后它慢慢滚动.

如果我按下FN +向下键,那么它不会滚动,除非我已经使用向下按钮向下滚动了下来的旅程,但是没有进一步向下...

任何建议将会欣赏这是非常烦人的... :(

nea*_*sic 26

git diff使用相同的寻呼机作为较少的 Unix命令.

  • 使用键du向下/向上翻页半页(技术上向前/向后)
  • 跳到最后一行: G
  • 使用h,如果你想显示帮助

另一个技巧是将diff作为补丁文件存储,就像他们在电子邮件时代那样做!然后你可以在任何程序中打开补丁(Sublime的语法高亮显示红色/绿色)

一些例子:

git diff master > ~/patch

git show someCommitSHA > ~/patch

git diff master myBranch -- *.js *.css > ~/patch 来自master的js&css diff补丁


git apply ~/patch

通常你会通过应用diff来使用补丁,但你可以在任何文本编辑器中打开文件.如果您不想完全提交您的差异,但仍想在其他地方使用它或将其发送给朋友,这将非常有用


您还可以使用git diff master | grep -C 2 someKeyword在某些关键字周围显示diff +/- 2行

  • OS X 终端与 less 有一些神奇的集成,当 less 作为 git 的子进程运行时,它会中断:当作为 `git diff | 运行时 less`,可以使用触摸板手势向前滚动,但是使用 `git diff` 的输出,它只能滚动终端输出,而不能告诉 `less` 向前滚动。有趣的是,“git help”并没有遇到这个问题。 (3认同)

ogn*_*ten 14

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

在我的新 macOS 笔记本电脑上,git log 滚动按我的预期工作(向上翻页/向下翻页按钮工作,颜色,滚轮滚动)。

为什么这样做?根据git-config 联机帮助页

请注意,如果在运行寻呼机时未设置 LESS 环境变量,则 git 会将 LESS 环境变量设置为 FRSX。

根据较少的联机帮助页

-X 禁止将 termcap 初始化和取消初始化字符串发送到终端。如果取消初始化字符串做了一些不必要的事情,比如清除屏幕,这有时是可取的。

我实际上不知道这意味着什么,但是 X 向上翻页/向下翻页/滚轮。

-F 如果整个文件可以显示在第一个屏幕上,则使less自动退出。

如果你没有 X,那么 F 会在没有分页时中断,大概是因为 less 立即退出并且某些东西阻止它直接打印到终端。

  • 这需要更多的支持。对我帮助很大 (2认同)

MJ *_*lsh 9

根据 mzabaluev 的评论:

OS X 终端与 less 有一些神奇的集成,当 less 作为 git 作为子进程运行时会中断: when run as git diff | 更少,使用触摸板手势可以向前滚动,但是使用 git diff 的输出它只会滚动终端输出,而不能告诉 less 向前滚动。有趣的是, git help 没有遇到这个问题。– mzabaluev 1 月 4 日0:39

这个魔法还包括启用向上翻页 (FN+up) 和向下翻页 (FN+down)。

解决此问题的一种快速而肮脏的方法是调用less自己:

git diff --color=always | less -r
Run Code Online (Sandbox Code Playgroud)

命令行选项保留了 git 的彩色输出。我从Can less 保留彩色输出中得到它们

  • @ognockocaten你应该把它作为答案,这是迄今为止最好的答案。 (2认同)

dab*_*oss 6

brew install less
git config --global core.pager "less -+\$LESS -RSF"
Run Code Online (Sandbox Code Playgroud)

安装较新版本的 less 修复了-F导致小输出在没有 的情况下完全消失的错误-X,然后配置命令删除-X,这就是中断滚动的原因。

这将取代lessMacOS 附带的最新版本,但由于它们是相同的实用程序(与 GNU coreutils 和 BSD coreutils 不同),因此这不会破坏任何东西。

解释

这是ognockocaten 答案的扩展。

该答案表明:

git config --global core.pager "less -+\$LESS -RS"
Run Code Online (Sandbox Code Playgroud)

这会删除两个选项:

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

如果整个文件可以在第一个屏幕上显示,则导致 less 自动退出。

-X/ --no-init

-X 禁止将 termcap 初始化和取消初始化字符串发送到终端。如果去初始化字符串执行一些不必要的操作(例如清除屏幕),有时这是可取的。

这适用于当前的问题,但不是最理想的,因为less无论输出有多小,它总是会切换到备用页面。因此,即使对于像这样的小命令git diff,您也会得到一个完整的备用屏幕。

仔细阅读,似乎重新添加-F可以解决这个问题。然而,有两件事的结合导致了这种情况的发生:

  • 在 less MacOS 附带的版本上, less 将首先487切换到备用屏幕,然后检查文本是否足够小,然后将输出打印到备用屏幕缓冲区。这已在版本中修复(请参阅https://unix.stackexchange.com/a/107355/39135530
  • 在 MacOS 上,如果没有-X,从备用缓冲区切换回主缓冲区会清除屏幕,从而擦除刚刚打印到备用屏幕缓冲区的所有文本。

因此,只需重新添加-F,您就会得到完全擦除的小输出,就好像它们从未被打印过一样。我们无法重新添加-X来解决此问题,因为这会中断滚动,但我们可以更新到较新版本的less!

因此,这一切都汇集在一起​​ - 我们可以使用自制程序安装最新的稳定less版本,然后配置寻呼机以包含该-F选项,按照本文开头的命令块。


Jan*_*ram 5

您可以使用任何 less 命令来浏览历史记录。请参阅:常用的 less 命令

示例:在终端的左下角,您一定会看到类似这样的内容。 在此输入图像描述

在上面的示例中,历史记录有 221 行,当前窗口显示其中的第 21-62 行。

直接转到行号:您可以通过键入直接转到行号

line-number (followed by) g   (no spaces necessary)
Run Code Online (Sandbox Code Playgroud)

例如:要转到第 100 行,只需输入100g

跳过 x 行: 输入一个数字并按 Enter 键。

向下滚动并向下滚动 使用 Fn

或者使用下面的替代方案。

按空格键。正如 ILI 建议的那样。

向上滚动一页

按“w”

回家

Fn 向左箭头 转至结尾 Fn 向右箭头


Leo*_*ele 5

最简单的方法是使用less读取 diff 输出。您需要使用--color-R选项来保持颜色。

git diff --color | less -R
Run Code Online (Sandbox Code Playgroud)

这对我来说效果很好。

您可以为此命令创建一个宏。


自从我写了这个答案以来,我发现您可以使用LESS环境变量来设置 的选项less,因此您可以更轻松地执行与上面相同的操作:

LESS=R git diff
Run Code Online (Sandbox Code Playgroud)