Ниже приведены настройки с измененным курсором и подсказкой, показывающей, в каком режиме вы находитесь. Вы можете изменить DEFAULT_VI_MODE
либо на, viins
либо на vicmd
. Просто вставьте ниже, .zshrc
чтобы начать:
# Prefer vi shortcuts
bindkey -v
DEFAULT_VI_MODE=viins
KEYTIMEOUT=1
__set_cursor() {
local style
case $1 in
reset) style=0;; # The terminal emulator's default
blink-block) style=1;;
block) style=2;;
blink-underline) style=3;;
underline) style=4;;
blink-vertical-line) style=5;;
vertical-line) style=6;;
esac
[ $style -ge 0 ] && print -n -- "\e[${style} q"
}
# Set your desired cursors here...
__set_vi_mode_cursor() {
case $KEYMAP in
vicmd)
__set_cursor block
;;
main|viins)
__set_cursor vertical-line
;;
esac
}
__get_vi_mode() {
local mode
case $KEYMAP in
vicmd)
mode=NORMAL
;;
main|viins)
mode=INSERT
;;
esac
print -n -- $mode
}
zle-keymap-select() {
__set_vi_mode_cursor
zle reset-prompt
}
zle-line-init() {
zle -K $DEFAULT_VI_MODE
}
zle -N zle-line-init
zle -N zle-keymap-select
# Optional: allows you to open the in-progress command inside of $EDITOR
autoload -Uz edit-command-line
bindkey -M vicmd 'v' edit-command-line
zle -N edit-command-line
# PROMPT_SUBST enables functions and variables to re-run everytime the prompt
# is rendered
setopt PROMPT_SUBST
# Single quotes are important so that function is not run immediately and saved
# in the variable
RPROMPT='$(__get_vi_mode)'
Примечание: я проверял это только в Terminal.app (2.7.3) на MacOS (10.12.6) с помощью zsh (5.3.1). Кроме того, если вы когда-либо добавите, edit-command-line
режим будет установлен правильно.
~
персонажа вставляют, когда я нажимаюDelete
клавишуzsh
. Я задал вопрос об этом здесь: superuser.com/questions/997593/…