【问题标题】:Prevent git from using pager for short output?防止git使用寻呼机进行短输出?
【发布时间】:2016-02-05 20:31:47
【问题描述】:

当我使用 Git Bash(Windows 版 Git)时,如果命令(如 git diff)的输出很短(我猜它小于终端的高度),它只会打印为输出,现在在 Babun (Cygwin)每个 Git 命令似乎都很少被查看,即使它是一行或完全是空的。 “Every”可能过于大胆,git status 没有。似乎其中一个中有一些预先捆绑的设置,而另一个没有,我不知道它是什么。

我怎样才能让 Git 表现得如此当有一个简短的输出时它不会使用 less 而只是输出它。

编辑: 在 git bash 中,我的 git 寻呼机是“less -x4”(用于 4 个宽度的制表符),没有 -F。此外,环境变量LESSPAGERGIT_PAGER 为空。所以我不知道为什么 git bash 会这样,但幸运的是我得到了一些关于如何让 Babun (Cygwin) 启动的帮助。

后见之明更新:(这可能是错误的,请参阅 2017-01-12 注释。)我认为 Git For Windows 和/或默认终端在关闭时不会擦除屏幕 - - 我在其他不相关的地方看到了这种行为(关闭更少并且屏幕没有被擦除)所以我认为这就是正在发生的事情。为什么 Cygwin 和 mintty 终端会在 Windows 终端上进行擦除和 MINGW(或 Msys2?无论 Git For Windows 使用什么)都不会超出我的知识范围。

谷歌搜索后的后见之明更新:事实证明,上述启示足以让谷歌找到解决方案!我现在就发。

2017-01-12: 看起来它没有准确擦除它因为 LESS 未设置。根据man git config...

core.pager
    [...]

    When the LESS environment variable is unset, Git sets it to FRX
    (if LESS environment variable is set, Git does not change it at
    all). 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. [...]

【问题讨论】:

  • 你的问题是什么?
  • @Code-Apprentice 我已经对其进行了编辑,以便更明确地提出我的要求,谢谢!
  • 特别是看到这个答案:stackoverflow.com/a/14118014/1440565
  • @Code-Apprentice 不是那个 question 的副本(我仍然想要一个寻呼机)但是你链接的答案绝对是我想要的,不知何故我错过了那六个几个月前:)
  • 只需在 .bashrc 中设置:export LESS='-F -X $LESS'

标签: git


【解决方案1】:

As of December 2017 if you are using the latest version of less (at least 530) then the below is slightly incorrect. 现在单独-F 将正确输出短输出(就像cat),而不需要-X。由于您现在可以单独使用-F 来查看短输出,这意味着一旦您关闭lesslong 输出仍然会从屏幕上正确擦除!我强烈建议您更新您的 less 版本以获取此行为。太棒了!


Schwern 的answer 对了一半。对于我所问的问题,它可能仍然是正确的答案,我只是使用了不正确的词。我想要的不是这个:

   -F or --quit-if-one-screen
          Causes less to automatically exit if the entire file can be dis‐
          played on the first screen.

这使得 nothing 出现短输出!如果core.pagerless -F 并且您的日志不到一屏,那么您什么也看不到。

您可能想要的是less -FXless -X

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

这个超级用户的question 把我带到了这个。

如果日志小于一屏,则使用-FX,那么它只会输出它(就像cat一样)。

如果输出小于一屏,仅使用-X 仍会打开less,但如果您q uit 会留在终端上,如果您不使用q 马上你就可以像平常一样使用less了。一旦您尝试搜索,尽管它会使其变得“真实”更少,并且完成后仍然不会擦除,这很烦人,因为窗口现在充满了~


总结

  • 如果您不关心短输出会发生什么,请使用less
  • 如果您的 less 版本比 530 旧,并且您希望像 cat 一样将短输出放在屏幕上,请使用 less -XF
    • 如果您有 530 或更高版本,则只需使用 less -F。有关详细信息,请参阅答案顶部。
  • 如果您想搜索简短的输出(即使它小于一屏),请使用 less -X,但您仍必须按 q

【讨论】:

  • 如果您希望这种行为无处不在,请将其添加到您的环境变量中:export LESS="--no-init --quit-if-one-screen"
【解决方案2】:

快速回答:将以下行保存到您的 .bashrc 中

export LESS=eFRX

How do I prevent git diff from using a pager? 的答案中涵盖了原因和原因,OP 实际上希望完全删除分页。

【讨论】:

    【解决方案3】:

    您可以将 git 配置为使用 cat 作为寻呼机(而不是 less)。

    git config --global core.pager cat
    

    这将添加部分

    [core]
        pager = cat
    

    到您的 ~/.gitconfig 文件并通过cat 传输所有内容,即仅显示它。

    这里有更详细的讨论How do I prevent git diff from using a pager?

    【讨论】:

    • 这会导致git 使用cat 作为每个 命令的寻呼机吗?
    • "如果输出适合单个屏幕,-F to less 将告诉它不分页。"这听起来像将寻呼机设置为less -F 会更准确地回答这个问题。
    • @Code-Apprentice:是的,除了git ... --help 仍将使用寻呼机。 (我有那个设置;我想用明确的git ... | less。)
    • @Code-Apprentice 是的。这就是缺点。我喜欢这样,但也许我提供的链接中给出的解决方案更细。
    • 我已投票决定以骗子身份关闭,因为您链接的 Q 似乎提供了答案。
    【解决方案4】:

    您可以这样做以保留所有 git 输出的 LESS,但如果只有 1 页,则始终返回,不需要导出。

    git config --global core.pager 'less -F'
    

    【讨论】:

      【解决方案5】:

      这不是 Git 的东西,它是你的寻呼机的一个属性。 Git 不知道输出会持续多长时间,因此它始终会使用您的寻呼机输出。

      将您的寻呼机配置为在您的输出小于一个全屏时退出。 less-F。您可以使用默认开关设置LESS 环境变量。

      【讨论】:

      • 还有其他定义这个的环境变量吗? LESS 对我来说是空的,而我的 core.pagerless -x4 所以我只是想弄清楚它为什么这样做(与其相关)。
      • @CaptainMan less 的默认行为是总是翻页。如果您希望它不为小于一页的输出分页,则必须设置 -F。我的理解是你想要第二种行为,所以在某处设置-F
      • 对,我现在很好奇的是,尽管在任何地方都没有 -F 标志,但为什么我的 git bash 中的 less 行为如此。
      • @CaptainMan 我不知道。 less 没有我能找到的配置文件,所以命令行开关和环境变量是配置它的唯一方法。唯一的其他解释是 Git Bash 更改了 less 的默认行为,或者它只是在 Windows 上有所不同。
      • 其实这种行为是不一样的。这会导致 less 退出,但无论 git bash 做什么都会导致它执行“cat”,使用 less -F 只会在短输出的情况下什么都不做(至少可见)
      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 2012-09-03
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多