PS1 เป็นข้อความผี?


1

ฉันจะเปลี่ยนจากการใช้มูลค่า $ PS1 และกำหนดตัวคั่นด้วยข้อความเป็นพื้นหลังได้อย่างไร ฉันได้รับคำแนะนำเพื่อส่งข้อความไปยังเทอร์มินัลแล้วส่ง len (Expand_PS1) แบ็คสเปซแบบไม่ทำลาย (โดยเฉพาะอย่างยิ่งมันจะชัดเจนเมื่อป้อนข้อความและอาจแสดงให้เห็นว่ามีการแจ้งเตือนหรือไม่)

คำตอบ:


3

คุณสามารถใช้ (mis-) RPROMPTแทนPROMPT(aka PS1) เพื่อให้ได้สิ่งนี้หรืออย่างน้อยก็คล้ายกัน

RPROMPTจะปรากฏขึ้นชิดขวาบนบรรทัดเดียวกันกับพรอมต์ หากคำสั่งที่พิมพ์ของคุณยาวพอที่จะเข้าถึงคำสั่งนั้นRPROMPTจะถูกซ่อนโดยอัตโนมัติ (และปรากฏขึ้นอีกครั้งหากคุณลบออกมากพอ)

เพื่อให้คุณสามารถตั้งค่าที่จะมีเพียงตัวละครที่รวดเร็วและใส่ทุกอย่างลงไปในที่อื่นPROMPT RPROMPTแล้วคุณแผ่นที่มีช่องว่างจนกว่าจะเติมส่วนที่เหลือของสายเพื่อที่จะสัมผัสเกือบRPROMPT PROMPTตัวอย่างเช่น

setopt PROMPT_SUBST
PROMPT='%# '
RPROMPT='%$((COLUMNS-4))>> %n@%m %~${(r:$COLUMNS:)}'

สิ่งนี้ควรแสดงบางสิ่งเช่น

%  user@machine ~

ซึ่งเป็นตำแหน่งของเคอร์เซอร์ เมื่อคุณเริ่มพิมพ์ทุกอย่างหลังจากนั้นจะถูกซ่อน ตัวอย่างเช่น

% echo foo

คำอธิบาย:

  • setopt PROMPT_SUBST เปิดใช้งานการแทนที่พารามิเตอร์ในพรอมต์ในแต่ละครั้งที่ปรากฏพรอมต์
  • RPROMPTจำเป็นต้องกำหนดในเครื่องหมายคำพูดเดี่ยวเพื่อให้พารามิเตอร์ในนั้นไม่ได้ถูกขยายทันทีตามคำจำกัดความ แต่จะแสดงเพียงครั้งเดียว (พร้อมPROMPT_SUBSTเปิดใช้งาน) วิธีนี้ช่วยให้มั่นใจได้ว่าการขยายตัวทำงานอย่างถูกต้องแม้ในขณะที่ปรับขนาดหน้าต่างเทอร์มินัล
  • %#เป็นตัวอักษรที่พร้อมท์: #สำหรับราก%สำหรับคนอื่น ๆ
  • $COLUMNS คือความกว้างปัจจุบันของเทอร์มินัล
  • %n>>ตัดทุกอย่างทางด้านขวาของมันเป็นnตัวอักษรโดยตัดด้านขวา
  • $((COLUMNS-4))คำนวณความกว้างที่เหลือหลังจากพรอมต์ซ้าย ( PROMPT) นอกจากตัวละครสองตัวที่PROMPTคุณต้องลบหนึ่งตัวสำหรับเคอร์เซอร์และอีกตัวหนึ่งเพราะRPROMPTไม่ครอบคลุมคอลัมน์สุดท้ายของบรรทัด (หากคุณต้องการใช้PROMPTความยาวผันแปรได้คุณจะต้องคำนวณความยาวแบบไดนามิก)
  • %n@%m %~เป็นเพียงตัวอย่างและแสดงชื่อผู้ใช้ ( %n) ชื่อเครื่อง ( %m) และไดเรกทอรีปัจจุบัน ( %~)
  • ${(r:$COLUMNS:)}ถูกขยายเป็นสตริงช่องว่างที่มีความกว้างเท่ากับเทอร์มินัล สิ่งนี้ทำให้มั่นใจได้ว่าจะมีช่องว่างภายในเพียงพอเสมอ

อืม ... ดูเหมือนว่าฉันจะไม่ได้รับความแตกต่างจากคำแนะนำของคุณเพื่อให้ทำงานได้อย่างถูกต้องไม่ว่าจะเป็นใน. zshrc.pre หรือ. zshrc.local
Conor K

1
ไม่ถูกต้องอย่างไร คุณใช้บางอย่างเช่นOh-My-Zshหรือไม่? ฉันถามเพราะไม่.zshrc.preว่ามิได้มีแฟ้มการกำหนดค่าปกติ.zshrc.local zshถ้าเป็นเช่นนั้นอาจเป็นได้ว่ามันเป็นการรบกวน มันทำงาน (หรือทำงานแตกต่างกัน) ถ้าคุณเพียงแค่เรียกใช้สามบรรทัดโดยตรงในบรรทัดคำสั่งของzshเซสชั่นที่กำลังทำงานอยู่หรือไม่?
Adaephon

อ่าใช่ฉันลืมฉันไม่สามารถเพิ่มเป็นแท็กได้ แต่ใช่ Grml-zsh-config เป็นสิ่งที่ฉันใช้กับทุกระบบของฉัน (เป็นค่าเริ่มต้นสำหรับการติดตั้งของ Arch และฉันคุ้นเคยกับ มัน)
Conor K

ดังนั้นฉันจึงลองใช้ grml zsh config และพบว่าพรอมต์นั้นยืดหยุ่นในการเปลี่ยนแปลง ดูเหมือนว่าจะเกิดจากการใช้ระบบPrompt Theme ของ zsh คุณควรจะปิดการใช้งานโดยการเรียกใช้prompt restoreก่อนที่จะเปลี่ยนตัวแปรพร้อมท์ใด ๆ แน่นอนคุณสามารถลองสร้างธีมของคุณเองโดยใช้คำแนะนำของฉัน
Adaephon

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