执行正确的命令,但不执行后期映射

时间:2019-02-11 17:16:24

标签: vim

直接执行的命令可以正常工作。但是当它映射到某个键时,它会报告语法错误。

当我执行以下执行命令时,它会按预期工作

:silent execute "normal! ^:s/ ".expand("<cWORD>")." //g\<cr>"

但是当我将其映射到某个关键点时

:nnoremap ,g :silent execute "normal! ^:s/ ".expand("<cWORD>")." //g\<cr>"

然后,当我调用映射时,它会出现以下错误:

E114: Missing quote: " //g\
E15: Invalid expression: "normal! ^:s/ ".expand("<cWORD>")." //g\

1 个答案:

答案 0 :(得分:2)

这是一个转义的问题。 <cr>是按字面意义解释的(前面的反斜杠在这里无济于事),因此Vim尚未看到最后的",并抱怨缺少引号。将<转换为<lt>是这里的解决方案。

此外,您还希望<cr>:execute解释(它在双引号内,并以反斜杠开头),但是现在谁在结论整个:execute "...."?需要另一个<cr>

:nnoremap ,g :silent execute "normal! ^:s/ ".expand("<cWORD>")." //g\<lt>cr>"<cr>

但是,我认为整个方法太麻烦了;很少从:normal进入Ex模式是一个好主意。

因此,您需要^才能获得该行中的 first 单词;您可以直接从正常模式开始直接执行此操作:

:nnoremap ,g ^:execute "s/ ".expand("<cWORD>")." //g"<cr>

有了这个,您只需要通过:execute进行一轮插值。看起来好多了,对吧?!