在vim中有string()
函数,它获取函数的字符串值:
let a = {'foo':'bar'}
echo string(a)
" => '{'foo':'bar'}'
但是我有一个我无法使用它的功能:
let obj = {'cmd':"iHello\<cr>World"}
execute 'normal! '.obj.cmd
" => works fine
execute 'nnoremap a :normal! '.obj.cmd
" => prints 'Hello' when pressing A once, 'HellHelloo\nrld' when pressing A twice. With \n
I mean a literal newline.
\n
是否存在使execute 'nnoremap a :normal! '.string(obj.cmd)
" => when pressing A, wants to jump to mark H (because of 'H)
正确解释nnoremap
的转换功能?
答案 0 :(得分:1)
暂时忘记string()
和对象,然后专注于那些
:exe
秒。
当您使用:normal
时,以下<CR>
将运行命令和
不要插入缓冲区。因此,如果您想使用:normal
,那么
需要使用<CR>
转义<C-V>
。请记住,映射是
就像你输入它们一样执行。
:execute 'nnoremap a :normal! iHello<C-V><CR>world<CR>'
请注意字符串末尾的<CR>
以完成:normal
命令。
但是,您在这里不需要:normal
。它没有完成任何事情,
你可以做得更直接:
:execute 'nnoremap b iHello<CR>world'