2

Мне бы очень хотелось, чтобы курсор VIM в обычном режиме мог вести себя так же, как в режиме вставки: строка между двумя символами. Так, например:
- Ввод vd не будет иметь никакого эффекта, потому что ничего не было выбрано
- р и Р были бы одинаковыми
- я и а были бы одинаковыми

Что-нибудь подобное было сделано? Я не смог найти его.

3 ответа3

4
: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 всегда находится на символе, а не на промежуточном. это просто выглядит «между ними», так как это небольшая вертикальная полоса, привязанная к левой стороне символа.

2

просто для забавы, вот как вы могли бы достичь желаемого поведения в приведенных вами примерах:

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?

0

Для версии гнома> 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

Вы получите блочный курсор в обычном режиме и тонкий курсор в режиме вставки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .