我尝试编写vimscript,当用户按下<cr>
(正常模式和插入模式)时会执行某些操作,但不会影响{{1}的正常效果},即插入换行符并将光标移动到下一行的右侧位置(尊重智能缩进或任何其他缩进模式)。
有什么建议吗?
答案 0 :(得分:1)
尝试在可能的情况下省略*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
再次被替换。
答案 1 :(得分:0)
映射的右侧需要以<cr>
开头。像这样:
:imap <cr> <cr>sometext
然后它不会递归地触发映射。
来源: http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-Tutorial%28Part_1%29#Nested_.28recursive.29_maps
如果地图的{rhs}以{lhs}开头,则不会以递归方式替换它。例如,以下命令不会为gq:
创建递归映射:nmap gq gq