ทำไมการส่งเสียงเป็นกลุ่มใน EDITOR ใน zsh จึงปิดการใช้งานแป้นพิมพ์ลัด?


23

.zshrcหน้าตาของฉันเป็นแบบนี้:

export EDITOR="/usr/bin/vim"

ตอนนี้เมื่อฉันเปิดเทอร์มินัลและป้อนแป้นพิมพ์ลัดctrlaเพื่อไปที่จุดเริ่มต้นของบรรทัดมันไม่ทำงาน แต่สตริง^A(หรือสตริงอื่น ๆ ขึ้นอยู่กับทางลัดที่ฉันป้อน) เข้าสู่เทอร์มินัล:

emlai:~ % ^A

การลบคำexportออกจาก.zshrcทำให้แป้นพิมพ์ลัดทำงานได้อย่างถูกต้อง:

EDITOR="/usr/bin/vim"

การส่งออกEDITORเป็นอย่างอื่นvimทำให้แป้นพิมพ์ลัดทำงานเช่นกัน:

export EDITOR="/usr/bin/nano"

ทำไมสิ่งนี้ถึงเกิดขึ้น

ฉันทดสอบสิ่งนี้ด้วยbashเช่นกันและแป้นพิมพ์ลัดจะทำงานอย่างถูกต้องในทุกกรณีที่นั่น

คำตอบ:


27

zshเหมือนกับเชลล์ที่ทันสมัยส่วนใหญ่มีตัวเลือกระหว่างการแม็พคีย์บอร์ดที่ต่างกันสองแบบสำหรับการแก้ไขบรรทัดคำสั่ง: viหนึ่งและemacsหนึ่ง ในเชลล์บางอัน (เช่นtcshหรือreadlineตามที่ต้องการbash) เชลล์emacsหนึ่งเป็นค่าเริ่มต้นและอาจเป็นที่คุณคาดหวัง

ด้วยzshคุณจะได้รับemacsโหมดเป็นค่าเริ่มต้นยกเว้น$EDITORหรือ$VISUALมีvi(ถ้าคุณเป็นvi/ nvi/ vim/ elvisผู้ใช้ (แม้ว่าจะเป็นvimacsและถ้า$EDITORเป็น... ) จะถือว่าคุณชอบโหมด)/home/victor/bin/emacszshvi

หากต้องการบังคับโหมดเฉพาะโดยไม่คำนึงถึงค่าของ$EDITORให้เพิ่ม:

bindkey -e # for emacs
bindkey -v # for vi

หรือเทียบเท่าพกพาของพวกเขามากขึ้น:

set -o emacs
set -o vi

~/.zshrcที่คุณ ดู

info -f zsh -n Keymaps

สำหรับรายละเอียด


น่าสนใจ มีเหตุผลที่จะใช้bindkeyมากกว่าset -o?
สุดยอด

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