使 VIM 正常模式光标位于字符之间而不是字符上

使 VIM 正常模式光标位于字符之间而不是字符上

如果 VIM 光标在正常模式下可以像在插入模式下一样,我会非常高兴:两个字符之间有一条线。例如:
- 输入 vd 不会有任何效果,因为没有选择任何内容
- p 和 P 相同
- i 和 a 相同

有做过类似的事情吗?我还没找到。

答案1

只是为了好玩,下面是如何根据您提供的示例实现所需行为的方法:

set selection=exclusive
set virtualedit+=onemore
" this is just a crude proof of concept with theoretically addressable weak points
nnoremap vd <Nop>
noremap p P
noremap a i
" make i<Esc> not move the cursor
inoremap <Esc> <Right><Esc>

但我几乎看不出有什么意义。能解释一下你为什么要这样做吗?例如,vd相关性如何,为什么不直接使用i和从不a

答案2

:set guicursor+=n:ver1

会使光标变细一个像素,因此您仍然可以从视觉上区分正常模式和插入模式。如果您希望它看起来与插入模式完全一样:

:se gcr+=n:ver25


:help guicursor关联)给你这个:

This option tells Vim what the cursor should look like in different
modes.

http://vim.wikia.com/wiki/Configuring_the_cursor对这个主题有一个很棒的教程。

旁注:vim 中的光标是总是在字符处,而不是“在中间”。它看起来只是“在中间”,因为它是一个小的垂直条,绑定到字符的左侧。

答案3

对于 gnome 版本>3.15
将其添加到您的 ~/.vimrc。

if has("autocmd")
  au VimEnter,InsertLeave * silent execute '!echo -ne "\e[2 q"' | redraw!
  au InsertEnter,InsertChange *
\ if v:insertmode == 'i' | 
\   silent execute '!echo -ne "\e[6 q"' | redraw! |
\ elseif v:insertmode == 'r' |
\   silent execute '!echo -ne "\e[4 q"' | redraw! |
\ endif
au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!
endif

您将在正常模式下获得一个块光标,在插入模式下获得一个细光标。

相关内容