在 git-gui 中更改 tabsize

在 git-gui 中更改 tabsize

我想知道是否可以将 git-gui 中的制表符大小从 8 个字符更改为 4 个。我发现的唯一问题是core.whitespace = tabsize=4但这只会影响 diff。

我之所以问这个问题,是因为我正在逐步淘汰制表符的使用,而是使用 4 个空格的缩进。然而,当在 git-gui 中查看差异时,这可能会产生令人困惑的结果,因为制表符大小约为 8 个字符。

我知道 Vim 中的简单操作:retab可以解决我的问题,但我经常需要处理具有长期历史的大文件,这些文件可能在不同的分支中进行修改。所以我不能总是简单地转换所有选项卡。

答案1

作为git-gui-0.20git 2.4.0犯罪) 存在一个配置参数,已添加该配置参数来配置 git gui 中显示的 tabsize。

将其添加到您的 ~/.gitconfig

[gui]
    tabsize = 4

或者通过 git-gui 的配置菜单进行更改(编辑 -> 选项...)

答案2

我做了一些研究。

该配置core.whitespace与制表符的显示方式无关。它仅用于 git 识别制表符相关的空格错误。例如:当indent-with-non-tab启用 ,并且core.whitespace设置为tabwidth=4,并且一行使用 4 个或更多空格缩进时,git 将报告错误。

对于 git,除了制表符相关的空白错误检测功能外,制表符与其他字符一样。它会被比较,并被转储到用于显示字符的任何工具中。这意味着,要配置显示的制表符宽度,您必须配置 git 的“前端”。在这种情况下,git diff将是“less”(unix 工具“less”)。在这种情况下,git gui将是 git-gui 本身。

配置 less 很简单。你可以设置 git 配置core.pager来设置 less 使用 4 个空格显示一个标签(less 有一个参数-xn可以将 tabwidth 设置为n)。

配置 git-gui 变得相当困难。Git-gui 是用 Tcl/Tk 编写的。我找到了一个 Tcl/Tk选项配置文本小部件中的标签宽度。我还发现一行代码看起来git-gui.sh好像正在初始化文本小部件。

git-gui.sh这是git 版本 1.7.5 中文件的第 3346 行:

catch {$ui_diff configure -tabstyle wordprocessor}

根据 Tcl/Tk 手册,我将其更改为:

catch {$ui_diff configure -tabs "[expr {4 * [font measure $font 0]}]" -tabstyle wordprocessor}

这似乎没有任何效果。我尝试了不同的值,-tabs它们确实有一些影响显示的标签宽度,因此它似乎是需要修改的正确行。

不幸的是,Tcl/Tk 似乎没有以字符为单位的制表符宽度概念,而是必须以像素或厘米为单位来设置制表符宽度。

请注意,我在 Tcl/TK 方面没有任何经验,所以也许我只是忽略了一些简单的东西。

无论如何,现在你知道从哪里开始挖掘了。如果你有可行的解决方案,记得在这里报告。祝你好运。

答案3

我详细阐述了莱斯马纳

线路

catch {$ui_diff configure -tabstyle wordprocessor}`

提及莱斯马纳应替换为以下内容:

catch {$ui_diff configure -tabs "[expr {[get_config gui.tabsize] * [font measure font_diff 0]}] left" -tabstyle wordprocessor}

完成此操作后,可以使用 git 配置文件(又名 gui.tabsize)的 [gui] 部分中的选项“tabsize”调整选项卡大小。坏消息:

  1. 最后一个非空白字符后面的一些制表符会变成简单空格。这看起来像是 tcl 中的一个错误。
  2. 更改字体大小后必须重新启动 git-gui 才能获得正确的标签。谁知道如何解决这个问题?

已测试:

  • git-gui 版本 0.13.0.8.g8f85
  • git 版本 1.7.4.1
  • tcl 版本 8.4.16-2(Ubuntu 11.04 i386 软件包)

相关内容