我正在调整 Git 的分页器,但遇到了一些问题。
我想要的是:
- 始终彩色输出
- 通过触摸板或鼠标滚动
- 一屏就退出
我当前的配置是:
$ 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