Заставить курсор в обычном режиме VIM сидеть между символами, а не над ними
Мне бы очень хотелось, чтобы курсор VIM в обычном режиме мог вести себя так же, как в режиме вставки: строка между двумя символами. Так, например:
- Ввод vd не будет иметь никакого эффекта, потому что ничего не было выбрано
- р и Р были бы одинаковыми
- я и а были бы одинаковыми
Что-нибудь подобное было сделано? Я не смог найти его.
3 ответа
Просто для забавы, вот как вы могли бы достичь желаемого поведения в приведенных вами примерах:
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
?
: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 имеет отличный учебник по этой теме.
sidenote: курсор в vim всегда находится в символе, а не между ними. это просто выглядит "между ними", так как это небольшая вертикальная полоса, привязанная к левой стороне символа.
Для версии гнома>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
Вы получите блочный курсор в обычном режиме и тонкий в режиме вставки.