如何将选项从 git-diff 传递给 less?

And*_*imm 1 git git-diff less-unix

我在 OSX 机器上有一个相当默认的 git 设置,但我想将-j.5添加到less,以便搜索匹配发生在屏幕中间。

我尝试这样做export LESS=-j.5,但这导致内容喜欢ESC[1mdiff --git a/app/images/bluecog-icon.png b/app/images/bluecog-icon.pngESC[m出现,即使事先echo $LESS给出了一个空的结果。我查了一下,git help diff但它没有提到“pager”,也没有提到“less”指的是 unix 工具(而不是“greater”的反义词)。

修改环境变量或传递参数git diff都是可以接受的。我知道我可以-j.5在 git diff 本身内输入。

tor*_*rek 5

Git 的设置有点奇怪:

  • 默认寻呼机是less(尽管这是一个编译时选项)。
  • 您可以使用core.pager. 如果您这样做,您可以在此处添加选项。
  • less命令本身读取环境变量LESS,然后再扫描选项。
  • 如果LESS设置了环境变量(设置为任何内容,甚至包括空字符串),Git 不会设置它;但除此之外,Git 将其设置为FRX,即使寻呼机不是less

因此,如文档所述git config

...如果你想有选择地覆盖 Git 的默认设置LESS,你可以设置core.pager为 eg less -S。这将由 Git 传递给 shell,后者会将最终命令转换为LESS=FRX less -S. 环境不会设置S选项,但命令行会设置,指示 less 截断长行。类似地,设置core.pagerless -+FF从命令行停用环境指定的选项,停用less. 可以专门为特定命令激活一些标志:例如,设置 pager.blameless -S仅对git blame.

因此,如果您只想要这个 for git diff,请设置pager.diffless -j.5。如果您希望所有 Git 命令都使用它,您可以将环境变量设置core.pagerless -j.5 将环境变量设置LESSFRXj.5; 两者都会产生相同的效果。