如何在没有“-X”的情况下使用“less -F”,但如果只有一页仍然显示输出?

Fre*_*ang 12 less git

我正在调整 Git 的寻呼机,但我遇到了一些问题。

我想要的是:

  1. 始终彩色输出
  2. 通过触摸板或鼠标滚动
  3. 一屏退出

我目前的配置是:

$ git config --global core.pager
less -+F -+X -+S
Run Code Online (Sandbox Code Playgroud)

除了最后一个之外,这可以完成所有操作。

但是,如果我删除-+F,则在单屏的情况下将没有输出。如果我也删除-+X,输出又回来了,但我无法通过触摸板滚动less

是否有可以满足上述所有要求的解决方法?

Fre*_*ang 9

更新

tl;dr 解决方案:升级到 530 以下

来自http://www.greenwoodsoftware.com/less/news.530.html

如果使用 -F 并且文件适合一个屏幕,则不要输出终端初始化序列。

所以有了这个修复,我们甚至不需要费心去决定是否自己使用-Xless -F只需照顾它。

附注。我使用的其他一些较少的配置:

export PAGER='less -F -S -R -M -i'
export MANPAGER='less -R -M -i +Gg'
git config --global core.pager 'less -F -S -R -i'
#alias less='less -F -S -R -M -i'
Run Code Online (Sandbox Code Playgroud)

我最终自己写了一个包装器。

#!/usr/local/bin/bash

# BSD/OSX compatibility
[[ $(type -p gsed) ]] && SED=$(type -p gsed) || SED=$(type -p sed)
CONTEXT=$(expand <&0)
[[ ${#CONTEXT} -eq 0 ]] && exit 0
CONTEXT_NONCOLOR=$( $SED -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" <<< "$CONTEXT")
LINE_COUNT=$( (fold -w $(tput cols) | wc -l) <<< "$CONTEXT_NONCOLOR" )

[[ $LINE_COUNT -ge $(tput lines) ]] && less -+X -+S -R <<< "$CONTEXT" || echo "$CONTEXT"
Run Code Online (Sandbox Code Playgroud)

BSD/OSX 用户应该手动安装gnu-sed. 神奇的正则表达式,有助于去除颜色代码,来自/sf/answers/1260030341/

我已将此脚本保存到/usr/local/bin/pager然后git config --global core.pager /usr/local/bin/pager

强迫症患者的治疗,万岁!

  • 仅当您的终端宽度恰好是制表位的倍数时,制表符才会“起作用”。当我测试这个时,我注意到“fold”并没有使用空格调整换行线,而只是找到最近的切割点。所以外观会产生误导。 (2认同)