ฉันจะ จำกัด จำนวนไดเรกทอรีในพรอมต์ของฉันได้อย่างไร


3

ใน Mac OS X 10.6 ของฉันฉันได้ตั้งค่าพรอมต์เป็น

PS1='\[\033[01;32m\][\w\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '

ฉันจะ จำกัด จำนวนไดเรกทอรีในพรอมต์ของฉันได้อย่างไร \wส่วนหนึ่ง?

นี่เป็นเพราะเมื่อฉันเข้าไปลึกลงไปในทรีของไดเรคทอรีพรอมต์ก็จะทำให้ความกว้างทั้งหมดของเทอร์มินัล


เพียงแค่คำแนะนำที่เป็นประโยชน์ IMO: แยกการพรอมต์บนสองบรรทัด; '\w\n\$ 'สิ่งที่ชอบ
cYrus

คำตอบ:


4

คุณได้ใช้ฟังก์ชั่นในพรอมต์ของคุณสำหรับชื่อสาขา git ซึ่งเป็นสิ่งที่ดีดังนั้นทำเช่นเดียวกันสำหรับเส้นทางของคุณ:

# shorten a path in $1 to max of $2 characters, prepending a "..."
function __shortpath {
    if [[ ${#1} -gt $2 ]]; then
        len=$2+3
        echo "..."${1: -$len}
    else
        echo $1
    fi
}
PS1='\[\033[01;32m\][$(__shortpath "\w" 50)\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '

มันจะ จำกัด เส้นทางถึง 50 ตัวอักษรสุดท้าย นี่คือตัวอย่าง คุณอาจนึกถึงการตัดเพียงแค่สแลช แต่นั่นทำให้ยากขึ้น

# drops first portion of a path $1 if length is greater than $2
function __droppath {
    if [[ ${#1} -gt $2 ]]; then
        p=$1
        while [ ${#p} -gt $2 ]; do
            p="/"$(echo "$p"|cut -d"/" -f3-)
        done
        echo "..."$p
    else
        echo $1
    fi
}
PS1='\[\033[01;32m\][$(__droppath "\w" 50)\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '

อาจเป็นความคิดที่ดีที่จะรักษาความปลอดภัยในขณะที่วนรอบโดยการตรวจสอบว่าความยาวใหม่สั้นกว่าความยาวเก่า (ไม่เช่นนั้นจะเลิก) หรือหากความยาวใหม่เป็น 0 ซึ่งในกรณีนี้คุณอาจคืนค่าสุดท้ายของ $ p - หรือ


3

คุณเคยดูPROMPT_DIRTRIM(การตั้งค่า bash, ตรวจสอบ man bash):

PROMPT_DIRTRIM

หากตั้งค่าเป็นจำนวนที่มากกว่าศูนย์ค่าจะถูกใช้เป็นจำนวนขององค์ประกอบไดเรกทอรีต่อท้ายที่จะเก็บไว้เมื่อขยาย\wและ\Wสตริงพร้อมท์หนีออกมา (ดูที่พรอมต์ด้านล่าง) อักขระที่ลบออกจะถูกแทนที่ด้วยจุดไข่ปลา


เวอร์ชันทุบตีดั้งเดิมของ macos <4 ดังนั้นจึงไม่ได้รับการสนับสนุน
Dudi

1

โดยส่วนตัวฉันไม่มีเส้นทางใด ๆ ในพรอมต์ของฉันฉันไม่ชอบวิธีที่มันย้ายตำแหน่งพรอมต์แม้ว่ามันจะถูกตัดทอนลงก็ตาม

ฉันใส่ตำแหน่งปัจจุบันในแถบชื่อเรื่อง:

USER=$(/usr/bin/id -un)
HOSTNAME=$(uname -n)
HOSTNAME=${HOSTNAME%%.*}
PROMPT_COMMAND='echo -ne "\e]0;$USER@${HOSTNAME}: $(pwd -P)\a"'

คำสั่งสำหรับ USER ที่ได้รับผู้ใช้ปัจจุบันคือธง linux / gnu, ธง MacOSX / bsd อาจแตกต่างกัน

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