在 cmd.exe 中设置制表符长度

在 cmd.exe 中设置制表符长度

默认情况下,cmd 中的制表符长度为 8 个字符。有什么方法可以将其改为更小的字符吗?

我们在代码中使用制表符进行缩进。因此 Mercurial(即hg diff)的 diff 输出变得非常难读。

答案1

使用批处理文件,您可以逐行使用字符串替换将制表符替换为四个空格:

@echo off

setlocal EnableDelayedExpansion

for /f "tokens=* delims=" %%a in ('hg diff') do (
    set __temp=%%a
    echo !__temp:   =    !
)

endlocal

EnableDelayedExpansion 启用了!s 的使用和循环内变量的修改for


似乎将代码插入此答案已将制表符替换为三个空格。将其复制到批处理文件时,请确保行中的:和之间有一个实际的制表符。=echo


如果您需要运行的命令中有单引号(我实际上不知道 的完整语法hg diff),那么您必须用反引号将其括起来并启用usebackq。这意味着您不能在需要运行的命令中使用反引号。选一个。

反引版本:

@echo off

setlocal EnableDelayedExpansion

for /f "usebackq tokens=* delims=" %%a in (`hg diff`) do (
    set __temp=%%a
    echo !__temp:   =    !
)

endlocal

答案2

我不知道你怎么能做你想做的事,但你可以:

  1. 改变缓冲区和窗口宽度的大小以增加总行空间; Cmd 屏幕缓冲区和窗口大小
  2. 将输出重定向到文件,然后使用 Notepad++ 等文本编辑器读取该文件。

    c:\>hg diff > file.txt

答案3

我不知道这 8 个字符是从哪里来的,但是当我使用 TYPE 或 COPY 从 cmd.exe 中输入任何文本文件时,我总是有 4 个字符,可能是因为输出是双制表符。与传统的 DOS 保持一致,TAB 的宽度为 4 个字符,有许多命令行工具依赖于此,据我所知,这是无法更改它的最可能的原因(如果有的话,它会在注册表中的某个地方,但我从未看到过),除非您反编译/重新编译 cmd.exe。我的建议是编写一个脚本或控制台工具,将输出打印到控制台屏幕上,以您想要的任何方式解释制表符,或者找到已经在某处制作的类似工具。

答案4

这不是一个通用的解决方案,但是既然您碰巧询问“hg diff”,并且它恰好出现在我的 Google 查询中.. :)

因此,我解决此特定情况下的制表符问题的方法是使用 less.exe。实际上,我碰巧已经在使用它了,但它只需要一个额外的参数。以下是我的 hgrc 的一部分(简化版):

[extensions]
pager =

[pager]
attend = annotate, cat, diff, export, glog, help, log, status
pager = path\to\less.exe --quit-if-one-screen --raw-control-chars --tabs=4
hg16mode = yes

相关内容