在 git-gui 中更改 tabsize

Htb*_*baa 15 git git-gui

我想知道是否可以将 git-gui 中的 tabsize 从 8 个字符更改为 4 个字符。我发现的唯一一件事是core.whitespace = tabsize=4但这只影响差异。

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

我知道:retabVim 中的一个简单方法可以解决我的问题,但我经常需要处理具有长期历史记录的大文件,这些文件可能在单独的分支中进行了修改。所以我不能总是简单地转换所有标签。

les*_*ana 10

我做了一些研究。

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

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

少配置很容易。您可以将 git 配置core.pager设置为 setup less 以使用 4 个空格显示选项卡(less 有一个参数-xn将 tabwidth 设置为n)。

结果证明配置 git-gui 要困难得多。Git-gui 是用 Tcl/Tk 编写的。我找到了一个 Tcl/Tk选项来配置文本小部件中的标签宽度。我还发现了一行git-gui.sh看起来正在初始化文本小部件的地方。

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

catch {$ui_diff configure -tabstyle wordprocessor}
Run Code Online (Sandbox Code Playgroud)

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

catch {$ui_diff configure -tabs "[expr {4 * [font measure $font 0]}]" -tabstyle wordprocessor}
Run Code Online (Sandbox Code Playgroud)

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

不幸的是,Tcl/Tk 在字符方面似乎没有制表符宽度的概念,相反,制表符宽度必须以像素或厘米为单位进行设置。

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

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


Pat*_* B. 6

git-gui-0.20git 2.4.0 ( commit ) 开始,存在一个配置参数,已添加该参数以配置 git gui 中显示的 tabsize。

将此添加到您的 ~/.gitconfig

[gui]
    tabsize = 4
Run Code Online (Sandbox Code Playgroud)

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


iFr*_*red 5

我详细阐述了lesmana所做的研究

线

catch {$ui_diff configure -tabstyle wordprocessor}`
Run Code Online (Sandbox Code Playgroud)

lesmana提到的应该替换为以下内容:

catch {$ui_diff configure -tabs "[expr {[get_config gui.tabsize] * [font measure font_diff 0]}] left" -tabstyle wordprocessor}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,可以使用 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 包)