获取原始字符串值

时间:2016-06-03 12:25:47

标签: vim

在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的转换功能?

1 个答案:

答案 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'