Persingkat jalur di zsh prompt

18

Bashmemiliki PROMPT_DIRTRIMopsi, misal ketika saya atur PROMPT_DIRTRIM=3, maka path panjang seperti:

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

akan ditampilkan sebagai:

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

Apakah ada opsi serupa zsh?

pnuesel
sumber

Jawaban:

22

Untuk mendapatkan efek yang serupa bash, termasuk ..., coba:

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

Ini memeriksa, jika path setidaknya 4 elemen panjang ( %(4~|true|false)) dan, jika benar, mencetak beberapa titik dengan 3 elemen terakhir ( .../%3~), jika path lengkap dicetak %~.


Saya perhatikan bahwa bashtampaknya mempersingkat jalur di direktori home secara berbeda, misalnya:

~/.../some/long/path

Untuk efek yang serupa, Anda mungkin ingin menggunakan:

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

Ini memeriksa, apakah path lebih panjang dari 5 elemen, dan dalam kasus itu mencetak elemen pertama ( %-1~), beberapa titik ( /…/) dan 3 elemen terakhir. Ini tidak persis sama dengan jalur, yang tidak ada di direktori home Anda, juga akan memiliki elemen pertama di awal, sementara bashhanya mencetak titik-titik dalam kasus itu. Begitu

/this/…/some/silly/path

dari pada

.../some/silly/path

Tapi ini mungkin bukan hal yang buruk.

Adaephon
sumber
1
Saya suka versi pertama yang lebih baik, tetapi perhatikan bahwa itu menunjukkan ~/a/bsebagai .../a/bganti ~/a/b. Untuk memperbaikinya, Anda bisa menggunakan %(5~|…/%3~|%~).
momar
Bagi mereka yang baru mengenal zsh (seperti saya), Anda ingin menggunakan sintaks ini dengan PROMPTvariabel lingkungan di Anda .zprofile, misalnya:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.
1
@RyanH. Terima kasih, membaca jawaban saya lagi saya perhatikan, bahwa saya tidak pernah menyebutkan, di mana pengaturan ini perlu dibuat. Saya harus memperbaikinya. Dua hal kecil tentang komentar Anda: pengaturan untuk sesi shell interaktif harus dibuat .zshrcdan benar-benar tidak perlu exportparameter internal shell seperti PROMPT.
Adaephon
@Adaephon Terima kasih atas informasinya. Saya akan memperbaikinya! :)
Ryan H.
8

Selain jawaban lain yang diberikan di sini, Anda juga dapat menggunakan %<untuk memotong jalur ke sejumlah karakter tertentu . Saya menemukan ini lebih baik daripada menggunakan %<n>d, karena masing-masing elemen path mungkin cukup panjang dalam dirinya sendiri. Menggunakan %<hasil, panjang prompt maksimum yang jauh lebih dapat diprediksi.

Misalnya, untuk memotong-kiri elemen path dengan ekspansi tilde ( %~) hingga 15 karakter, menggantikan karakter yang dihapus dengan .., Anda dapat melakukan sesuatu seperti ini:

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

Ini didokumentasikan dalam manual Zsh di bawah Ekspansi Prompt , tepat di akhir halaman.

wjv
sumber
4

Anda dapat menggunakan %3d ekspansi cepat :

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

Bentuk umumnya adalah %d, jika ada bilangan bulat positif yang mengikuti dmenentukan komponen tambahan untuk menunjukkan lintasan saat ini, nol berarti menunjukkan seluruh lintasan, bilangan bulat negatif berarti lintasan terkemuka untuk menunjukkan:

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

Lihat http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html atauman 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 ‘~’.

Jadi untuk mendapatkan sesuatu yang mirip PROMPT_DIRTRIM=3, Anda bisa menggunakan %3datau %3~, mis

% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d% 
Mikel
sumber
Ini tidak akan menunjukkan "..." seperti dalam bash, meskipun.
Elronnd