首页 > 其他分享 >【解决方案】Sublime Text 4 按下 Esc 键后无法输入任何内容

【解决方案】Sublime Text 4 按下 Esc 键后无法输入任何内容

时间:2024-10-12 12:10:34浏览次数:1  
标签:键后 Vintage vi vim 按下 Esc Bram Text Sublime

在最后编辑博客内容时,我的 Sublime 版本为 4180。


我基本用 Sublime Text 4 替代了系统自带的 Notepad,我用它编辑任何东西(除了代码,手动狗头)。

开始我怀疑是 Package Control 安装了过多依赖导致的兼容性问题,但由于 Sublime 多次更新,我的 Package Control 再次从命令面板消失,
而它又没有影响需要赶 DDL 的工作,就一直拖着没有解决,因此它对我的纯文本编辑造成了很大的影响和困扰。

如果你也遇到了这个问题,这篇文章解决了一切关于 Sublime Text 更新后令你头疼的事,并解释了具体原因。

如果你的 Package Control 也消失了

我在外网查阅了大量论坛、Issue讨论和官方公告,整理出了所有有效的解决方案,请阅读这篇文章:【解决方案】Windows 环境 Sublime Text 4 中缺少 Package Control

如果你按下 Esc 后也无法键入任何内容

光标改变

image

解决方法

在删除 Packages 无果后,我的检索导向 Reddit 的这篇讨论 sublime press key "escape" can't type anything

  • 偏好设置 -> 设置
    Preferences -> Settings

  • Vintage 添加到用户设置(右栏)ignored_packages 字段中

    {
    	"ignored_packages":
    	[
    		"Vintage",
    	],
    }
    
  • 关闭所有 Sublime 窗口,重启程序

禁用它会有什么问题或丢失什么功能吗?

Vintage 是官方推出的开源 vi 模式编辑包,换言之是能在终端中编辑文件的文本编辑器,在没有 GUI 的操作系统中被广泛使用(如 Linux),它包含了许多与现代文本编辑器完全不同的快捷键。

如果你本身不知道 vi,禁用它不会丢失任何你需要的任何功能,开启它反而会降低你在 Sublime 的使用体验。

什么是 Vintage Mode

这是 Sublime Text 给出的官方文档 Vintage Mode,也可以阅读我经过泛读后与自身掌握知识结合的总结:

Vintage Mode 直译过来是 “复古模式”,它允许您将 vi 的命令模式与 Sublime Text 的功能(包括多项选择)结合起来。这是 Sublime HQ Pty Ltd 公开的 Vintage 仓库

如果你是 Sublime Text 的新用户,它默认是禁用的会存在于 ignored_packages 中。开启它时,如果你键入了 Esc 便会进入 vi 的命令模式

它包括大多数基本操作:d(delete/删除)、y(copy/复制)、c(change/更改)、gu(lower case/小写)、gU(upper case/大写)、g~(swap case/交换大小写)、g?(ROT13加/解密)、<(unindent/取消缩进) 和 >(indent/缩进) 等等。

它默认以插入模式启动,也就是我们正常的文本编辑模式,当我们键入 Escape,就会键入命令模式,可以通过在偏好设置的设置中用以下属性改变它:

// 默认: true, 设置为 false 即默认以命令模式启动 Sublime
"vintage_start_in_command_mode": true

在命令模式中,我们可以如终端中那样通过 h(向左移动)、j(向上移动)、k(向下移动)、l(向右移动) 操作光标,它们并没有单词实际意义,仅仅是为有意义的快捷键单词缩写妥协,并且是键盘上连续的四个按键。

在命令模式中,我们也可以通过 i(insert/在光标前插入)、a(append/在光标后插入)、o(open/在下一行插入)来恢复我们正常的文本编辑模式(插入模式)。

它在 Windows 和 Linux 中默认禁用了某些会冲突的被 Ctrl 修饰的快捷键,比如 Ctrl + R (Redo/重做),我们可以新增或修改偏好设置的设置来开启它:

