[英]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.