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


15

使用vi时,可以使用Ctrl+ C代替更传统的退出插入模式Esc。是否存在不希望使用前者而不是后者的情况?除了最佳实践,它是否有其他突破?


意外击中前者是不可取的,这会使您产生类似错误的信息Type :quit<Enter> to exit Vim并使我成为Google的后盾。击中会使i您立即回到插入模式。
Noumenon

Answers:


9

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


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


很高兴知道,但是我的问题是关于退出插入模式。
MDMarra 2012年

@MDMarra Doh,误解了您的问题。插入模式仍然不同:请参阅更新的答案。
2012年

1
这是我必须处理的最重要的区别:具有可视块模式的多行插入适用于Esc,而不适用于Cc。
迷恋

4

我想你的意思vim不是vi

这确实适用于vim,尽管我不会使用它,除非我100%确信永远不会接触非Linux操作系统。原因是其他OS可能有其自己的实现vi,而没有实现,而您可能会发现,vi在这些平台上运行时,Ctrl-C具有其自己的传统行为:中断进程并使终端处于怪异状态。


3
您能否指出vi今天仍然无法解决的任何实现Ctrl-C?看到我的答案的真正区别。
2012年

2

如果您指的是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.

您可以定义映射CTRL-C<esc>,那么就会触发InsertLeave

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.