如何在同一个 CLI 终端中在屏幕上显示 `gitbranch` 的输出?

chr*_*kar 9 git shell command-line-interface

抱歉,我无法表达我的问题。我在 CLI 上运行(zsh如果重要的话),使用 git 版本2.20.0并在 macOS 上运行(我想我在家里的 Ubuntu 系统上也遇到过它)。

git branch问题:如何在同一 CLI 屏幕上显示输出?也就是说,如果我跑步,

$ git branch
$
Run Code Online (Sandbox Code Playgroud)

它会弹出一个新屏幕/窗口(在我的 CLI 内),向我显示我的所有分支。按q关闭屏幕并返回 shell。问题是我不记得我拥有的分支机构的名称!我希望它们打印在屏幕上!

理想输出,

$ git branch
* master
branch_01
branch_02
temp_branch
experiment_2_delete
$
Run Code Online (Sandbox Code Playgroud)

一个可疑的解决方法是执行以下操作,

$ git branch > stuff.txt
$ cat stuff.txt
* master
branch_01
branch_02 
...
$
Run Code Online (Sandbox Code Playgroud)

但它会在当前目录中创建一个新的文本文件,这会变得混乱。记忆告诉我,这曾经是git有效的方式。最近发生了一些变化,这让我发疯!有什么办法可以恢复旧的行为吗?

tor*_*rek 5

这实际上是您的寻呼机的问题(可能less是现在)。

大多数终端仿真器都提供备用屏幕的概念。打开编辑器会切换到这个备用屏幕;该屏幕中显示的文本保留在该屏幕中,并且保留在该屏幕中。退出编辑器会切换回主屏幕,并且备用屏幕文本会消失,这样您就可以返回到命令行会话,而编辑器的显示不会造成混乱。如果这就是您想要的,那么这很好,并且在使用编辑器时有意义

不幸的是,这里的实现是对所有使用光标寻址模式和less使用光标寻址模式的东西进行这种切换。因此,这意味着管道输出less 也会切换到备用屏幕。

有许多解决方法和修复方法。最简单的方法less是使用该选项,如本错误报告和文档-X中所述:less

-X 或 --no-init
禁止将 termcap 初始化和取消初始化字符串发送到终端。如果去初始化字符串执行一些不必要的操作(例如清除屏幕),有时这是可取的。

请注意,Git 默认为 running less -FRX,因此,如果您 (a) 正在使用less而 (b) 没有获得-FRX,请检查您是否已通过core.pager(或$GIT_PAGER) 和/或通过环境变量覆盖默认值LESS

一些用户(包括我自己)真的非常讨厌这种交替屏幕切换,并希望我们的编辑器输出保留在屏幕上。在这里,一个更强大的技巧是完全禁用备用屏幕。然而,这更难。例如,请参阅如何关闭 OSX 的 Terminal.app 中的备用屏幕? 有些人真的非常喜欢这种行为,并希望在关闭时将其打开:请参阅屏幕:如何打开备用屏幕?(其中有更多关于如何关闭它的链接)。

(我自己使用“反编译 terminfo,编辑替代屏幕转义序列,然后编译我自己的 terminfo”方法。)

  • 这是一篇内容丰富的帖子,但 /sf/answers/3385917741/ 更符合我的需求。谢谢@torek。 (2认同)