Reasignar claves en modo reemplazar en vim

Reasignar claves en modo reemplazar en vim

Estoy intentando intercambiar mis claves de punto y coma y dos puntos.

Yo uso esta función

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 : ;

que funciona en todos los casos excepto en el modo de reemplazo.

Al leer la documentación, dice que inoremap debería cubrir el modo de reemplazo, pero cuando escribo r; en modo normal reemplazo el carácter actual con un punto y coma en lugar de los dos puntos a los que debería haberse asignado. Es bastante molesto cuando el mapeo funciona en todos los demás lugares.

¿Cómo consigo que la reasignación de claves funcione en el modo Reemplazar?

Respuesta1

Modo de reemplazoes la variante del modo de inserción que reemplaza los caracteres existentes con el texto escrito. El reemplazo de un solo carácter realizado con rno esmodo de reemplazo, ni es un modo especial; por lo tanto, los :mapcomandos no se aplican allí. Un buen truco es reasignar toda la combinación comando + carácter:

nnoremap r; r:
nnoremap r: r;

Alternativamente, puedes usar :lmap; cp. :help r:

      |:lmap| mappings apply to {char}.  The CTRL-^ command
      in Insert mode can be used to switch this on/off

información relacionada