5

在 OS X 终端中,less它自己或被其他程序(如 )调用时man,它的输出不会在我们退出后写入 ttyless。例如,如果我们运行less README,我们将被临时定向到一个屏幕,其中包含类似

SO rocks.
README (END)

按下 后q, 的输出less会消失,我们最终会得到类似

$less README
$    # shell waiting for input

但是,如果less被调用git(在我的情况下,寻呼机git设置为),情况并非如此。的输出总是在退出后写入 tty。例如,如果我们运行,如果日志很短,甚至不会被调用;如果日志长于一个屏幕,那么我们将像往常一样暂时被引导到输出屏幕:less -rlessgit log --onelinelessless

0000000 set the pager of git to less
......
1111111 what's wrong with git?
(END)

在按下 之后q,整个内容都会写入 tty,所以我们最终会得到类似

$git log --oneline # OMG!!!
0000000 set the pager of git to less
...... (the entire log)
1111111 what's wrong with git?
$    # shell waiting for input

那么有可能改变这种行为吗?我的意思是,是否可以进行配置git,使其始终将输出传输到 less(无论输出是长还是短),并且在less退出后在 tty 中什么都没有?谢谢。

4

1 回答 1

6

...是否可以配置 git 使其始终将输出通过管道传输到更少...

是的。默认情况下,git用作less其寻呼机,带有选项FRSX[对非权威来源道歉]。

要获得您所追求的行为,您需要禁用FandX选项。您可以全局执行此操作:

git config --global --replace-all core.pager 'less -+X -+F'

阅读此答案以获得更长的解释,并且man less

-F 或 --quit-if-one-screen
如果整个文件可以显示在第一个屏幕上,则让 less 自动退出。
-X 或 --no-init
禁止将 termcap 初始化和去初始化字符串发送到终端。如果去初始化字符串做了一些不必要的事情,比如清除屏幕,这有时是可取的。

(我不确定我们为什么要-X在这种情况下,但显然git默认使用它,并且将其关闭会表现出您所追求的行为。)

于 2013-11-20T02:50:51.187 回答