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

时间:2018-01-29 23:59:15

标签: git git-diff less-unix

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

我尝试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,但它没有提及#34; pager&#34;或提及&#34; less&#34;引用unix工具(而不是意味着&#34;更大&#34;的相反)。

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

2 个答案:

答案 0 :(得分:3)

Git的设置有点奇怪:

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

因此,如the git config documentation中所述:

  

...如果您想有选择地覆盖Git LESS的默认设置,   您可以将core.pager设置为例如less -S。这将被传递给   shell由Git提供,它将最终命令转换为LESS=FRX less -S。环境不会设置S选项,而是设置命令   line,指示较少截断长行。同样的,   将core.pager设置为less -+F会停用F选项   由命令行环境指定,停用   less的“退出,如果一个屏幕”行为。一个人可以具体   激活特定命令的一些标志:例如,设置   pager.blameless -S仅对git blame启用了行截断。

因此,如果您只希望git diff使用此功能,请将pager.diff设置为less -j.5。如果你想要它用于所有Git命令,你可以 设置core.pagerless -j.5 将环境变量LESS设置为{ {1}};两者都会产生同样的效果。

答案 1 :(得分:1)

那些ESC[1m是终端的颜色代码。要让less解释它们,请添加选项-R。还建议使用选项-FSX

export LESS=FRSXj.5