ใน zsh มีอักขระเว้นวรรคอยู่ทางด้านขวาของพรอมต์ขวาของฉัน ฉันพยายามด้วย. zshrc ง่าย ๆ เช่น:
PROMPT="#"
RPROMPT="*"
มีช่องว่างหลังจาก * ทางด้านขวาของหน้าจอเสมอ
นี่คือภาพหน้าจอที่แสดงปัญหา (ฉันเลือกพื้นที่บนหนึ่งบรรทัด)
ขอบคุณ
ใน zsh มีอักขระเว้นวรรคอยู่ทางด้านขวาของพรอมต์ขวาของฉัน ฉันพยายามด้วย. zshrc ง่าย ๆ เช่น:
PROMPT="#"
RPROMPT="*"
มีช่องว่างหลังจาก * ทางด้านขวาของหน้าจอเสมอ
นี่คือภาพหน้าจอที่แสดงปัญหา (ฉันเลือกพื้นที่บนหนึ่งบรรทัด)
ขอบคุณ
คำตอบ:
สิ่งที่คุณต้องทำคือใส่สิ่งนี้ลงใน~/.zshrc
(หรือในไฟล์เดียวกับธีมแจ้งของคุณ):
ZLE_RPROMPT_INDENT=0
ในเวอร์ชันของ ZSH ที่มีค่าสูงสุด5.0.2ค่าในซอร์สโค้ด C ของ ZSH ที่เรียกว่าrprompt_off
(ซึ่งตั้งค่าออฟเซ็ตระยะขอบขวา) นั้นมีการกำหนดรหัสแบบยากไว้1
คือการกำหนดค่าตายตัวไป
แต่ในรุ่น5.0.5นักพัฒนาเพิ่มความสามารถในการแทนที่ค่าเริ่มต้นนี้โดยการตั้งค่าZLE_RPROMPT_INDENT
ตัวแปรสภาพแวดล้อม
เหตุผลสำหรับเรื่องนี้ "เยื้อง" เป็นเพราะบางขั้วเก่าจะเริ่มเลื่อนถ้าเซลล์สุดท้ายของจอแสดงผลมีตัวละครที่อยู่ในนั้น
หากคุณใช้ ZSH เวอร์ชันเก่ากว่าและไม่สามารถอัปเดตได้คุณยังสามารถกำจัดพื้นที่นั้นได้ด้วยการทำทั้งสองอย่างต่อไปนี้:
%{...%}
%{terminfo[cub1]}
ตรวจสอบคำถามที่พบบ่อยและข้อความนี้ในรายชื่อผู้รับจดหมายสำหรับข้อมูลเพิ่มเติม
%git<Tab>
เปลี่ยนเป็น%ggit
ฉันได้ส่งรายงานข้อผิดพลาดไปยังผู้ดูแล zsh แต่ดูเหมือนว่าพฤติกรรมนี้เกิดจากการออกแบบ อย่างไรก็ตามปัญหานี้ทำให้ฉันรำคาญมากจนฉันตัดสินใจที่จะแก้ไขและรวบรวม zsh ด้วยตนเองเป็นการแก้ไขชั่วคราว หากคุณใช้ OS X และใช้ Homebrew (คุณควร) จากนั้นคุณสามารถติดตั้ง zsh รวมถึงโปรแกรมแก้ไขของฉันได้ด้วยการเรียกใช้:
brew install https://gist.github.com/padde/7963205/raw/eaedcc557859a40db87282fc39256fccd52d0aad/zsh.rb
คุณอาจจะต้องการที่จะเพิ่ม/usr/local/bin/zsh
ไป/etc/shells
และchsh -s /usr/local/bin/zsh
หลังจากนั้น ท้ายสุดนี่คือข้อแตกต่างสำหรับผู้ที่สนใจ:
diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
index 17b78ce..f136178 100644
--- a/Src/Zle/zle_refresh.c
+++ b/Src/Zle/zle_refresh.c
@@ -1576,7 +1576,7 @@ zrefresh(void)
else
put_rpmpt = rprompth == 1 && rpromptbuf[0] &&
!strchr(rpromptbuf, '\t') &&
- (int)ZR_strlen(nbuf[0]) + rpromptw < winw - 1;
+ (int)ZR_strlen(nbuf[0]) + rpromptw < winw;
} else {
/* insert >.... on first line if there is more text before start of screen */
ZR_memset(nbuf[0], zr_sp, lpromptw);
@@ -1631,9 +1631,9 @@ zrefresh(void)
if (put_rpmpt && !iln && !oput_rpmpt) {
int attrchange;
- moveto(0, winw - 1 - rpromptw);
+ moveto(0, winw - rpromptw);
zputs(rpromptbuf, shout);
- vcs = winw - 1;
+ vcs = winw;
/* reset character attributes to that set by the main prompt */
txtchange = pmpt_attr;
/*
ฉันคิดว่าพื้นที่สีขาวทางด้านขวาเป็นรหัสที่ยาก แต่คุณสามารถหลอกลวงzsh
ด้วยการตั้งค่าต่อไปนี้:
RPROMPT="%{*%}"
ซึ่งโดยหลักการแล้วบอกzsh
ว่าดาวนั้นไม่มีตัวละคร จากman zshmisc
:
%{...%}
รวมสตริงเป็นลำดับ escape ตามตัวอักษร สตริงภายในเครื่องหมายปีกกาไม่ควรเปลี่ยนตำแหน่งเคอร์เซอร์ ( ... )
ข้อเสียคือคุณ "เลื่อน" ช่องว่างไปที่ท้ายPROMPT
:
| PROMPT = "#" | | RPROMPT = "% {*%}" | | # ■ * |
|
สัญลักษณ์แสดงถึงขอบขั้ว■เคอร์เซอร์
ความคิดอื่นจะเพิ่มขึ้นCOLUMNS
1:
COLUMNS=$((COLUMNS + 1))
แต่ต้องคิดวิธีที่จะทำเช่นนี้เฉพาะสำหรับการเรนเดอร์พรอมต์ แต่ไม่ใช่สำหรับคำสั่ง และสิ่งนี้จะกลืนอักขระตัวสุดท้ายของแต่ละบรรทัดบนบรรทัดคำสั่งหลายบรรทัด