Rút ngắn đường dẫn trong dấu nhắc zsh


18

BashPROMPT_DIRTRIMtùy chọn, ví dụ khi tôi đặt PROMPT_DIRTRIM=3, thì một đường dẫn dài như:

user@computer: /this/is/some/silly/path

thay vào đó sẽ hiển thị như:

user@computer: .../some/silly/path

Có một lựa chọn tương tự tồn tại cho zsh?

Câu trả lời:


22

Để có được hiệu ứng tương tự bash, bao gồm ..., hãy thử:

%(4~|.../%3~|%~)

Kiểm tra này, nếu đường dẫn dài ít nhất 4 phần tử ( %(4~|true|false)) và, nếu đúng, sẽ in một số dấu chấm với 3 phần tử cuối cùng ( .../%3~), nếu không thì đường dẫn đầy đủ được in %~.


Tôi nhận thấy rằng bashdường như rút ngắn các đường dẫn trong thư mục chính khác nhau, ví dụ:

~/.../some/long/path

Đối với một hiệu ứng tương tự, bạn có thể muốn sử dụng:

%(5~|%-1~/…/%3~|%4~)

Điều này kiểm tra xem đường dẫn có dài hơn 5 phần tử hay không và trong trường hợp đó sẽ in phần tử đầu tiên ( %-1~), một số dấu chấm ( /…/) và 3 phần tử cuối cùng. Nó không hoàn toàn giống như các đường dẫn, không có trong thư mục chính của bạn, cũng sẽ có phần tử đầu tiên ở đầu, trong khi bashchỉ in các dấu chấm trong trường hợp đó. Vì thế

/this/…/some/silly/path

thay vì

.../some/silly/path

Nhưng điều này có thể không nhất thiết là một điều xấu.


1
Tôi thích phiên bản đầu tiên tốt hơn, nhưng lưu ý rằng nó hiển thị ~/a/bnhư .../a/bthay vì ~/a/b. Để khắc phục điều đó, bạn có thể sử dụng %(5~|…/%3~|%~).
Momar

Đối với những người mới sử dụng zsh (như tôi), bạn muốn sử dụng cú pháp này với PROMPTbiến môi trường trong bạn .zprofile, ví dụ:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.

1
@RyanH. Cảm ơn, đọc lại câu trả lời của tôi, tôi nhận thấy rằng tôi chưa bao giờ đề cập đến, nơi những cài đặt này cần được thực hiện. Tôi sẽ phải sửa nó. Hai điều nhỏ về nhận xét của bạn: cài đặt cho các phiên shell tương tác nên được thực hiện .zshrcvà thực sự không cần exportbất kỳ tham số nội bộ nào như PROMPT.
Adaephon

@Adaephon Cảm ơn thông tin. Tôi sẽ sửa! :)
Ryan H.

8

Ngoài các câu trả lời khác được đưa ra ở đây, bạn cũng có thể sử dụng %<để cắt bớt đường dẫn đến một số ký tự nhất định . Tôi thấy điều này thích hợp hơn để sử dụng %<n>d, vì các yếu tố đường dẫn riêng lẻ rõ ràng có thể khá dài trong chính chúng. Sử dụng %<mang lại một chiều dài nhanh chóng tối đa dự đoán hơn nhiều.

Ví dụ: để cắt ngắn phần tử đường dẫn với mở rộng dấu ngã ( %~) thành 15 ký tự, thay thế các ký tự bị xóa bằng .., bạn có thể làm một cái gì đó như thế này:

PROMPT='%n@%m:%15<..<%~%<<%# '

Điều này được ghi lại trong hướng dẫn sử dụng Zsh trong phần Mở rộng Prompt , ngay cuối trang.


4

Bạn có thể sử dụng %3d mở rộng nhanh chóng :

/home/cuonglm/.config/fish/functions $ PS1='%3d $ '
.config/fish/functions $

Dạng tổng quát là %d, nếu có bất kỳ số nguyên dương nào theo sau dchỉ định các thành phần theo dõi để hiển thị đường dẫn hiện tại, số không có nghĩa là hiển thị toàn bộ đường dẫn, số nguyên âm có nghĩa là đường dẫn hàng đầu để hiển thị:

.config/fish/functions $ PS1='%-2d $ '
/home/cuonglm $

3

Xem http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html hoặcman zshmisc

%d
%/
Current working directory. If an integer follows the ‘%’, it specifies a number of trailing components of the current working directory to show

%~
As %d and %/, but if the current working directory starts with $HOME, that part is replaced by a ‘~’.

Vì vậy, để có được một cái gì đó tương tự PROMPT_DIRTRIM=3, bạn có thể sử dụng %3dhoặc %3~, ví dụ

% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d% 

Điều này sẽ không hiển thị "..." như trong bash.
Elronnd
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.