我在我的 .bashrc 文件中有以下代码:
set -o vi
当我处于插入模式时,我希望我的光标呈现出管状形状;当我处于命令模式时,我希望我的光标呈现成块状形状。就像在Vim中将以下内容放入我的.vimrc文件中所实现的那样:
let &t_SI = "\e[6 q"
let &t_SR = "\e[4 q"
let &t_EI = "\e[2 q"
除此之外,在这种情况下,我希望在命令行上拥有相同的行为。
我在这里找到了对我的问题的部分答案 - https://unix.stackexchange.com/questions/22527/change-cursor-shape-or-color-to-indicate-vi-mode-in-bash - 由 @gogolb 编写。
以下是答案,复制:
#!/bin/bash
# Script "kmtest.sh"
TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
echo -ne "\033]12;Green\007"
else
echo -ne "\033]12;Red\007"
fi
export PS1="\u@\h \$(kmtest.sh)> "
不幸的是,如答案所解释的那样,示例脚本仅在回车后更改光标形状,而我想要的是在按<Esc>时更改光标形状(即当我更改模式时)。
我正在运行Linux本地终端应用程序,使用Bash 4.4.7和我的$ TERM变量设置为xterm-256color。此外,我不知道tmux是否对我所要求的有任何影响,但我理想情况下希望解决方案既适用于tmux会话内部也适用于外部。
解决方案
最终我自己发现了这个问题的答案,并在另一个我发布的问题中描述了它:
如何将补丁修补的GNU readline库正确链接到所有现有程序?
不用担心,解决方案不需要打补丁。 ;)
.inputrc
文件中时,在vim中(比如编辑文件时)光标也会变成管道符号。我不想要这个效果——你有什么办法可以防止这种情况发生吗? - andreas-hNextJump/jarvis
,并且在我的vimrc.local
文件中,我已经编写了let &t_SI = "\e[6 q"
等命令(请参见原始问题描述)...也许添加这些命令可以解决你的问题。 - jinscoe123