หยุด zsh จากการกินพื้นที่ก่อนสัญลักษณ์ท่อได้อย่างไร


18

เมื่อฉันพิมพ์ช่องว่างตามด้วยสัญลักษณ์'|'ไพพ์บนบรรทัดคำสั่ง zsh zsh กินช่องว่างวางสัญลักษณ์ไพพ์ขึ้นตรงกับคำก่อนหน้า ฉันจะหยุดมันจากการทำเช่นนั้นได้อย่างไร ฉันไม่แน่ใจเกี่ยวกับอนุสัญญาโวหารใด ๆ ที่เป็นไปได้ แต่ฉันชอบช่องว่างทั้งสองด้านของสัญลักษณ์ไปป์เพื่อความสะดวกในการอ่าน ฉันใช้ oh-my-zsh ค่อนข้างออกนอกกรอบ

วิธีการแก้

จากคำตอบของ mpy ด้านล่างฉันใช้วิธีแก้ปัญหาต่อไปนี้:

โดยค่าเริ่มต้น ZLE_REMOVE_SUFFIX_CHARS จะไม่ได้กำหนดใน zsh / ohmyzsh เมื่อไม่ได้กำหนดจะทำหน้าที่เหมือนเป็น:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

ฉันเพิ่มคำจำกัดความต่อไปนี้ใน ~ / .zshrc ของฉัน:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(ทั้งหมดยกเว้น pipe) และ presto สมบูรณ์แบบ! ปัญหาหายไป


1
ก่อนอื่นให้ลองทำสิ่งนี้โดยใช้zsh -f(เพื่อข้ามการโหลดการกำหนดค่าของคุณ) คุณจะสังเกตเห็นว่า zsh จะไม่ทำเช่นนั้นอีก จากนั้นคุณจะต้องขุด (ส่วนใหญ่) ลงในoh-my-zshเพื่อหาสาเหตุที่ทำให้ ;-)
ฟรานซิสโก

คำตอบ:


18

ฉันคิดว่าคุณหมายถึงว่าเมื่อคุณTABกรอกคำสั่ง / ชื่อไฟล์พื้นที่จะถูกเพิ่มโดยอัตโนมัติ แต่หลังจากกด|มันหายไปอีกครั้ง ไม่อย่างนั้นฉันก็ไม่สามารถสร้างเอฟเฟกต์นั้นได้อีก

อย่างไรก็ตามในกรณีนี้การแก้ปัญหาควรง่ายเหมือน

ZLE_REMOVE_SUFFIX_CHARS=""

คำอธิบายนั้นค่อนข้างยุ่งยากดังนั้นฉันก็อ้าง man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS พารามิเตอร์เหล่านี้ถูกใช้โดยตัวแก้ไขบรรทัด ในบางสถานการณ์คำต่อท้าย (โดยทั่วไปคือช่องว่างหรือสแลช) ที่เพิ่มโดยระบบเสร็จจะถูกลบโดยอัตโนมัติเนื่องจากคำสั่งการแก้ไขครั้งต่อไปไม่ใช่ตัวอักษรที่แทรกได้หรือเนื่องจากตัวอักษรถูกทำเครื่องหมายว่าต้องการให้ส่วนต่อท้ายถูกลบ

ตัวแปรเหล่านี้สามารถมีชุดของตัวละครที่จะทำให้ส่วนต่อท้ายที่จะถูกลบออก หาก ZLE_REMOVE_SUFFIX_CHARS ตั้งค่าไว้อักขระเหล่านั้นจะทำให้ส่วนต่อท้ายถูกลบออก หากZLE_SPACE_SUFFIX_CHARSมีการตั้งค่าตัวละครเหล่านั้นจะทำให้ส่วนต่อท้ายถูกลบและแทนที่ด้วยช่องว่าง

หากZLE_REMOVE_SUFFIX_CHARSไม่ได้ตั้งค่าไว้พฤติกรรมเริ่มต้นจะเทียบเท่ากับ:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

หากZLE_REMOVE_SUFFIX_CHARSตั้งไว้ แต่ว่างเปล่าไม่มีอักขระใดที่มีลักษณะการทำงานนี้ ZLE_SPACE_SUFFIX_CHARS จะมีความสำคัญเพื่อให้ต่อไปนี้:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

ทำให้ตัวละคร&และ|เพื่อลบคำต่อท้าย แต่จะแทนที่ด้วยช่องว่าง

หากต้องการแสดงให้เห็นถึงความแตกต่างสมมติว่าตัวเลือกAUTO_REMOVE_SLASHมีผลบังคับใช้และไดเรกทอรี DIR เพิ่งเสร็จสิ้นพร้อมกับผนวก/ต่อไปซึ่งผู้ใช้ประเภท&ใด DIR&ผลเริ่มต้นคือ ด้วย ZLE_REMOVE_SUFFIX_CHARSชุด แต่ไม่รวมถึงผลที่ได้คือ& DIR/&ด้วยการZLE_SPACE_SUFFIX_CHARSตั้งค่าที่จะรวมถึงผลที่ได้คือ&DIR &

โปรดทราบว่าความสำเร็จบางอย่างอาจมีการลบคำต่อท้ายหรือพฤติกรรมการแทนที่ซึ่งแทนที่ค่าที่อธิบายไว้ที่นี่


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