ลดเส้นทางในพรอมต์ zsh


18

BashมีPROMPT_DIRTRIMตัวเลือกเช่นเมื่อฉันตั้งPROMPT_DIRTRIM=3แล้วเส้นทางยาวเช่น:

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

จะแสดงแทนเป็น:

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

มีตัวเลือกที่คล้ายกันzshหรือไม่

คำตอบ:


22

ในการรับเอฟเฟกต์ที่คล้ายกันbashซึ่งรวมถึง...ลอง:

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

การตรวจสอบนี้ถ้าเส้นทางเป็นอย่างน้อย 4 องค์ประกอบยาว ( %(4~|true|false)) และถ้าเป็นจริงจะพิมพ์จุดบางคนที่มีช่วง 3 องค์ประกอบ ( .../%3~) %~มิฉะนั้นเส้นทางแบบเต็มจะถูกพิมพ์


ฉันสังเกตเห็นว่าbashดูเหมือนว่าจะทำให้เส้นทางในไดเรกทอรีภายในสั้นลงเช่น:

~/.../some/long/path

สำหรับเอฟเฟกต์ที่คล้ายกันคุณอาจต้องการใช้:

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

การตรวจสอบนี้จะตรวจสอบว่าเส้นทางนั้นมีความยาวมากกว่า 5 องค์ประกอบและในกรณีนั้นจะพิมพ์องค์ประกอบแรก ( %-1~) บางจุด ( /…/) และองค์ประกอบ 3 รายการสุดท้าย มันไม่เหมือนกับพา ธ ที่ไม่ได้อยู่ในโฮมไดเร็กตอรี่ของคุณ, จะมีองค์ประกอบแรกที่จุดเริ่มต้น, ในขณะที่bashเพียงพิมพ์จุดในกรณีนั้น. ดังนั้น

/this/…/some/silly/path

แทน

.../some/silly/path

แต่นี่อาจไม่จำเป็นต้องเป็นสิ่งที่ไม่ดี


1
ฉันเหมือนรุ่นแรกที่ดีขึ้น แต่ทราบว่ามันแสดงให้เห็น~/a/bว่าเป็นแทน.../a/b ในการแก้ไขปัญหาที่คุณสามารถใช้~/a/b %(5~|…/%3~|%~)
momar

สำหรับผู้ที่ยังใหม่กับ zsh (เช่นฉัน) คุณต้องการใช้ไวยากรณ์นี้กับPROMPTตัวแปรสภาพแวดล้อมในของคุณ.zprofileเช่น:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.

1
@RyanH ขอบคุณอ่านคำตอบของฉันอีกครั้งฉันสังเกตเห็นว่าฉันไม่เคยพูดถึงที่จะต้องทำการตั้งค่าเหล่านี้ ฉันจะต้องแก้ไขมัน สองสิ่งเล็ก ๆ เกี่ยวกับความคิดเห็นของคุณ: ควรทำการตั้งค่าสำหรับเซสชันเชลล์แบบโต้ตอบ.zshrcและไม่จำเป็นต้องexportมีพารามิเตอร์ภายในของเชลล์PROMPTเลย
Adaephon

@Adaephon ขอบคุณสำหรับข้อมูล ฉันจะแก้ไข! :)
Ryan H.

8

นอกเหนือจากคำตอบอื่น ๆ ที่ให้ไว้ที่นี่คุณยังสามารถใช้%<เพื่อตัดทอนเส้นทางไปยังจำนวนอักขระที่กำหนด ฉันคิดว่าสิ่งนี้ดีกว่าที่จะใช้%<n>dเนื่องจากองค์ประกอบของเส้นทางส่วนบุคคลอาจเห็นได้ค่อนข้างยาวในตัวเอง การใช้%<ให้ความยาวพร้อมต์สูงสุดที่คาดเดาได้มาก

ตัวอย่างเช่นในการตัดทอนองค์ประกอบพา ธ ด้วยการขยายเครื่องหมายตัวหนอน ( %~) ถึง 15 ตัวอักษรเพื่อแทนที่อักขระที่ถูกลบด้วย..คุณสามารถทำสิ่งนี้:

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

เอกสารนี้มีไว้ในคู่มือ Zsh ภายใต้การขยายพร้อมท์ตอนท้ายของหน้า


4

คุณสามารถใช้%3d การขยายพรอมต์ :

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

รูปแบบทั่วไปคือ%dถ้าจำนวนเต็มบวกใด ๆ ตามdระบุองค์ประกอบต่อท้ายเพื่อแสดงเส้นทางปัจจุบันศูนย์หมายถึงแสดงเส้นทางทั้งหมดจำนวนเต็มลบหมายถึงเส้นทางชั้นนำที่จะแสดง:

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

3

ดูhttp://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.htmlหรือman 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 ‘~’.

เพื่อให้ได้สิ่งที่คล้ายกับPROMPT_DIRTRIM=3คุณสามารถใช้%3dหรือ%3~เช่น

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

สิ่งนี้จะไม่แสดง "... " เหมือนเป็นการทุบตี
Elronnd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.