【问题标题】:How do I map return in insert to go to normal mode and then do the o action如何在插入中映射返回以进入正常模式,然后执行 o 操作
【发布时间】:2016-10-24 20:45:30
【问题描述】:

我目前正在使用vim,我想将Return键映射(我在mac上。我相信这在maps中通常由<ENTER>表示)以离开插入模式,然后执行@ 987654322@ 行动。我试图放这样的东西

imap <ENTER> <ESC>o

但是,这并没有执行所需的操作。任何帮助都会很棒。

编辑:所需的操作是,如果我在插入模式下键入,则每一新行都是一个新操作。因此,如果我在正常模式下按撤消,它只会撤消最后一行,而不是在插入模式下键入的所有行。

【问题讨论】:

  • 无法复制,对我来说效果很好。你能解释一下到底出了什么问题吗?另外,我只是将其作为评论发布,因为这只是一个猜测,但请尝试:inoremap &lt;cr&gt; &lt;esc&gt;o,看看是否效果更好。
  • @DJMcMayhem 这对我也不起作用。如果我处于插入模式并输入 Code .... &lt;CR&gt; More Code... 我希望 u 撤消只是 More Code... 不是所有输入的内容。当我按下u 时,这两张地图都会撤消一切。

标签: vim


【解决方案1】:

我不确定为什么这不起作用。我不知道为什么转义和使用o 打开换行符不会添加到更改列表中。然而,幸运的是,有一个命令可以将文本的当前状态显式添加到更改列表中。该命令是(在插入模式下)&lt;C-g&gt;u。来自:h i_ctrl-g_u

CTRL-G u    break undo sequence, start new change        *i_CTRL-G_u*

方便的是,这个命令甚至不会离开插入模式!综上所述,您正在寻找的映射是:

:inoremap <cr> <C-g>u<cr>

或者,你也可以这样做

:inoremap <cr> <cr><C-g>u

撤消后会留下一个空白行。

【讨论】:

  • 谢谢!虽然这不是我正在寻找的命令,但它的功能与我想要的完全一样。如果我用.vimrc 写它,我会写inoremap &lt;cr&gt; &lt;C-g&gt;u&lt;cr&gt;吗?
  • @EliSadoff 很高兴我能帮上忙!是的,这就是你在.vimrc 中的写法。另外,仅供参考,如果您有更多与 vim 相关的问题,我们有一个 dedicated vim-site 您可以发布它们。
  • 谢谢!我不知道。我在这里和 SuperUser 之间进行了辩论并选择了这里,因为文本编辑器有时会在这里出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多