Vim正常!发送文字<Space>字符串而不是空格字符

Tyl*_*and 2 vim

我不确定我在这里做错了什么.

:normal! I###<Space><Esc>
Run Code Online (Sandbox Code Playgroud)

当我对一个单词执行此命令时,我想要的最终结果是:

### word
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了这个:

###<Space>word
Run Code Online (Sandbox Code Playgroud)

And*_*Ray 6

Vim :normal是一场噩梦,任何事情都要复杂得多.我不记得为什么,但这是获得你想要的最简单方法.你需要在传递给执行的字符串中转义<.

execute "normal! I###\<Space>\<Esc>"
Run Code Online (Sandbox Code Playgroud)

编辑:Vim并没有真正解释原因,但是 :help normal

        An alternative is to use |:execute|, which uses an
        expression as argument.  This allows the use of
        printable characters to represent special characters.
Run Code Online (Sandbox Code Playgroud)


Nel*_*ung 5

让我们首先解释一下vim命令:

  • :normal! 以正常模式运行其余命令
  • I 从行的开头进入插入模式 <shift> + i
  • ###<Space><Esc>- 从###<Space><Esc>字面上键入字符,因为我们处于插入模式(注意,如果你只是输入插入模式,然后输入###<space><esc>,你就会得到字面意思.)

当此命令完成时,您将注意到它仍然处于正常模式.这意味着您的命令可以省略<space><esc>并按字面输入空格:

:norm! I### 
Run Code Online (Sandbox Code Playgroud)

(最后一个哈希后有一个额外的空格)