Заставьте diff использовать полную ширину терминала в параллельном режиме

40

Большинство приложений умело используют всю доступную им ширину терминала. Моя оболочка делает, screen, vim и т. Д. Однако diffв параллельном режиме ( -y) этого не происходит. Это злит меня. Он использует 126 символов ширины, что даже не половина моего терминала шириной 270 блоков.

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

Возможно, есть «скрытая функция», diffпозволяющая автоматически расширяться на всю ширину терминала? Или; Какой самый простой путь для автоматической вставки -W <terminalsize>в мою команду diff при каждом запуске?

Я предполагаю, что автоматическое добавление -W ко всему не повредит, потому что это будет означать только «использовать столбцы $ x», что всегда и нужно, независимо от того, нахожусь ли я в режиме «бок о бок», или иным образом.

VxJasonxV
источник

Ответы:

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

должен сделать это. Вы также захотите добавить его в ~ / .bashrc.

Это - 2в основном паранойя, в случае, если что-то (встроенный Unicode двойной ширины?) Расширяется достаточно, чтобы сделать перенос строки; если вы хотите, вы можете просто использовать

$ alias diff='diff -W $(tput cols)'
geekosaur
источник
Я начал замечать $ COLUMNS и думал о том же. псевдоним diff = "diff -W $ {COLUMNS}". Я думаю, что я предпочел бы спросить оболочку, а не полагаться на окружающую среду, хотя.
VxJasonxV
1
tputсчитает $COLUMNS, stty -aи описание терминала, используя первое из тех , что имеет значимую величину. eval $(resize)может использоваться, чтобы заставить их синхронизироваться с тем, что терминал считает своим размером.
geekosaur
обратите внимание, что если у вас есть нестандартные таб-стопы (например, tabs 2в вашем .bashrc), вам также нужно будет использовать флаг -t или diff даст очень странный вывод
Джефф