假设您要引用以下单词。如果|是光标位置,则可以在普通模式下使用cw""<Esc>P轻松引用该单词。

我的问题是如何对命令行模式说我要键入<Esc>。我尝试了:norm cw""<Esc>P和其他一些变体,但只得到了""<Esc>P而不是"below"。仍然与此相关的是,我想知道如何使命令行模式键入Ctrl命令。例如,我可以用cw"<C-r>""<Esc>引用上述单词。但随后我需要命令行为我输入<C-r>。我该怎么办?

评论

就像readline中有 来编辑$ EDITOR中的命令行一样,Vim中的也可以打开命令行窗口。参见:help cmdline-window。

#1 楼

<C-v>是您的寻找。它允许您输入文字字符(例如,文字Esc而不是字符串“ Esc”)而无需转义任何内容。

:norm cw""<C-v><Esc>P


显示为: />
:norm cw""^[P


并会做你想做的事(即引用这个词)。您也可以将其与其他<C-?>映射一起使用。例如,您的第二个请求:

:norm cw"<C-v><C-r>""


显示为:

:norm cw"^R""


,结果将相同如上所述。无需在末尾添加额外的Esc

#2 楼

这是因为<Esc>之类的特殊键不会在normal命令中转换,并且会像按那样对待。要解决此问题,可以使用exec命令。像这样:

:exec "norm cw\"\"\<Esc>P"


请注意,必须在引号和<Esc>之前加反斜杠,并且不能使用单引号而不是双引号。

评论


这也适用于Ctrl命令吗?我应该如何在命令中编写它们?

–贡萨洛·里贝罗(GonçaloRibeiro)
15年3月22日在17:05



是的,应该可以。您可以这样写:“ \

–EvergreenTree
15年3月22日在17:58



#3 楼

命令行模式不同;您不能在那里使用相同的(普通模式)编辑命令。您可以在:help c_CTRL-V上找到命令列表。

现在,有命令行窗口(:help command-line-window),可以从普通模式下的q:和命令行模式下的<C-F>输入。在该窗口中,您可以使用所有常规命令和映射,因此将成为选项1。

选项2是命令行模式的特殊映射。如我所说,您不能通过:normal等使用此方法。定义它们的关键是:help c_CTRL-\_e映射,该映射“评估{expr}并将整个命令行替换为结果”。这是一个仅在命令行末尾才能正常工作的简单示例:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>


评论


我认为OP并不是要为命令行创建映射,而是要从命令行执行映射。

–EvergreenTree
15年3月22日在18:50