如果 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
您将在正常模式下获得一个块光标,在插入模式下获得一个细光标。