您知道当您使用 man 命令阅读手册(例如man ls
)并获得分页的输出时,您可以通过按“f”进一步向下阅读和“b”进一步阅读来从上到下阅读(假设您是从上到下从左到右阅读),然后按“q”退出。我希望 diff 的输出以相同的方式运行,因为有时我要阅读一长串差异,但我发现自己必须在终端中一直向上滚动才能阅读输出的开头。
Git diff 命令执行此操作,我开始喜欢它(例如git diff
),但我并不总是能够将所有文件置于版本控制之下。
我能想到的最好的方法是将 diff 命令的输出通过管道传输到其他一些命令,但我不确定是哪个。任何人都可以帮忙吗?提供的这种输出行为(如手册页)是否有名称供将来参考?
Jde*_*eBP 11
...并man
通过调用您首选的 pager shell 命令来实现,该命令由您的PAGER
环境变量命名,根据用于生成手册页输出形式的任何管道的输出。如果您没有指定寻呼机命令,它会回退到默认值。在早期的 Unices 上,默认的寻呼程序man
是pg
. 在您的系统上,它可能是more
或less
。一些man
命令还会查看寻呼机命令的其他环境变量。
你通过做man
正在做的事情来做到这一点:将你想看到的输出传送到寻呼程序的标准输入中。
你应该给自己买一本关于 Unix 的好书。有很多人可以解释这一点,这是系统的一个非常基本的特征。pager unix more
我今天在谷歌图书上搜索了一百多本讨论这个问题的书。(我数到一百就停止了。)
该方案是辅助man
和git diff
调用被称为寻呼机。在现代系统上,默认寻呼机称为less
。几十年前,第一个寻呼机是more
,之所以这么叫,是因为它显示一个页面,然后等你按一个键来查看“更多”。然后来了less
,它也让你回去(可以这么说),证实了“少即是多”(比多)的说法。
git diff
有点例外;该diff
实用程序的cvs diff
子命令,svn diff
子命令等只是做他们的计算diff和打印出来的工作。如果要对差异进行分页,则需要显式调用寻呼机:
diff file.old file.new | less
Run Code Online (Sandbox Code Playgroud)
如果你要使用不同的寻呼机man
,git diff
并调用寻呼机等命令,你可以设置PAGER
通过把这个文件中的环境变量,例如~/.profile
:
export PAGER=most
Run Code Online (Sandbox Code Playgroud)
您不能发出诸如diff
自动调用寻呼机之类的命令。您可以创建一个包装函数(放入您的 shell 初始化文件中,例如~/.zshrc
用于 zsh 或~/.bashrc
用于 bash):
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
}
Run Code Online (Sandbox Code Playgroud)
警告:这样的功能有时可能会造成破坏。您还可以为寻呼机创建一个字符的别名,例如
alias p=less P=less
Run Code Online (Sandbox Code Playgroud)
因此您可以键入diff … |p
或diff … |P
当您想要翻阅命令的输出时。