// Windows/Linux 默认: false; MacOS 默认: true; 设置为 true 在 Windows/Linux 中启用
"vintage_ctrl_keys": true

vi 编辑器是什么?

如果你使用过 Linux 操作系统的话,那么很可能你使用过它。

在刀耕火种的年代,我们没有 IDE/IDEA,没有 Sublime Text/Notepad++,甚至没有带 GUI 的内置记事本程序。

但文本编辑的需求从未消失,vi 是 Unix 上的标准编辑器,直到在 20 世纪 90 年代末和 21 世纪初,它逐渐被开源程序 vim (vi imitation, 后改名为 improved) 替代,如今,在大部分人提及或在现代操作系统中使用 vi 命令时,已经默认是指 vim 编辑器了。

布拉姆·穆伦纳尔 (Bram Moolenaar) 和 vim

相信不少编码从业者看过2023年8月份 编辑器之神Vim之父,Bram Moolenaar逝世 的新闻,vim 正是这位杰出的荷兰软件工程师所创造的,

他开源社区做出了卓越的贡献,并以一个技术者的身份将一生致力于乌干达非政府组织 ICCF Holland (一个支持乌干达艾滋病患者的慈善组织)。

他将 vim 设计为一款可自由分发的开源慈善软件,每次用户下载 Vim 时,系统都会提示他们考虑向 ICCF Holland 捐款。

如果你安装了 vim,或在现代化的终端中(如 Vercel 开源的 Hyper)直接输入 vi -v,它会用国际化的文本请求我们 “帮助乌干达的可怜儿童!”。

VIM - Vi IMproved
~
~                                        版本 9.0.1403
~                                   维护人 Bram Moolenaar 等
~                               Vim 是可自由分发的开放源代码软件
~
~                                    帮助乌干达的可怜儿童!
~                        输入  :help iccf<Enter>       查看说明
~
~                        输入  :q<Enter>               退出
~                        输入  :help<Enter>  或  <F1>  查看在线帮助
~                        输入  :help version9<Enter>   查看版本信息

但很遗憾如我们看到的新闻,2023年8月3日,Bram Moolenaar 因病离开了人世,这是其家属 2023年8月5日 发布的 Message 原文翻译和公告链接:
Message from "vim_announce" on Google Group

# 通过谷歌引擎翻译,如有不对还请见谅。

亲爱的大家,

我们怀着沉重的心情通知大家,Bram Moolenaar 于 2023 年 8 月 3 日去世。Bram
的病情在过去几周内迅速恶化。Bram

一生的大部分时间都奉献给了 VIM,他为你们加入的 VIM 社区感到非常自豪。

我们一家人现在正在安排 Bram 的葬礼,葬礼将在荷兰举行,将使用荷兰语。具体日期、时间和地点尚待确定。
如果您希望参加他的葬礼,请发送消息至[email protected]。考虑到我们一家人目前的处境,这个电子邮件地址也可用于与家人联系其他事宜。致以

亲切的问候,
Bram Moolenaar 的家人

后话

其实光标的形状变化已经提示我们了,我是一个重度终端使用者,因为它很安全且注重用户隐私,一切都按照我们的预期执行,但我没有注意到光标的暗示,直到知道真相后,心情如万马奔腾又啼笑皆非,vi 编辑器是时代遗留的产物,但它并没有完全落后于时代,

我们仍然可以通过许多无修饰符(Windows/Option、Ctrl/Command、Shift、Alt/CMD)的快捷键直接键入,来进行复制整行、删除整行等快捷操作,它比更加颗粒化的 Shift + Home/End -> Ctrl + C -> Return -> Ctrl + V 要快的多得多,它对无障碍或非四肢健全的开发者更加友好。

即使是现代的 IDE/IDEA,也以 vim 的思想开放了组合式快捷键来实现 vim 对文本快速操作的功能。
因此,如果你也想在 Sublime 中实现现代 IDE/IDEA 的文本快捷操作,不妨尝试并保留 Vintage

