在 git bash 如何增加更少的屏幕宽度?

Posted

技术标签:

【中文标题】在 git bash 如何增加更少的屏幕宽度?【英文标题】:In git bash how to increase less's screen width? 【发布时间】:2021-06-08 13:45:11 【问题描述】:

我在 Windows 10 上使用 git bash 2.32。

在更新到 2.32 后的 git bash 中,我看到用于显示日志的命令的奇怪行为:

git -c core.pager='less -S -F' log --all --decorate --oneline --graph

如您所见,我尝试使用“a dog”命令和 less 寻呼机配置为在 EOF 上退出并剪切长度超过当前屏幕宽度的行。 但是在我更新到 2.32 之后,输出似乎在 80 个符号后被截断,这通常远小于实际屏幕宽度(如下图所示)。

我正在尝试了解如何增加该限制,以便 less 截断长度超过 160 个符号的行,或者截断不适合当前屏幕的行。

注意:我将宽度更改为 160,现在 echo $COLUMNS 返回 160,但这并没有帮助。

注意:我还为当前会话启用了checkwinsize 选项。也没有运气。

【问题讨论】:

你试过在终端中运行reset吗? 我很惊讶$COLUMNS 技巧没有奏效;这意味着less 直接从终端仿真器获取大小,它应该报告正确的大小,因此您根本不需要做任何事情。无论如何,我更新了标签以将问题导向(我希望)那些可能知道的人。在这一点上,这不是 Git 的事情:Git 只是运行 lessless 从那里开始处理所有事情。 @Mort reset 没用( 我遇到了同样的问题。当git 启动less 时,这似乎只是一个问题。如果我在带有长行的文件上运行less,它将使用完整的终端宽度。 @Tanj,是的,这里也一样 【参考方案1】:

这是一个相对较新的 Git-for-Windows 错误,在 Git 邮件列表的存档中找到了 here 的讨论和补丁。 this GitHub issue 有很多进一步的讨论。该错误将在 Git-for-Windows 的下一次更新中修复。

同时,考虑this workaround from KalleOlaviNiemitalo:

git config --global core.pager "env -u COLUMNS less"

【讨论】:

这个修复不能解决我的问题。行为非常相似(至少对我来说仍然难以形容)。 @Charles:或许也可以尝试取消设置 ROWS。 env -u COLUMNS ROWS less ? env -u COLUMNS -u ROWS less。没有 Windows 设置,我无法对此进行测试... 嗯,那么,您的特定问题可能不是正在解决的问题。描述听起来确实略有不同(随着您的移动,输出会缩小)。【参考方案2】:

Git 2.33(2021 年第三季度)将修复“Duplicated lines when moving in pager #3235”问题。 您今天可以使用Git for Windows snapshots 对其进行测试。

(请参阅顶部的重复行)

根本原因:当我们无法确定终端的宽度时,我们自己使用了一个备用值 80(这是无法避免的),但是当我们运行寻呼机时,我们将其导出到COLUMNS,它强制寻呼机使用硬编码值,即使寻呼机完全有能力自行解决。

当我们依靠硬编码的默认值供​​我们自己使用时,停止导出COLUMNS

参见Johannes Schindelin (dscho)commit 9b6e2c8(2021 年 6 月 21 日)。(由 Junio C Hamano -- gitster -- 合并于 commit 32d6280,2021 年 7 月 8 日)

pager:当我们猜测它的值时避免设置COLUMNS

合着:Junio C Hamano署名:Johannes Schindelin

我们在 Git 中查询 TIOCGWINSZ 以确定 COLUMNS 的正确值,然后设置该环境变量。

如果TIOCGWINSZ 不可用,我们回退到硬编码值 80 并仍然设置环境变量。

在 Windows 上,这是一个问题。 原因是 Git for Windows 使用一个版本的 less,它依赖于 MSYS2 运行时与伪终端交互(通常在 MinTTY 窗口中,它也知道 MSYS2 运行时)。

MinTTY 和 less.exe 都通过 ioctl() 调用与该伪终端交互(即使 Windows 上没有这样的东西,MSYS2 运行时也会模拟)。

由于 https://github.com/gwsw/less/commit/bb0ee4e76c2,less 更喜欢 COLUMNS 变量而不是询问 ncurses 本身。

但是git.exe 本身知道 MSYS2 运行时,或者就那个伪终端而言,并且无法调用ioctl()TIOCGWINSZ

因此,git.exe 将回退到硬编码 80 列,无论实际终端大小是多少。

但是less.exe 完全能够与 MSYS2 运行时交互,并且实际上不需要 Git 的帮助(这实际上使事情变得更糟)。 所以我们不要在 Windows 上覆盖 COLUMNS

除非我们设法从终端查询实际值,否则不要设置COLUMNS

这修复了git-for-windows/git issue 3235

【讨论】:

以上是关于在 git bash 如何增加更少的屏幕宽度?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何将图像(裁剪)放入下一个有状态/更少的小部件

响应式设计:不要过度依赖屏幕尺寸

如何从 git bash 屏幕中删除文件并从存储库中删除该文件? [复制]

UITabBar 宽度不随屏幕尺寸增加

ag-grid 表格溢出屏幕

如何使网页宽度自动适应手机屏幕的宽度?