使命令行模式键入<Esc>和Ctrl命令


11

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

|below

我想在命令行模式下实现相同的行为。我的问题是我该如何对命令行模式说我要输入<Esc>。我想:norm cw""<Esc>P和其他一些变化,但我刚刚得到""<Esc>P的不是"below"

仍然与此相关,我想知道如何使命令行模式键入Ctrl命令。例如,我可以cw"<C-r>""<Esc>改为引用上述单词。但是然后我需要命令行为<C-r>我输入。我怎样才能做到这一点?


1
就像<C-x><C-e>在readline中可以在中编辑命令行一样$EDITOR<C-f>在Vim中您也可以打开命令行窗口。请参阅:help cmdline-window
romainl

Answers:


11

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

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

显示为:

:norm cw""^[P

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

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

显示为:

:norm cw"^R""

并得到与上述相同的结果。无需Esc在末尾包含额外的内容。


10

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

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

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


这也适用于Ctrl命令吗?我应该如何在命令中编写它们?
贡萨洛·里贝罗

是的,应该可以。您可以这样写:"\<C-{insert key}>"
EvergreenTree 2015年

2

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

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

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

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

1
我认为OP并不是要为命令行创建映射,而是要从命令行执行映射。
EvergreenTree
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.