Переназначение Vim в режиме вставки

Есть ли возможность переназначить в режиме вставки.

Например, я переназначил jk на <ESC> в режиме вставки с помощью inoremap jk <esc>, поэтому я могу легко выйти из обычного режима. Но когда я нахожусь в режиме вставки с :pastetoggle, мое переназначение больше не работает. Я искал помощь с :help map-modes, но не смог найти ничего, связанного с режимом вставки.


person Till Friebe    schedule 04.09.2016    source источник


Ответы (4)


От 1_:

[...]
When the 'paste' option is switched on (also when it was already on):
        - mapping in Insert mode and Command-line mode is disabled
[...] 
person romainl    schedule 04.09.2016

Одним из способов обхода того факта, что переназначения не работают в режиме вставки, является использование vim-unimpaired. команды yo и yO для вставки. По крайней мере, таким образом, выход из режима вставки с набором вставки также установит nopaste, и вы не окажетесь в режиме вставки, когда вы этого не хотите.

person YPCrumble    schedule 03.02.2017

Это может помочь вам. Это не помогло мне, так как, увы, я использую экран GNU, и он не поддерживает экранные коды вставки xterm в квадратных скобках.

(из https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode)

:inoremap jj <esc>
:inoremap jk <esc>
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

" This resets paste mode after insert
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  echo "DONE"
  return ""
endfunction
person Neil McGill    schedule 05.02.2021

Вот еще один подход, который я нашел. Когда вы нажимаете escape, чтобы выйти из режима вставки, он автоматически отключает режим вставки. Также цвета помогают узнать, в каком режиме вы находитесь. hth.

" Mode Indication -Prominent!
function! InsertStatuslineColor(mode)
  if a:mode == 'i'
    hi statusline ctermfg=red
  elseif a:mode == 'r'
    hi statusline ctermfg=blue
  else
    hi statusline ctermfg= magenta
  endif
endfunction

function! InsertLeaveActions()
  hi statusline ctermfg=green
  set nopaste
endfunction

au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertLeave * call InsertLeaveActions()

" to handle exiting insert mode via a control-C
inoremap <c-c> <c-o>:call InsertLeaveActions()<cr><c-c>

" default the statusline to green when entering Vim
hi statusline ctermfg=green

" have a permanent statusline to color
set laststatus=2
person Neil McGill    schedule 09.02.2021