在 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 只是运行 less
和 less
从那里开始处理所有事情。
@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:如何将图像(裁剪)放入下一个有状态/更少的小部件