Làm thế nào để bạn thực hiện RPROMPT trong zsh tự cập nhật trên mỗi lần nhập?


11

My RPROMPTđược thiết lập để hiển thị thông tin svn bằng cách sử dụng vcs_info. Nó đọc RPROMPT=${vcs_info_msg_0_}. vcs_infođược gọi là sử dụng precmd(). Tuy nhiên, RPROMPT không cập nhật khi tôi thay đổi thư mục. Nó chỉ hoạt động nếu tôi gọi lại lời nhắc (theo nguồn ~ / .zshrc hoặc dấu nhắc) và không thay đổi khi chdir, trừ khi tôi gọi lại lời nhắc. Có cách nào để thay đổi hành vi này?

Câu trả lời:


20

Hãy thử đặt dấu ngoặc đơn xung quanh giá trị biến khi gán để đánh giá độ trễ:

RPROMPT='${vcs_info_msg_0_}'

Tại sao dấu kiểm mất đi khi nó được di chuyển?

@ user5383: Bạn nên hỏi điều đó trên meta.unix.stackexchange.com hoặc meta.stackoverflow.com. Tôi không biết (hoặc chỉ biết mơ hồ) câu trả lời.
Tạm dừng cho đến khi có thông báo mới.

3
Điều này đòi hỏi điều đó setopt PROMPT_SUBSTđã xảy ra trước đó trong tập tin. Nếu không, nó sẽ chỉ lặp lại lời nhắc ra theo nghĩa đen.
Nick Meharry

1

Sử dụng một trích dẫn để trì hoãn đánh giá cũng có tác dụng xác định bí danh động. Đây là một bí danh, tđược sử dụng để đính kèm một trình bao mới vào quy trình tác nhân ssh hiện có, được bắt đầu bằng một bí danh được gọi là ssh-startghi mã shell vào một tệp trong homedir:

mymistress:~> which ssh-start
ssh-start: aliased to eval `ssh-agent | tee ~/.ssh/ssh-agent.out` ; ssh-add ~/.ssh/id_rsa
mymistress:~> grep "alias t" .zshrc    
alias t="eval `cat ~/.ssh/ssh-agent.out`"
mymistress:~> which t
t: aliased to eval SSH_AUTH_SOCK=/tmp/ssh-nZBZp29804/agent.29804; export SSH_AUTH_SOCK;\nSSH_AGENT_PID=29805; export SSH_AGENT_PID;\necho Agent pid 29805;`

Định nghĩa đó tlà xấu vì nó khiến thông tin mới từ một luồng mới ssh-startbị bỏ qua. Thay đổi định nghĩa bí danh tđể được trích dẫn đơn trong .zshrc của tôi cho hành vi tốt hơn nhiều:

mymistress:~> grep "alias t" .zshrc
alias t='eval `cat ~/.ssh/ssh-agent.out`'
mymistress:~> source ~/.zshrc
mymistress:~> which t
t: aliased to eval `cat ~/.ssh/ssh-agent.out`

Lưu ý việc mở rộng định nghĩa tnhư được cung cấp bởi which t, cho thấy tác động của dấu ngoặc kép (mở rộng ngay lập tức các lệnh hoặc biến môi trường) so với dấu ngoặc đơn (đánh giá chậm các lệnh và biến).

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.