微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 git bash 中如何增加 less 的屏幕宽度?

如何解决在 git bash 中如何增加 less 的屏幕宽度?

我在 Windows 10 上使用 git bash 2.32。

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

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

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

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

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

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

As can be seen the lines are truncated way too early

解决方法

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

与此同时,请考虑this workaround from KalleOlaviNiemitalo

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

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

https://user-images.githubusercontent.com/1185677/119397646-b889e480-bcd6-11eb-882d-0821a97b7eeb.png

(见顶部的重复行)

根本原因:当我们无法弄清楚终端有多宽时,我们自己使用了 80 的回退值(这是无法避免的),但是当我们运行寻呼机时,我们将其导出到COLUMNS,它强制寻呼机使用硬编码值,即使寻呼机完全有能力自己计算出来。

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

请参阅 commit 9b6e2c8Johannes Schindelin (dscho)(2021 年 6 月 21 日)。
(由 Junio C Hamano -- gitster --commit 32d6280 合并,2021 年 7 月 8 日)

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

合著者:Junio C Hamano
签字人:约翰内斯·辛德林

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

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

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

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

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

但是 git.exe 本身意识到 MSYS2 运行时,或者对于那个伪终端的问题,并且无法调用 ioctl() 或 {{1} }.

因此,无论实际终端大小是多少,TIOCGWINSZ 都会回退到硬编码 80 列。

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?