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

Car*_*rós 64 git bash whitespace tabs spaces

在工作中,我们是几个开发人员,并没有代码样式指南,一些开发人员缩进标签,而另一些开发人员有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";
+}
Run Code Online (Sandbox Code Playgroud)

问题是git diff或者git show每个选项卡显示为8个空格(实际上显示为选项卡,而shell(在我的情况下是bash)将选项卡显示为8个空格.我想必须有一些bash配置要更改这个,但我想知道git是否有选项将选项卡输出为diff/中的4个空格show,因为有些开发人员使用zsh而不是bash.

有任何想法吗?

cod*_*kee 103

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

参考文献:

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

Sar*_*iev 7

在 MacOS 上你可以这样做

$ git config --global core.pager 'less --tabs 4'
Run Code Online (Sandbox Code Playgroud)

-x/--tabs是同一个选项,我更喜欢使用完整的选项。从man less

-xn,... 或 --tabs=n,...
设置制表位。如果仅指定一个 n,则制表位设置为 n 的倍数。如果指定了多个用逗号分隔的值,则在这些位置设置制表位,然后以与最后两个相同的间距继续。例如,-x9,17 将在位置 9、17、25、33 等处设置制表符。n 的默认值为 8。


adi*_*ius 5

由于我的颜色设置,答案/sf/answers/740896621/对我不起作用,我想出了以下解决方案:

TAB=$'\t' && git config --global core.pager "sed 's/$TAB/    /g' | less" && unset TAB
Run Code Online (Sandbox Code Playgroud)

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