Я пытаюсь поменять местами клавиши точки с запятой и двоеточия.
Я использую эту функцию
func! FUNC_Remap(lhs, rhs)
" Function which remaps keys in all modes
"
":echom 'inoremap '.a:lhs.' '.a:rhs
"http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-_Tutorial_(Part_1)
" CHAR MODE ~
" <Space> Normal, Visual, Select and Operator-pending
"n Normal
"v Visual and Select
"s Select
"x Visual
"o Operator-pending
"! Insert and Command-line
"i Insert
"l ":lmap" mappings for Insert, Command-line and Lang-Arg
"c Command-line
"--------------
" Normal Mode
:exec 'noremap '.a:lhs.' '.a:rhs
" Visual and Select Mode
:exec 'vnoremap '.a:lhs.' '.a:rhs
" Display select mode map
:exec 'snoremap '.a:lhs.' '.a:rhs
" Display visual mode maps
:exec 'xnoremap '.a:lhs.' '.a:rhs
" Operator Pending Mode
:exec 'onoremap '.a:lhs.' '.a:rhs
" Insert and Replace Mode
:exec 'inoremap '.a:lhs.' '.a:rhs
" Language Mode
:exec 'lnoremap '.a:lhs.' '.a:rhs
" Command Line Mode
:exec 'cnoremap '.a:lhs.' '.a:rhs
endfu
command! -nargs=* CMDREMAP call FUNC_Remap(<f-args>)
func! FUNC_Swap(lhs, rhs)
:call FUNC_Remap(a:lhs, a:rhs)
:call FUNC_Remap(a:rhs, a:lhs)
endfu
command! -nargs=* CMDSWAP call FUNC_Swap(<f-args>)
:CMDSWAP : ;
который работает во всех случаях, кроме режима замены.
Читая документацию, я говорю, что inoremap должен покрывать режим замены, но когда я набираю r; в обычном режиме я заменяю текущий символ точкой с запятой вместо двоеточия, к которому он должен был быть сопоставлен. Это довольно раздражает, когда везде в другом месте сопоставление работает.
Как сделать так, чтобы переназначение клавиш работало в режиме замены?
решение1
Заменить режимэто вариант режима вставки, который заменяет существующие символы напечатанным текстом. Замена одного символа, выполненная с помощью, r
незаменить режим, и это не специальный режим; поэтому :map
команды там не применяются. Хороший трюк — переназначить всю комбинацию команда + символ:
nnoremap r; r:
nnoremap r: r;
В качестве альтернативы вы можете использовать :lmap
; cp. :help r
:
|:lmap| mappings apply to {char}. The CTRL-^ command in Insert mode can be used to switch this on/off