在 git show / git diff 中将 tabwidth 设置为 4

Posted

技术标签:

【中文标题】在 git show / git diff 中将 tabwidth 设置为 4【英文标题】:setting tabwidth to 4 in git show / git diff 【发布时间】:2012-05-21 19:19:42 【问题描述】:

在工作中,我们是几个开发人员,没有代码样式指南,一些开发人员使用制表符缩进,而另一些开发人员使用 4 个空格(幸运的是,没有人使用不同于 4 个空格的空格缩进)。一般来说,这不是(大)问题,因为在我们的编辑器中我们设置了tabwidth=4,并且所有缩进似乎都是正确的。

但在git diffgit show 中出现的是这样的:

diff --git a/mesclatabs.php b/mesclatabs.php
new file mode 100644
index 0000000..1986c91
--- /dev/null
+++ b/mesclatabs.php
@@ -0,0 +1,5 @@
+<?php
+function foo() 
+       echo "line with 1 tab\n";
+    echo "line with 4 spaces\n";
+

问题是git diffgit show,其中每个选项卡显示为 8 个空格(嗯,实际上显示为一个选项卡,并且 shell(在我的情况下为 bash)将选项卡显示为 8 个空格。我假设必须有一些 bash 配置来改变这一点,但我想知道 git 是否可以选择在 diff / show 中将制表符输出为 4 个空格,因为一些开发人员使用 zsh 而不是 @987654330 @。

有什么想法吗?

【问题讨论】:

在理想的世界中,开发人员都会使用空格,这样你就不会遇到这样的愚蠢问题。 我完全不同意。既然可以用 8 个字符来表示,为什么还要用 4 个字符来表示? 当然我不知道你的情况,但我真的会推动一些超级基本的编码指南,也许只是关于制表符/空格。没有制表符听起来是个好主意,因为那时人们也倾向于使用制表符来对齐他们的 cmets 等,这变得一团糟……在空格后插入制表符……当我去编辑时,我可以'看不到什么是标签,什么是空格(所以我总是让标签在我的编辑器中可见)。不过,我对此有点神经质,所以 另外,我认为可以始终使用(仅)制表符来缩进代码,并使用空格来进行任何其他对齐,然后人们可以将制表位更改为他们想要的任何内容。不过,我无法想象人们足够一致! @MatthewG 8 听起来比我的 2 大很多...谢谢你让我看到光! :D 【参考方案1】:

我相信git config --global core.pager 'less -x1,5'

参考资料:

原文:(不再有效)git-scm chp7-1 较新: git-config#git-config-corepager Customizing Git

【讨论】:

less 的参数应该是 -x5,因为统一差异的 +/- 符号不会影响制表位的位置,但它们推送所有空格向右一个字符。 5 个制表位可以正确对齐所有内容。 @ZhengKai:就像一个数据点,我有less 别名为less -R,core.pager 定义如上,我运行git diff --color-words——一切正常,标签宽度是正确的。也许这有帮助? 当我执行git add -p 时,不使用寻呼机并且选项卡以错误的方式显示。如果您也描述如何解决此问题。那么答案将是完整的 @IanRogers - 对于颜色转义序列,您想使用 less -R / --RAW-CONTROL-CHARS linux.die.net/man/1/less 对于那些想知道的人,-x1,5 中的 1 是 diff 输出中的前导列(包含 +、- 和一个空格)。随后的选项卡然后跳转到第 5、9、13、17 列等 - 也就是 1 + 4 的倍数。因此,对于 git diff,正确的参数绝对是 -x1,5。人们在上面声称-x5 为他们工作......好吧 - 这是一个没有前导列的 5 个空格的制表符宽度,嗯。不太可能?【参考方案2】:

由于我的颜色设置,https://***.com/a/10584237/1850340 的答案对我不起作用,我想出了以下解决方案:

TAB=$'\t' && git config --global core.pager "sed 's/$TAB/    /g' | less" && unset TAB

这会将所有制表符替换为 4 个空格,然后再以 less 显示。 (需要 TAB 解决方法来规避 shell 反斜杠转义)

【讨论】:

我不在我可以测试的东西上,但这会是 less -R 发挥作用的地方吗?允许 ANSI 颜色转义序列通过,而不是 less -r?

以上是关于在 git show / git diff 中将 tabwidth 设置为 4的主要内容,如果未能解决你的问题,请参考以下文章

能否在所有git项目中,让所有的 "git diff "命令都使用 "Python diff"?

git diff

利用Git Diff比较Excel-推荐一款小工具

修复git diff正文中文乱码

git diff 命令详解

在 git-diff 的输出中着色空白