我想知道是否可以将 git-gui 中的制表符大小从 8 个字符更改为 4 个。我发现的唯一问题是core.whitespace = tabsize=4
但这只会影响 diff。
我之所以问这个问题,是因为我正在逐步淘汰制表符的使用,而是使用 4 个空格的缩进。然而,当在 git-gui 中查看差异时,这可能会产生令人困惑的结果,因为制表符大小约为 8 个字符。
我知道 Vim 中的简单操作:retab
可以解决我的问题,但我经常需要处理具有长期历史的大文件,这些文件可能在不同的分支中进行修改。所以我不能总是简单地转换所有选项卡。
答案1
作为git-gui-0.20和git 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”调整选项卡大小。坏消息:
- 最后一个非空白字符后面的一些制表符会变成简单空格。这看起来像是 tcl 中的一个错误。
- 更改字体大小后必须重新启动 git-gui 才能获得正确的标签。谁知道如何解决这个问题?
已测试:
- git-gui 版本 0.13.0.8.g8f85
- git 版本 1.7.4.1
- tcl 版本 8.4.16-2(Ubuntu 11.04 i386 软件包)