Kết quả thực hiện thụt lề trong zshell


1

Tôi muốn tùy chỉnh zshell của mình để lời nhắc được đưa lên so với đường viền bên trái như bình thường. Tôi cũng muốn có tất cả các kết quả thực hiện thụt lề có lẽ bằng 2 khoảng trắng. Có cách nào để thụt lề như thế này?

Tôi đang thử nghiệm với lời nhắc 2 dòng:

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

Sẽ thật tuyệt khi làm cho lời nhắc này nổi bật trong cột riêng của nó.

Câu trả lời:


1

Tôi nghĩ rằng điều này không đơn giản như người ta nghĩ. Bạn phải chặn STDOUT, vì các chương trình bên ngoài trực tiếp ghi vào kênh đó.

Sau đây là một loại bằng chứng của khái niệm . Xin lưu ý rằng điều này sẽ phá vỡ rất nhiều thứ, cụ thể là các chương trình tương tác man, lessv.v. Vì vậy, nó không thể sử dụng hàng ngày, nhưng để dễ dàng định dạng phiên shell cho bài đăng trên ví dụ SU.

Cách tiếp cận này đã được đăng tải bởi Atom Smasher trên danh zsh-userssách gửi thư trên Sat, ngày 16 tháng 5 năm 2009 để tô màu STDERR. Tôi chấp nhận nó theo yêu cầu của bạn:

# ## 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)

Phần khó khăn là exec > >(indent_output)xử lý đầu ra hoàn chỉnh của vỏ thay thế thông qua indent_outputchức năng. Các precmdđịnh nghĩa là cần thiết để tránh tình trạng chủng tộc, nếu không kịp thời mới được in trước khi sản lượng thực tế của các lệnh thực thi.

Đây là một bản demo:

% 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.

   %
% 

Bạn có thể thoát khỏi %dấu hiệu trước mỗi lời nhắc (biểu thị rằng dòng cuối cùng không kết thúc CR) với hai tùy chọn sau:

setopt PROMPT_CR NO_PROMPT_SP

Vâng. Điều này mang lại cho tôi sự thụt lề mang lại sự cải thiện khả năng đọc. Bây giờ tôi đã sử dụng nó một chút và tôi có thể sống theo cách nó (a) thêm %biểu tượng ngộ nghĩnh đó vào phía dưới, (b) cung cấp các trang man và (c) đẩy lsvào một cột duy nhất. Tuy nhiên, việc mất màu cho đầu ra git có thể là một công cụ đối phó với tôi.
bholben

Tôi đã nhận thấy rằng đầu ra được tô màu từ tree -CL 1các tác phẩm nhưng đầu ra được tô màu từ git statushoặc git logkhông hoạt động. Bất kỳ ý tưởng về làm thế nào để lấy lại màu cho đầu ra git?
bholben

1
@bholben: liên quan đến (a) %Đó là vì zsh phát hiện ra rằng dòng cuối cùng không kết thúc CR, để ngăn chặn nó sử dụng : setopt PROMPT_CR NO_PROMPT_SP. liên quan đến git: sử dụng color.ui=alwaystrong cấu hình git của bạn để buộc git tô màu đầu ra. Nhưng điều này có thể phá vỡ git diff > patch-file. Bạn cũng có thể buộc ls sử dụng màu sắc : ls --color=always.
mpy

Tuyệt quá! Điều đó làm sạch nó độc đáo. Tôi sẽ sử dụng điều này trong một thời gian và xem nó ảnh hưởng đến quy trình làm việc của tôi như thế nào. Tôi thực sự thích nó.
bholben
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.