gpt4 book ai didi

python - 根据 vi 模式更改交互式 IPython 控制台中的光标形状

转载 作者:行者123 更新时间:2023-12-04 17:35:04 26 4
gpt4 key购买 nike

我可以在交互式 IPython 控制台中从 emacs 更改为 vi 绑定(bind),方法是将以下内容添加到 ~/.ipython/profile_deafult/ipython_config.py :

c.TerminalInteractiveShell.editing_mode = 'vi'

目前,光标始终是 I 形梁 ( |)。有没有一种方法可以让光标在 vi 的正常模式下改变形状为 block ,然后在插入模式下变回 I 形?

我的终端仿真器(终结器,基于 gnome-terminal)支持在光标格式之间切换,因为我可以通过将以下内容添加到我的 ~./zshrc 来启用 zsh 中的行为( from the Unix SE):
bindkey -v
# Remove delay when entering normal mode (vi)
KEYTIMEOUT=5
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ $KEYMAP == vicmd ]] || [[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ $KEYMAP == main ]] || [[ $KEYMAP == viins ]] || [[ $KEYMAP = '' ]] || [[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
# Start with beam shape cursor on zsh startup and after every command.
zle-line-init() { zle-keymap-select 'beam'}

最佳答案

根据 this comment in the GitHub issue (和 this update ),您可以将以下代码段添加到 ~/.ipython/profile_default/ipython_config.py在插入和正常模式之间切换时使光标改变形状。

import sys
from prompt_toolkit.key_binding.vi_state import InputMode, ViState


def get_input_mode(self):
return self._input_mode


def set_input_mode(self, mode):
shape = {InputMode.NAVIGATION: 1, InputMode.REPLACE: 3}.get(mode, 5)
raw = u'\x1b[{} q'.format(shape)
if hasattr(sys.stdout, '_cli'):
out = sys.stdout._cli.output.write_raw
else:
out = sys.stdout.write
out(raw)
sys.stdout.flush()
self._input_mode = mode


ViState._input_mode = InputMode.INSERT
ViState.input_mode = property(get_input_mode, set_input_mode)
c.TerminalInteractiveShell.editing_mode = 'vi'

关于python - 根据 vi 模式更改交互式 IPython 控制台中的光标形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com