Відступ виконавців у zshell


1

Я хотів би налаштувати мій zshell так, щоб підказка вдавалася проти лівої межі, як звичайно. Я також хотів би, щоб усі результати виконання були відступлені, можливо, на 2 пробіли. Чи є спосіб відступити так?

Я експериментую з двома рядковими підказками:

PROMPT='
%{$fg[gray]%}PWD:%{$reset_color%}%{$fg[cyan]%}%~ %{$reset_color%}
%{$fg[red]%}> '

Було б непогано зробити цю оперативну відмітку у власній колонці.

Відповіді:


1

Я думаю, що це не так просто, як можна подумати. Ви повинні перехопити STDOUT, оскільки зовнішні програми безпосередньо записують на цей канал.

Нижче наведено вид a доказ концепції . Майте на увазі, що це порушить багато речей, а саме інтерактивних програм man, less Так що це не можна використовувати для повсякденного використання, але легко форматувати сеанс оболонки для публікації, наприклад, SU.

Цей підхід був опублікований Atom Smasher на zsh-users списку розсилки Sat, 16 May 2009 розфарбувати STDERR. Я прийняв його відповідно до ваших вимог:

# ## indent_output.zsh ##

zmodload zsh/terminfo zsh/system
autoload is-at-least

indent_output() {
  while sysread line
  do
    testline=${line//$'\n'/$'\n'   }
    syswrite "   ${testline}"      
  done
}

precmd() { sleep 0 }

## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec  > >(indent_output)

Складна частина exec > >(indent_output) який обробляє повний вихід замінюваного оболонки через indent_output функції. The precmd визначення необхідно для того, щоб уникнути стану гонки, інакше новий рядок буде надруковано перед фактичним виведенням виконаної команди.

Ось демонстрація:

% source indent_output.zsh
% ls /bin | head
   [.exe
   2to3
   2to3-3.2
   411toppm.exe
   7z
   7za
   7zr
   a2p.exe
   aaflip.exe
   aclocal
   %
% date
   Sat, Nov 08, 2014  5:58:29 PM
   %
% cat /usr/share/doc/foo
   cat   :       /usr/share/doc/foo   :    No such file or directory   
   %
% cat /usr/share/doc/zsh-5.0.6/INSTALL| head
                           ++++++++++++++
                           INSTALLING ZSH
                           ++++++++++++++

   This file is divided into two parts:  making and installing the shell, a
   note on the script run to set up the environment for new users, and
   a description of various additional configuration options.  You should
   have a look at the items in the second and third parts before following the
   instructions in the first.

   %
% 

Ви можете позбутися від % підписувати перед кожним запитом (що позначає, що останній рядок не закінчується CR ) з цими двома варіантами:

setopt PROMPT_CR NO_PROMPT_SP

Так. Це дає мені відступ, який пропонує поліпшення зручності читання. Я використовую його протягом деякого часу зараз та я можу жити з шляхом це (a) додає що дивний % символ донизу, (b) доставляє сторінки, і (c) штовхає ls до одного стовпця. Тим не менш, втрата кольору для git вихід може бути угода вимикач для мене.
bholben

Я помітив, що кольоровий вихід з tree -CL 1 працює, але розфарбовує вихід з git status або git log не працює. Будь-які ідеї про те, як отримати колір назад для git виводу?
bholben

1
@bholben: стосовно (a) The % тому, що zsh виявляє, що останній рядок не закінчується CR, щоб припинити його використання: setopt PROMPT_CR NO_PROMPT_SP. щодо git: використання color.ui=always у вашому git config, щоб змусити git розфарбувати вивід. Але це, напевно, порушується git diff > patch-file. Ви також можете змусити ls використовувати кольори: ls --color=always.
mpy

Чудово! Це добре очищає його. Я скористаюся цим деяким часом і побачу, як це впливає на мій робочий процес. Мені дуже подобається.
bholben
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.