Попробуйте опустить *map
, где это возможно, и у вас не будет таких проблем. Это будет работать как ожидалось:
function s:DoSomething()
echom "Inside DoSomething"
return "\<CR>"
" return "\n" also works "
endfunction
inoremap <expr> <CR> <SID>DoSomething()
" If DoSomething function cannot be executed inside a textlock: "
inoremap <CR> <C-o>:call <SID>DoSomething()<CR><CR>
Обратите внимание на nore
, он предотвращает повторную замену <CR>
, возвращенного s:DoSomething
.