Vim - 修改命令行中的光标

3

我想将光标从块状变为竖杠(I型光标)当进入Vim命令行时。

我尝试使用以下单独的代码:

" with these two codes nothing happens
autocmd CmdlineEnter * let &t_SI
autocmd CmdlineEnter * execute &t_SI

" this last one  produce "E20: Mark not set" error
autocmd CmdlineEnter * execute '!echo -ne "' . &t_SI . '"'

这种情况是否可能,或者vim在命令行中使用与正常模式相同的光标。
我已将正常模式(&t_EI)更改为竖杠,在这种情况下,命令行中的光标是竖杠。

无论正常模式如何,命令行中的光标是否可以更改?
有人能帮忙吗?

2个回答

3

在 Vim 8.2.0258 或更新版本中,可以使用 echoraw() 函数。

autocmd CmdlineEnter * call echoraw(&t_SI)
autocmd CmdlineLeave * call echoraw(&t_EI)

1
这是更好的解决方案。 - undefined
1
我在 autocmd VimEnter 中使用了这个答案的块状光标 (&t_EI),因为当我从 bash 打开 vim 时,光标会继承自 bash 的光标形状,并且在 vim 启动时始终是一个"行"而不是"块"。 - undefined

1
我已经找到了解决方案。
原来可以在进入和离开cmd行时更改光标。
这段代码将在进入cmd行时将光标更改为竖线,并在离开cmd行时将其恢复为块。
" vim cursor escape codes for the terminal emulator
" INSERT (&t_SI)  - vertical bar (I-beam)
" REPLACE (&t_SR) - underscore
" VISUAL (&t_EI)  - block
let &t_SI = "\<Esc>[5 q"
let &t_SR = "\<Esc>[3 q"
let &t_EI = "\<Esc>[1 q"

" set cursor to vertical bar when entering cmd line and
" revert cursor back to block when leaving cmd line
autocmd CmdlineEnter * execute 'silent !echo -ne "' . &t_SI . '"'
autocmd CmdlineLeave * execute 'silent !echo -ne "' . &t_EI . '"'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接