Интеграция `git` и` less` в терминал OS X: предотвращение записи вывода `less` на tty

В терминале OS X когда less вызывается сам по себе или другими программами, такими как man, его вывод не будет записан на tty после того, как мы выйдем из less. Например, если мы запустим less README, мы будем временно перенаправлены на экран с такими вещами, как

SO rocks.
README (END)

И после нажатия q вывод less исчезнет, ​​и мы получим что-то вроде

$less README
$    # shell waiting for input

Однако это не тот случай, если less вызывается git (в моем случае для пейджера git установлено значение less -r). Вывод less всегда записывается на tty после выхода. Например, если мы запустим git log --oneline, если журнал короткий, less даже не будет вызван; если журнал длиннее одного экрана, то мы будем временно перенаправлены на экран вывода less, как обычно:

0000000 set the pager of git to less
......
1111111 what's wrong with git?
(END)

И после нажатия q все записывается на tty, поэтому мы получаем что-то вроде

$git log --oneline # OMG!!!
0000000 set the pager of git to less
...... (the entire log)
1111111 what's wrong with git?
$    # shell waiting for input

Так можно ли изменить это поведение? Я имею в виду, можно ли настроить git так, чтобы он всегда направлял вывод на меньший (независимо от того, длинный или короткий вывод) и ничего не оставлял на tty после выхода less? Спасибо.


person 4ae1e1    schedule 20.11.2013    source источник


Ответы (1)


... можно ли настроить git так, чтобы он всегда выводил вывод меньше ...

да. По умолчанию git использует less в качестве пейджера, с параметрами FRSX [Извинения за неавторитарный источник].

Чтобы добиться желаемого поведения, отключите параметры F и X. Вы можете сделать это глобально:

git config --global --replace-all core.pager 'less -+X -+F'

Прочтите этот ответ для более подробного объяснения и man less:

-F или --quit-if-one-screen
Вызывает автоматический выход из less, если весь файл может быть отображен на первом экране.
-X или --no-init
Отключает отправку termcap строки инициализации и деинициализации на терминал. Иногда это желательно, если строка деинициализации делает что-то ненужное, например очищает экран.

(Я не уверен, зачем нам -X в данном случае, но, очевидно, git использует его по умолчанию, и его выключение демонстрирует поведение, которое вам нужно.)

person simont    schedule 20.11.2013
comment
Да, это именно то, что я хочу. (И почему-то мне кажется, что это наиболее интуитивно понятное поведение?) Большое вам спасибо! Я терплю поведение по умолчанию почти два года ... Я должен был догадаться раньше. - person 4ae1e1; 20.11.2013