问题的出现
最近在用最近通过Xshell连接远程服务器时,然后使用Vim修改文件时会莫名其妙的卡死,一开始我还没注意,重新启动终端之后,可以继续使用。直到有一天我开着两个终端的时候,Vim又卡着不动了。这让我很烦,所以我查阅了一下资料,终于找到了源头所在。
原因
既然是Vim卡住了那就查查Vim有什么BUG吧,结果上网搜了一圈发现原来是远程终端的问题,根本就不关Vim的事,它只是躺着中枪了而已(▽),实际上就是不小心按下了快捷键 Ctrl+S 导致的,为什么常常是Vim卡住呢?那是因为很多人习惯了在 Windows上 的保存快捷键,写写文档总是习惯性按下快捷键 Ctrl+S 保存一下,来避免程序突然崩溃导致文档丢失,这就解释了为什么出问题的总是Vim,因为使用Vim编辑文本有时会习惯性的按下 Ctrl+S 保存,而在执行Shell命令是很小的概率会按 Ctrl+S,所以大多数人卡住往往是在使用Vim的时候。
解决方法
可是快捷键 Ctrl+S 为什么会导致终端卡死呢?实际上这个快捷键的含义是“阻断向终端输出内容”,很多人说这个快捷键的作用是暂停终端,我个人感觉这种说法并不准确,实际是上终端并没有暂停,按下 Ctrl+S快捷键后,你依然可以像终端发送命令,终端也会正常执行,只是不会将反馈内容和结果显示在终端上而已,这个特性可以用来暂停显示快速滚动输出的内容,比如在编译大型项目的时候。
解除这种状态的方法很简单,按下快捷键 Ctrl+Q 就可以“恢复向终端输出内容”,只是很多时候我们并不知道,以为是终端卡死了然后错杀了程序!