在 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 diff
或git 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 diff
或git 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的主要内容,如果未能解决你的问题,请参考以下文章