6

По умолчанию символы табуляции в cmd пишутся длиной 8 символов. Есть ли способ, которым я могу изменить это на что-то меньшее?

Мы используем вкладки для отступов в нашем коде. Поэтому вывод diff из Mercurial (т.е. hg diff) становится довольно ужасным для чтения.

4 ответа4

3

В пакетном файле вы можете использовать построчную подстановку строк, чтобы заменить вкладки четырьмя пробелами:

@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
1

Я не уверен, откуда эти 8 символов для вас, но у меня всегда было 4 символа при наборе любого текстового файла из cmd.exe с использованием TYPE или COPY, возможно, выходной файл имеет двойную вкладку. В соответствии с традиционным DOS, ширина TAB составляет 4 символа, есть МНОГИЕ инструменты командной строки, которые полагаются на это, и это наиболее вероятная причина, по которой, насколько я знаю, нет возможности изменить ее (если это было бы где-то в реестре, но я никогда не видел это), если вы не декомпилируете / перекомпилировать cmd.exe. Я предлагаю написать скрипт или консольный инструмент, который печатает вывод на экран консоли для вас, интерпретируя вкладки, как вы хотите, или найдите инструмент, подобный этому, где-то уже созданный.

1

Я понятия не имею, как вы можете делать то, что вы хотите, но вы могли бы:

  1. изменить размер буфера и ширину окна, чтобы увеличить общее пространство строки; Cmd Sreen буфер и размер окна
  2. перенаправьте вывод в файл, затем прочитайте файл в текстовом редакторе, таком как Notepad++.

    c:\> hg diff> file.txt

0

Это не общее решение, но так как вы спросили о '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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .