使用 ctrl+c 而不是 esc 退出插入模式会破坏 vi 中的任何内容吗?

MDM*_*rra 17 vim vi

使用 vi 时,您可以使用Ctrl+C而不是更传统的Esc. 是否存在不希望使用前者而不是后者的情况?除了最佳实践之外,它是否会破坏任何东西?

jw0*_*013 11

Ctrl-C并且Escvi/vim在大多数模式下都不相同,包括插入模式。区别在于Esc触发器缩写而Ctrl-c不是触发器缩写。这对您是否重要取决于您或您使用的任何插件是否使用缩写。


请注意,它是安全的假设EscCtrl-C意味着同样的事情vim。来自同一站点的另一个示例是退出块插入模式时(不是 in vi)。


wis*_*cky 5

如果您指的是vim,则略有不同。CTRL-C不检查缩写,也不会触发InsertLeave事件。因此,您或插件已经定义了任何autocmd依赖于 的语句InsertLeave,它们不会被触发。

从官方文档http://vimhelp.appspot.com/insert.txt.html

<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode.  Finish
                abbreviation.

CTRL-C          Quit insert mode, go back to Normal mode.  Do not check for
                abbreviations.  Does not trigger the InsertLeave autocommand
                event.
Run Code Online (Sandbox Code Playgroud)

您可以为CTRL-Cto定义一个映射<esc>,然后它将触发InsertLeave