这是一份非常完整的 vim 快捷键列表: Vim Cheat Sheet,在我的网络环境(电信)测试下,即使大陆网络也能正常访问,
如果你无法访问这个网站,可以尝试作者 hall 于 2024-06-02 在知乎发布的文章 vim cheat sheet

标签:键后,Vintage,vi,vim,按下,Esc,Bram,Text,Sublime
From: https://www.cnblogs.com/97z4moon/p/18460267

相关文章

  • 第二百七十一节 JPA教程 - JPA查询like Escape示例
    JPA教程-JPA查询likeEscape示例如果模式字符串包含应匹配的下划线或百分号,则ESCAPE子句可以使用\指定转义字符:SELECTdFROMDepartmentdWHEREd.nameLIKE'QA\_%'ESCAPE'\' 例子下面的代码来自PersonDaoImpl.java。packagecn.w3cschool.common;importjava.......
  • 本地环境PHP帝国备份王备份报错mysql_escape_string(): This function is
    在使用帝国备份王进行备份和恢复时,如果遇到PHP5.5环境下的报错,通常是因为一些旧的MySQL函数已经被弃用或移除。具体来说,mysql_escape_string 函数在PHP5.5中已经被废弃,应该使用 mysql_real_escape_string 替代。解决方案定位问题文件:找到 function.php 文件的位置。......
  • GraphQL、sequelize-typescript 、Apollo Server 4 实例
    新建项目文件夹$mkdirdemo$cddemo初始化TypeScript配置$npxtsc--init安装SequelizeSequelize-cli$npminstall--save-dev@types/node@types/validator$npminstallsequelizereflect-metadatasequelize-typescript$npminstall--save-devts-node......
  • PbootCMS附件上传失败报错UNKNOW: Code: 8192; Desc: stripos(): Non-string needles
    当遇到PBootCMS附件上传失败,并报错 UNKNOW:Code:8192;Desc:stripos():Non-stringneedleswillbeinterpretedasstringsinthefuture. 时,这通常是因为PHP的版本更新导致某些函数的行为有所改变。在这个情况下,stripos() 函数在处理非字符串参数时会发出警告,因为它......
  • TypeScript在Vue中的使用-------ref
    我们平时的写法import{ref}from"vue";constmsg=ref("你好世界");使用TS的写法import{ref}from"vue";constmsg=ref<string>("你好世界");listType表示数组里面放对象,我们可以用如下的方法进行调用typelistType={id:numbername:......
  • TypeScrip在vue中的使用----defineEmits
    向父元素发送消息之前的语法: 在TS语法中,我们既要对defineEmits做类型约束,又要对emits做类型约束。最主要是对defineEmits做一个泛型的约束。//在泛型对象中,有几个事件就写几个约束typeemitsType={//()中有n个参数,第一个固定的是e,其他有具体参数决定。具体的写法......
  • TypeScrip在vue中的使用-----defineProps
    小知识点:在vscode中定义好子组件的vue视图后。我们可以直接使用<子组件/>来使用子组件,因为我们使用了import插件,他会自动import所需文件。使用一:父向子传值,我们之前父向子传值的时候,子组件是如下:defineProps({house:{type:String,required:true,......
  • TypeScript 泛型
    泛型是可以在保证类型安全的前提下,让函数等与多重类型一起工作,从而实现复用。常用于:函数、接口、class中。泛型在定义的时候并不知道具体是什么类型,只有在调用的时候才知道是什么类型。 如下:/*需求:定义一个getId方法,传入一个值,返回这个值*/functionge......
  • TypeScript 接口、继承
    接口类型作用:给对象约束属性和方法基础语法:interface接口名{属性名:类型}接口名称推荐以I开头接口声明后,直接使用接口名称作为变量类型interfaceperson{name:stringage:numbergender:stringsayHi:()=>void......
  • TypeScript:模块
    一、前言关于术语的一点说明:请务必注意一点,TypeScript1.5里术语名已经发生了变化。“内部模块”现在称做“命名空间”。“外部模块”现在则简称为“模块”,这是为了与ECMAScript2015里的术语保持一致,(也就是说moduleX{相当于现在推荐的写法namespaceX{)。......