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


70

在工作中,我们有几位开发人员,没有代码样式指南,有些开发人员使用制表符缩进,另一些开发人员使用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个空格)。这样,但是我想知道git是否可以选择将制表符输出为diff/中的4个空格show,因为有些开发人员使用zsh而不是bash

有任何想法吗?


5
在理想的世界中,开发人员都会使用空间,而您不会遇到这样的愚蠢问题。
萨尚2012年

4
我完全不同意。为什么用8个字符来表示某物?
马修·G

当然,我不知道您的情况,但是我真的会寻求一些超基本的编码准则,也许只是制表符/空格。没有制表符听起来像是一个好主意,因为那时人们也倾向于使用制表符来对齐他们的注释,等等,这变得一团糟...并且在空格后插入制表符...当我去编辑时我会感到困惑看不到标签是什么,空格是什么(所以我总是使标签在编辑器中可见)。我对此有些神经质,所以</ opinion>
Neal Gokli

而且,我认为可以一致地(仅)使用制表符来缩进代码,并使用空格来进行其他对齐,然后人们可以将制表符更改为所需的内容。我无法想象人们会保持足够的一致!
Neal Gokli

@MatthewG 8听起来比我的2大得多...谢谢你给我看光!:D
Neal Gokli

Answers:


113

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

参考文献:


5
设置less的理由应该是-x5因为统一diff的+/-符号不会影响制表位的位置,但会确实将所有空格向右推一个字符。制表位为5可使所有内容正确对齐。
托德·雅各布斯

1
如何固定空间git --color=always | less -rless -x1,5是无效的
Zheng Kai

2
@ZhengKai:就像一个数据点一样,我将less别名别名为less -Rcore.pager定义如上,然后运行git diff --color-words-一切正常,制表符宽度正确。也许有帮助吗?
Coderer

4
执行git add -p此操作时,不使用寻呼机,并且选项卡显示方式错误。如果您也描述如何解决此问题。那么答案将是完整的
Eugen Konkov 2015年

7
对于那些想知道的人,在-x1,51中是diff输出中的前列(包含+,-和一个空格)。然后,随后的制表符跳到第5、9、13、17等列,也就是1 + 4的倍数。因此,对于git diff来说,正确的参数肯定是-x1,5。人们声称以上内容-x5对他们有用...很好-这是5个空格的制表符宽度,没有前导列,嗯。不太可能吗?
卡罗·伍德

3

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

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

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


我没有可以测试的东西,但这会less -R发挥作用吗?允许ANSI颜色转义序列通过,相对于less -r
codemonkee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.