默认情况下,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
我不知道你怎么能做你想做的事,但你可以:
- 改变缓冲区和窗口宽度的大小以增加总行空间;
将输出重定向到文件,然后使用 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