在 Unix 上,如何使 diff 命令的输出看起来像手册页?我可以在哪里按“b”或“f”进一步阅读或向后阅读?

在 Unix 上,如何使 diff 命令的输出看起来像手册页?我可以在哪里按“b”或“f”进一步阅读或向后阅读?

您知道当您使用 man 命令阅读手册时(例如man ls),您会得到分页的输出,您可以通过按“f”向下阅读,按“b”向上阅读,从上到下阅读(假设您从上到下从左到右阅读)并按“q”退出。我希望 diff 的输出具有相同的行为方式,因为有时我要阅读一长串差异,但我发现自己必须在终端中一直向上滚动才能读取输出的开头。

Git diff 命令可以做到这一点,我已经开始喜欢它(例如git diff),但我并不总是拥有将所有文件置于版本控制之下的奢侈。

我能想到的最好的方法是将 diff 命令的输出通过管道传递给其他命令,但我不确定是哪个命令。有人可以帮忙吗?提供的这种输出行为(如手册页)是否有名称供将来参考?

答案1

它被称为“分页输出”或(有点错误)“分页”......

…并通过根据用于生成手册页输出形式的任何管道的输出man调用您首选的分页器 shell 命令(由环境变量命名)来完成此操作。PAGER如果您没有指定寻呼机命令,它将恢复为默认值。在早期的 Unices 上,默认寻呼机程序man是使用已知的硬连线选项作为默认寻呼机命令调用的pg。在您的系统上它可能是moreless。某些man命令还会查看寻呼机命令的其他环境变量。

通过做正在做的事情来做到这一点man:将您想要看到的输出通过管道传输到寻呼机程序的标准输入中。

你应该给自己买一本关于 Unix 的好书。有相当多的人对此进行了解释,这是该系统的一个非常基本的功能。今天我在谷歌图书上进行了简单的搜索,pager unix more发现了一百多本讨论这个问题的书籍。 (我数到一百就停止了。)

答案2

man并调用的程序辅助git diff称为寻呼机。在现代系统上,默认寻呼机称为less。几十年前,第一个寻呼机被more称为“寻呼机”,因为它显示一个页面,然后等待您按键才能看到“更多”。然后来了less,这也让你回去(可以这么说,看到更少),印证了“少即是多”(比多)这句话。

git diff有点例外;实用diff程序、cvs diff子命令、svn diff子命令等只是完成计算差异并将其打印出来的工作。如果您想对差异进行分页,则需要显式调用分页器:

diff file.old file.new | less

如果您想对 和其他调用分页器的命令使用不同的分页器mangit diff您可以设置PAGER环境变量,例如将其放入文件中~/.profile

export PAGER=most

您无法发出diff自动调用寻呼机等命令。不过,您可以创建一个包装函数(放入 shell 初始化文件中,例如~/.zshrc对于 zsh 或~/.bashrcbash):

diff () {
  if [ -t 1]; then             # If standard output is a terminal
    command "$@" | less        #    then pipe through less
  else                         # else
    command "$@"               #     run the command (and return its exit status)
  fi
}

警告:这样的功能有时可能会造成破坏。您还可以为您的寻呼机创建一个单字符别名,例如

alias p=less P=less

因此,当您想要翻阅命令的输出时,可以键入diff … |p或。diff … |P

答案3

使用 less 命令怎么样...EX:

 ls -l | less -CM

答案4

在vim中可以看到diff内容:

git diff | view -

当然可以:

diff -u a.txt b.txt | view -

享受!

相关内容