我知道如果我按esc然后输入:q!
,我可以退出vim
编辑器,因为这个问题。
但是,标准约定是当按下ctrl+时程序退出,这会将 a 发送到当前正在运行的进程。cSIGINT
例如,top
、tail -f
和ping
都遵循此约定。
我的问题是这样的:为什么不vim
遵循这个既定的惯例?是有历史原因,还是另有原因?
在我看来,如果它像其他所有事情一样遵循这个标准约定,将会避免新用户的很多困惑。
(当我们这样做时,为什么会这样SIGINT
而不是SIGTERM
首先呢?)
答案1
我的问题是:为什么 vim 不遵循这个既定的约定?是有历史原因,还是另有原因?
因为vim
遵循另一个古老且完善的约定,其中交互式程序中的 Control-C 将中止当前命令,而不是整个程序。交互式 shell 也遵循此约定 - Control-C 不会杀死您的 shell,但会杀死它正在运行或将要运行的命令。
不遵循该约定的程序通常会尝试通过捕获SIGINT
并询问用户“您真的要退出吗”或“使用 quit 退出”等来减轻恐惧,这将它们从讨厌变为烦人。
Control-C 的其他非常完善的约定是将其用作其他命令的前缀(如在 emacs 启发的程序中,Control-G 充当 Control-C 的角色)或将所选内容复制到剪贴板。