Vergleichen Verwenden Sie die volle Klemmenbreite im Side-by-Side-Modus

40

Die meisten Anwendungen nutzen die volle Breite des Terminals, das ihnen zur Verfügung steht. Meine Shell funktioniert, Bildschirm, vim, etc. Im diffSide-by-Side-Modus ( -y) jedoch nicht. Das ärgert mich. Es verwendet eine Breite von 126 Zeichen, was nicht einmal der Hälfte meines Terminals mit 270 Blockbreiten entspricht.

Ein Blick in die Manpage verrät nichts Besonderes über das automatische Anpassen der Breite, sondern nur das manuelle Festlegen über -W.

Gibt es vielleicht eine "versteckte Funktion" diff, mit der es automatisch auf die volle Breite des Terminals erweitert werden kann? Oder; Was ist der einfachste Weg, um automatisch -W <terminalsize>in meinen diff-Befehl einzufügen, wenn ich ihn starte?

Ich gehe davon aus, dass das automatische Anhängen von -W an alles nichts anhaben kann, da es immer nur bedeutet, dass $ x Spalten verwendet werden. Dies ist immer das, was ich möchte, unabhängig davon, ob ich mich im Side-by-Side-Modus befinde. oder andernfalls.

VxJasonxV
quelle

Antworten:

51
$ alias diff='diff -W $(( $(tput cols) - 2 ))'

sollte es tun. Sie sollten es auch zu ~ / .bashrc hinzufügen.

Das - 2ist vor allem Paranoia, falls etwas erweitert genug , um den Zeilenumbruch zu machen (eingebetteten doppelte Breite Unicode?); Wenn Sie möchten, können Sie einfach verwenden

$ alias diff='diff -W $(tput cols)'
Geekosaurier
quelle
Ich bemerkte $ COLUMNS und dachte etwas in die gleiche Richtung. alias diff = "diff -W $ {COLUMNS}". Ich denke, ich würde lieber die Shell fragen, als mich auf die Umgebung zu verlassen.
VxJasonxV
1
tputberücksichtigt $COLUMNS, stty -aund die Terminalbeschreibung, wobei die erste von denen verwendet wird, die einen aussagekräftigen Wert haben. eval $(resize)kann verwendet werden, um zu erzwingen, dass sie mit der Größe des Terminals synchronisiert sind.
Geekosaurier
Beachten Sie, dass, wenn Sie nicht standardmäßige Tabstopps haben (z. B. tabs 2in Ihrem .bashrc), Sie auch das -t-Flag verwenden müssen oder diff eine sehr bizarre Ausgabe erzeugt
Jeff