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

How do I pass options to less from git-diff?

我在 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",也没有提到提到 unix 工具的 "less"(而不是 "greater" 的反义词) ).

可以修改环境变量,也可以传递参数给git diff。我知道当我在 git diff 本身时我可以输入 -j.5

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

export LESS=FRSXj.5

Git的设置有点奇怪:

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

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

... If you want to selectively override Git's default setting for LESS, you can set core.pager to e.g. less -S. This will be passed to the shell by Git, which will translate the final command to LESS=FRX less -S. The environment does not set the S option but the command line does, instructing less to truncate long lines. Similarly, setting core.pager to less -+F will deactivate the F option specified by the environment from the command-line, deactivating the "quit if one screen" behavior of less. One can specifically activate some flags for particular commands: for example, setting pager.blame to less -S enables line truncation only for git blame.

因此,如果您只想 git diff 使用此功能,请将 pager.diff 设置为 less -j.5。如果你想要它用于所有 Git 命令,你可以 或者 设置 core.pagerless -j.5 或者 设置环境变量 LESSFRXj.5;两者的效果相同。