如何让'少'不采取完整的终端

时间:2014-12-23 13:28:00

标签: shell unix terminal cygwin

我有一个简单的问题,但我找不到答案。

如何让'less'程序不采用完整的终端布局。我的意思是,如何在终端的上半部分使用less显示文件?是否有可能实现这一目标?如何“少”知道当前终端有多少行?

使用案例 git log --graph使用less作为寻呼机。我有三行提示。每次退出git log命令时,终端都会显示新的提示行并滚动git log输出。在大多数情况下,三条滚动线是最重要的线,因此我需要手动滚动它以便能够复制它们以备将来使用。所以我试图找到一种方法来告诉'少'使用终端的一半,或者没有最后三行的完整终端,所以当我退出git log时,新提示不会隐藏上线。有没有办法做到这一点?

目标环境:cygwin

4 个答案:

答案 0 :(得分:3)

您可以使用GNU screentmux或古老的BSD window(1)实用程序将屏幕细分为多个部分并在它们之间移动。

我刚刚在window中测试了less(1),但它确实有效,但状态行不再相反。您可以在GNU屏幕(行业标准)或tmux(新手)中获得更好的结果。

答案 1 :(得分:2)

我有一个可怕的黑客,但是在我开始之前你总是可以在退出之前开始复制线路并完全避免这个问题。

可怕的hacky解决方法:

LESS='FRSX -j 4 -p ^' git log --graph

其中4是您想要在窗口顶部的偏移量。

这里的诀窍是你告诉less为搜索行保留给定的偏移量并搜索与第一行匹配的东西以强制它向下滚动。

您可以使用core.pagerless -j 4 -p ^中执行此操作,但我没有尝试过,我也不知道我会推荐它。

答案 2 :(得分:1)

另一种骇人听闻的解决方案是使用tput。

git config --global core.pager "less; tput cuu 1 && tput ed"

这实际上在您滚动后有效。如果您希望将其用于长时间的PS1包装,只需将其退回2(而不是1)即可。

答案 3 :(得分:-1)

设置LINES环境变量

export LINES=3
command | less