Stellen Sie die Tab-Länge in cmd.exe ein

6

Standardmäßig werden Tabulatorzeichen in cmd mit einer Länge von 8 Zeichen geschrieben. Kann ich das auf irgendeine Weise in etwas Kleineres ändern?

Wir verwenden Tabulatoren zum Einrücken in unseren Code. Die diff-Ausgabe von Mercurial (dh hg diff) ist also ziemlich schlecht lesbar.

Gieron
quelle
Sind Sie sicher, dass es in Mercurial keine Option zum Festlegen der Registerbreite für diff gibt? (Verwenden Sie Mercurial nicht, aber ich weiß, dass Sie es mit Git sicher tun können, und ich hätte erwartet, dass der Editor und der Viewer jedes Programmierers konfigurierbar sind).
Sgmoore
1
Nein, ich konnte keinen finden. Ich kann versuchen, eine Erweiterung dafür zu schreiben. Aber ich dachte, es lohnt sich zu prüfen, ob es in cmd nicht zuerst eine einfache Lösung gibt.
Gieron

Antworten:

3

In einer Batch-Datei können Sie durch zeilenweise Ersetzung von Zeichenfolgen Tabulatoren durch vier Leerzeichen ersetzen:

@echo off

setlocal EnableDelayedExpansion

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

endlocal

Die EnableDelayedExpansion ermöglichte die Verwendung von !s und die Änderung von Variablen innerhalb der forSchleife.


Durch das Einfügen von Code in diese Antwort wurden anscheinend drei Leerzeichen durch die Registerkarte ersetzt. Stellen Sie beim Kopieren in eine Stapeldatei sicher, dass sich zwischen :und =in der echoZeile ein tatsächliches Tabulatorzeichen befindet.


Wenn der Befehl einfache Anführungszeichen enthält, die Sie ausführen müssen (ich kenne die vollständige Syntax von nicht hg diff), müssen Sie ihn mit Anführungszeichen umgeben und aktivieren usebackq. Das bedeutet, dass Sie in dem auszuführenden Befehl keine Anführungszeichen verwenden können. Wähle eins.

Von hinten zitierte Version:

@echo off

setlocal EnableDelayedExpansion

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

endlocal
Bob
quelle
Ich finde es interessant, dass Sie usebackq nicht brauchen und dann hg diff... coole Lösung.
Jftuga
1
@jftuga usebackqist nur erforderlich, wenn der auszuführende Befehl quotes ( ') selbst enthält. Wenn er in seinem Befehl usebackqeinfache Anführungszeichen verwenden muss , ist diese Option erforderlich, und Anführungszeichen sollten anstelle von Anführungszeichen um den Befehl verwendet werden. Aber das bedeutet, dass im Befehl keine Anführungszeichen verwendet werden können ... hmm ... wähle eins aus;)
Bob
Toller Tipp! Danke für die Erklärung. Ich kannte die Details von usebackq nicht.
Jftuga
Dies ist der Hauptgrund, warum ich Leerzeichen gegenüber Tabulatoren bevorzuge und alle meine hg-, svn- und git-Befehle auf diese Weise umgehe, damit meine Diffs, Schuldzuweisungen und Katzen den gleichen Einzug haben wie in meinem Editor. Aber ein großes Lob an @Bob für die clevere Lösung. Ich nehme an, meine Alternative könnte darin bestehen, die Tabulatoreinrückung in meinem Editor auf 8 Leerzeichen zu setzen ...
Marcus Pope
1

Ich habe keine Ahnung, wie Sie tun können, was Sie wollen, aber Sie könnten:

  1. Ändern Sie die Größe des Puffers und die Fensterbreite, um den gesamten Zeilenabstand zu vergrößern. Cmd Sreen Buffer und Fenstergröße
  2. Leiten Sie die Ausgabe in eine Datei um und lesen Sie die Datei mit einem Texteditor wie Notepad ++.

    c: \> hg diff> file.txt


quelle
1

Ich bin nicht sicher, woher diese 8 Zeichen für Sie kommen, aber ich hatte immer 4 Zeichen, wenn ich eine Textdatei aus cmd.exe mit TYPE oder COPY eingab. Es kann sein, dass die Ausgabe doppelte Tabs enthält. Entsprechend dem traditionellen DOS beträgt die Breite eines Tabulators 4 Zeichen. Es gibt VIELE Befehlszeilentools, die sich darauf stützen. Dies ist der wahrscheinlichste Grund, warum es meines Wissens nach keine Möglichkeit gibt, dies zu ändern (falls vorhanden) es wäre irgendwo in der Registrierung, aber ich habe es nie gesehen), es sei denn, Sie dekompilieren / kompilieren cmd.exe neu. Mein Vorschlag ist, ein Skript oder ein Konsolentool zu schreiben, das die Ausgabe auf dem Konsolenbildschirm für Sie druckt und die Registerkarten so interpretiert, wie Sie möchten, oder ein Tool wie dieses zu finden, das bereits irgendwo erstellt wurde.

osirisgothra
quelle
4
Ich bin damit nicht einverstanden, ebenso wie jede Version jedes Betriebssystems (DOS, Windows, Linux, OSX usw.), das ich jemals verwendet habe, und auch de.wikipedia.org/wiki/Tab_key, in dem steht, dass '... de facto bei jedem standardisiert ist Vielfaches von 8 Zeichen horizontal '.
sgmoore
1
Ich habe dies gerade mit cmd.exeWindows 7 getestet . Die Tab-Größe betrug 8 Zeichen. Ich erinnere mich nicht, dass Windows, OS / 2, DOS (oder CP / M) jemals eine Standardgröße von etwas anderem als 8 hatten.
Christian Hujer
0

Dies ist keine allgemeine Lösung, aber da Sie zufällig nach 'hg diff' gefragt haben und es zufällig in meiner Google-Abfrage angezeigt wurde .. :)

Die Art und Weise, wie ich das Tab-Problem für diesen speziellen Fall löste, war die Verwendung von less.exe. Ich habe es eigentlich schon benutzt, aber es brauchte nur einen zusätzlichen Parameter. Hier ist ein bisschen von meinem hgrc (vereinfacht):

[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
scobi
quelle