อีกวิธีหนึ่งในการเปลี่ยนรูปร่างเคอร์เซอร์ระหว่าง I-beam และ block (สำหรับขีดล่างใช้\033[4 q
) ~/.zshrc
เพิ่มไปของคุณ
zle-keymap-select () {
if [ $KEYMAP = vicmd ]; then
printf "\033[2 q"
else
printf "\033[6 q"
fi
}
zle -N zle-keymap-select
zle-line-init () {
zle -K viins
printf "\033[6 q"
}
zle -N zle-line-init
bindkey -v
ดัดแปลงจากhttps://bbs.archlinux.org/viewtopic.php?id=95078 ทดสอบใน gnome-terminal 3.22
ปรับปรุง
แต่การแก้ปัญหาอีกครั้งเพื่อให้การเปลี่ยนแปลงรูปร่างเคอร์เซอร์สามารถพบได้ที่นี่ เห็นได้ชัดว่าอันนี้ใช้งานได้กับ iTerm2 ซึ่งฉันไม่มีวิธีทดสอบ แต่เพิ่มไว้ที่นี่ในกรณีที่มันมีประโยชน์สำหรับคนอื่น นอกจากนี้สุดท้ายของคุณ~/.zshrc
จะเป็น
function zle-keymap-select zle-line-init
{
# change cursor shape in iTerm2
case $KEYMAP in
vicmd) print -n -- "\E]50;CursorShape=0\C-G";; # block cursor
viins|main) print -n -- "\E]50;CursorShape=1\C-G";; # line cursor
esac
zle reset-prompt
zle -R
}
function zle-line-finish
{
print -n -- "\E]50;CursorShape=0\C-G" # block cursor
}
zle -N zle-line-init
zle -N zle-line-finish
zle -N zle-keymap-select
CTRL+C
ในขณะที่อยู่ในโหมดคำสั่ง vi พร้อมท์จะรีเซ็ต แต่ระบุว่าคุณอยู่ในโหมดคำสั่งเมื่อคุณอยู่ในโหมดแทรกจริงๆzle-line-init
ควรเปลี่ยนตัวบ่งชี้เป็นโหมดแทรก ด้วยเหตุผลบางอย่าง$KEYMAP
ไม่ได้รับการอัพเดตอย่างถูกต้องเมื่อเรียก zle-line-init