【问题标题】:Vim map esc key in insert mode without losing undo sequence?Vim map esc 键在插入模式下不会丢失撤消序列?
【发布时间】:2017-11-19 15:26:52
【问题描述】:

我有一个关于 Vim 的问题。到目前为止,我将 map 理解为相等的命令。事情是这样的。我将imap <c-o> <esc>o 放在我的.vimrc 文件中以开始新行。至于为什么不只是映射<CR> 的原因是我按照Drew Neil 的建议使用esco 命令替换,以便我可以逐行使用undo 命令行。但是,当我使用<c-o> 开始一行时,undo 命令不起作用,这意味着即使我映射了<esc>,Vim 也不会切换模式!我不知道是 Vim 的特性还是 bug?如果您能在某些方面帮助我,我将不胜感激。

【问题讨论】:

  • 我试过这个,撤销对我有用。您是否在 vimrc 的其他地方重新映射了 o ? 99% 的时间你应该使用inoremap 而不是imap。前者将使用默认映射,而后者则尊重自定义映射。
  • 你好安德鲁。我按照你的建议失败了:(。我想你可能不明白我的意思,'撤消'实际上对我有用。问题是,我写了一行,开始一个新行,完成,再次开始一个新行. 并切换到正常模式按“撤消”命令,Vim 只是删除我在插入模式下键入的所有行而不是一行。(我认为模式切换应该在我按 '' 时发生。
  • 哦,我现在明白了,我希望 :)。我已经给你一个解决方案作为答案。

标签: vim key-bindings


【解决方案1】:

您可以使用inoremap <c-o> <c-g>u<esc>o 来获得所需的行为。 <c-g>u 中断当前撤消序列(请参阅:h i_CTRL-G_u)。

我实际上从来没有想过为什么在插入映射中使用<esc> 不能算作破坏撤消序列。我当然可以推理为什么,但这样做在 SO 答案中很危险,所以我不会:)

编辑添加:更简单的是:inoremap <c-o> <c-g>u<cr>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2012-04-26
    • 2012-02-03
    • 2017-03-14
    • 2015-03-09
    相关资源
    最近更新 更多