如何使用“less -F”而不使用“-X”,但如果只有一页仍然显示输出?

如何使用“less -F”而不使用“-X”,但如果只有一页仍然显示输出?

我正在调整 Git 的分页器,但遇到了一些问题。

我想要的是:

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

我当前的配置是:

$ git config --global core.pager
less -+F -+X -+S

除了最后一项之外,这一切都可以完成。

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

有没有一种解决方法可以满足上述所有要求?

答案1

更新

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

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

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

因此,通过此修复,我们甚至不需要费心确定是否要-X自己使用,less -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'

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

#!/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"

BSD/OSX 用户应手动安装gnu-sed.令人惊奇的正则表达式有助于删除颜色代码,来自https://stackoverflow.com/a/18000433/2487227

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

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

答案2

我使用以下包装器作为我的寻呼机。它不像此处显示的其他包装器那么奇特(因为它总是用于less -S截断长行),但它非常简单。似乎与 iTerm2 配合得很好。

#!/bin/bash
set -e

text=$(</dev/stdin)
text_lines=$(echo "${text}" | wc -l)
term_lines=$(tput lines)

if [[ $text_lines -lt $term_lines ]]; then
    echo "${text}"
else
    echo "${text}" | less -S -R
fi

相关内容