是否可以在zsh中自动分页输出?

ytj*_*ytj 4 zsh

有时我们在终端运行一个命令,输出太大,我们忘了把"| less"放到最后.所以我想知道当zsh中的输出太大时可以分页输出吗?

我尝试使用python和less实现此功能:

#!/usr/bin/env python3
termHeight = 25
import sys
from subprocess import Popen, PIPE
p = Popen(['unbuffer'] + sys.argv[1:], stdin=PIPE, stdout=PIPE)
lines = []
for count in range(termHeight):
    line = p.stdout.readline()
    if not line:
        break
    print(line.decode('utf8'), end='')
    lines += [line]
if line:
    q = Popen(['less', '-Mr'], stdin=PIPE)
    q.stdin.writelines(lines)
    while True:
        line = p.stdout.readline()
        if not line:
            break
        q.stdin.write(line)
    q.communicate()
Run Code Online (Sandbox Code Playgroud)

让我们将这个python脚本保存到p.py. 因此,当我们运行"python p.py some commands"之类的"python p.py ls --help"时,如果输出超过25行,则此脚本将使用less来显示输出.

问题是我无法从用户那里获得输入.这意味着此解决方案根本不适用于交互式程序.

Oli*_*lme 5

尝试将此添加到您的 .zshrc

export LESS="-FX"
Run Code Online (Sandbox Code Playgroud)
  • -F ="如果整个文件可以显示在第一个屏幕上,则会导致自动退出."
  • -X ="禁止将termcap初始化和取消初始化字符串发送到终端."(停止更少清除屏幕)

对我来说less,当有不止一个文本屏幕时,这个方法被用作寻呼机,而当没有时,使用zsh的内置寻呼机(zsh -c '< /dev/fd/0'cat).

HTH

  • 如果我错了,请纠正我,但这实际上不会导致zsh作为寻呼机使用_use_. (5认同)