当前位置: 首页 > news >正文

Vim、Xshell、远程终端莫名卡死的原因

前言

最近通过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 就可以“恢复向终端输出内容”,只是很多时候我们并不知道,以为是终端卡死了然后错杀了程序!

附注

关于这个问题,Vim文档中“SECTION 32 - VIM ON UNIX”一节也给出了回答,有兴趣的小伙伴可以自己看一下:

32.1. I am running Vim in a xterm. When I press the CTRL-S key, Vim freezes. What should I do now?

vimdoc.sourceforge.net

相关文章:

  • 关于游戏中仓库类的设计
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • 神秘莫测的时间复杂度
  • 排序算法系列之(三)——略显神秘的快速排序
  • .bat批处理(六):替换字符串中匹配的子串
  • 操作指向类成员的指针需要了解的两个操作符-*和.*
  • VS2015调试dump文件时提示未找到xxx.exe或xxx.dll
  • 结构体sockaddr、sockaddr_in、sockaddr_in6之间的区别和联系
  • 简述TCP三次握手和四次挥手流程
  • 智能指针(零):分类及简单特性
  • 智能指针(一):auto_ptr浅析
  • 智能指针(二):shared_ptr浅析
  • 智能指针(四):unique_ptr浅析
  • Lua中关于table对象引用传递的注意事项
  • VS2015调试dump文件时提示打不开KERNELBASE.dll
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • docker python 配置
  • JavaScript的使用你知道几种?(上)
  • Vue.js-Day01
  • 蓝海存储开关机注意事项总结
  • 前端攻城师
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 转载:[译] 内容加速黑科技趣谈
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #if和#ifdef区别
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (0)Nginx 功能特性
  • (3)选择元素——(17)练习(Exercises)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C语言)fread与fwrite详解
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (算法)N皇后问题
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)大型网站架构演变和知识体系
  • .gitignore文件_Git:.gitignore
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net的C#语言取月份数值对应的MonthName值
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @property @synthesize @dynamic 及相关属性作用探究
  • [2016.7 day.5] T2
  • [Android] 修改设备访问权限
  • [Android]Tool-Systrace
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [Contest20180313]灵大会议
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [Flutter]WindowsPlatform上运行遇到的问题总结
  • [IE9] 解决了傲游、搜狗浏览器在IE9下网页截图的问题
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏
  • [LeetCode] Longest Common Prefix 字符串公有前序
  • [LeetCode][138]【学习日记】深拷贝带有随机指针的链表