要求:

要求:

前言:

如果可以的话,我愿意尽可能使用 VS Code(主要是因为它是跨平台的,并且是所有主要平台上唯一完全可定制/可破解的 GUI 编辑器)。

不过,有一个问题反复打断了我的工作流程;虽然这只是一个干扰,但它对保持专注的影响是可以衡量的。在讨论这个问题之前,让我先描述一下……

现状:

我在设置中定义了仅使用 Tab 键来自动完成代码片段,并禁用使用 Enter 键完成。

这是有意为之并且运行良好。

对于基于缩进的语言,我启用了 tab-stop/tab-key-input 的接受和转换为(通过 linter/intellisense)给定的默认宽度。必要时,我会基于项目或基于配置文件覆盖它。

这是有意为之并且运行良好。

同时,继续将转换为空格的制表位视为同样行为的行为也被激活。

这是有意为之并且运行良好。

话虽如此,我的...来了。

目标配置:

要求A

当未明确允许或未通过 linter/intellisense 时,通常会阻止插入制表位。

意义:只有在基于缩进的语言中,才应将 tab 键输入视为 tab 停止插入,并且只有在它满足该语言给定的语法要求的情况下。

要求 B

否则,tab 键应该仅用于语义/句法导航;例如,到由 linter、intellisense、emmet 等定义的下一个可能的虚拟插入字段。

要求 C

唯一需要执行插入的边缘情况是范围允许嵌套以下内容,即插入缩进级别。

但仅此而已。

可取的奖金结果:

如果在输入命令后立即按下 Tab 键并且无法进一步扩展,则 Tab 键应该触发完全闭合并离开范围;或者在具有特殊结束字符的语言中(例如 C/ECMA 风格语言中著名的“;”/分号),如果在光标位于该结束字符的右侧时按下 Tab 键,则它必须触发范围的闭合并相应地跳转到上层缩进层。

要求:

对于如何达到 A 和 B 和 C 的必要结果,任何意见都值得赞赏。

如果解决方案需要使用插件,我同意,只要该插件可以在“Visual Studio Code for the Web”实时/在线版本中使用。

最好的解决方案是只需要定期自定义设置。

添加我目前认为是可能的解决方案所必需的前言(因为我已经严格尝试了默认情况下在设置中定义的制表符补全、制表符切换、制表位格式等所有可能的结合)(仍然是一个假设):

完全禁止接受 Tab 键作为输入,以创建一个空白的开始:

{
   "key": "tab",
   "command": "-editor.action.insertSnippet",
   "when": "editorTextFocus && !editorReadonly"
}

“key”[...] => 按下的键应适用于“command”[...] => 减号/破折号删除操作“when”[...] => 确保键绑定仅在文本编辑器处于焦点状态而不是只读模式时有效(允许使用 tab-switch 在 VS Code 子窗口/组件之间跳转,不是必需的,但有很好的副作用)

对于基于缩进的语言(例如:Python)

{
   "key": "tab",
   "command": "editor.action.indentLines",
   "when": "editorTextFocus && !editorReadonly && editorLangId == 'python'"
}

.. 这解决了部分问题,但缺少导航和闭包/范围离开。

我“认为”我需要以某种方式定义一个自定义的跳转命令/动作,以将相应定义的 linter/intellisense/等绑定到语言......?

我根本不知道该如何在设置中描述这种行为。更不用说判断我想到的路径是否有用了。

如果它很重要,这是我“希望”以请求的方式编辑/输入的语言列表:

  • C / C++ / C#
  • JavaScript / TypeScript / ES 7/8/n
  • GD-脚本
  • Commodore/Microsoft Basic
  • 每千次展示费用
  • 拉撒路(对象)帕斯卡
  • Python / YAML / Guile / Assembly
  • Haskell / Common Lisp / Erlang / SmallTalk / Lua

这些不是要求,只是示例性语言;意味着如果有人能够指出其中一种语言的(部分)可能的解决方案,我可能/将能够创建一个可以扩展的通用模板。

对“问题”的改进值得赞赏,尤其是布局方面,我布置内容的顺序却不是——我故意决定从尾巴开始梳理马。

部分解决方案应该是一个答案而不是评论。

感谢您花时间考虑这个问题。

相关内容