【发布时间】:2020-08-03 04:47:48
【问题描述】:
我是 VSCode 的新手,我经常需要让键盘学习序列,这在 VSCode IDE 中似乎不是一个东西。根据几个网站的建议,我得到了一个 marcos 的扩展,并一直在制作自定义键绑定作为一种解决方法。
这一直很艰难,因为显然,唯一的主要命令列表在键盘快捷键选项卡中,其次,关于这数百个单独的命令几乎没有文档。 (特别是,我无法找到任何每个命令接受的参数的主列表)。
无论如何,我在制作我需要的自定义键绑定方面取得了一些成功,但是,我一直遇到的一个特殊问题是,我可以看到插入特定文字的唯一方法是使用 “type” 命令,然而,这显然确实尝试键入每个字符,并让键盘样式等替换自动触发。我不需要也不想要这个,我需要能够阻止它,或者找到一些其他(实用的)方法来插入我的文字文本,而不需要 any 重新解释、替换或其他键绑定触发(或其他设施正在这样做)。
这是我当前的键绑定命令集:
"EditLitPropToGet": [
{"command": "type", "args": {"text": "get "}},
"cursorWordRight",
"cursorRightSelect",
{"command": "type", "args": {"text": "() { return "}},
"cursorEnd",
"cursorWordStartLeft",
{"command": "type", "args": {"text": "; }"}},
"cursorWordRight",
"cursorWordRight",
"cursorWordStartLeft"
]
这样做的目的是,当位于该行第一个单词的开头时:
referenceGravity: this.surfaceGravity * (this.radius**2),
然后把它变成这一行:
get referenceGravity() { this.surfaceGravity * (this.radius**2); },
这工作正常,直到它到达第二个type 命令:
{"command": "type", "args": {"text": "() { return "}},
在此运行之前,该行如下所示:
get referenceGravity: this.surfaceGravity * (this.radius**2),
选中冒号字符。上面的type 命令应该是这样的:
get referenceGravity() { return this.surfaceGravity * (this.radius**2),
但实际发生的是这样的:
get referenceGravity() { return }) this.surfaceGravity * (this.radius**2),
显然,这是因为它将type 文本视为键盘输入,并触发了“()”和“{}”的样式闭包。
我怎样才能只插入文字?
明确地说,我不希望每次我想这样做时都必须定义一个自定义的 sn-p,或者必须预加载粘贴缓冲区,我需要这些键绑定是独立的。
我也不想在一开始就盲目地禁用所有扩展、样式等,如果这意味着我必须在最后盲目地启用它们。我愿意尝试类似的东西,但是如果我已经禁用了某些东西,那么它不应该重新启用它,因为它不知道以前启用/禁用了什么。如果它只是禁用/启用一个特定设置,那很好,我可以根据需要进行更正。
只是为了更新这一点,我接受了@Mark 的回答,因为它为这种特定情况提供了解决方案。不过,对于一般的问题:“如何插入文字?”,我相信我终于明白了人们所说的:你可以使用insertSnippet插入文字,你只是必须转义可能被视为 Textmate/RegEx 命令的内容(“$”和“`”和“\”)。所以这应该有效:
"EditLitPropToGet": [
{"command": "editor.action.insertSnippet",
"args": {"snippet": "get "}},
"cursorWordRight",
"cursorRightSelect",
{"command": "editor.action.insertSnippet",
"args": {"snippet": "() { return "}},
"cursorEnd",
"cursorWordStartLeft",
{"command": "editor.action.insertSnippet",
"args": {"snippet": "; }"}},
"cursorWordRight",
"cursorWordRight",
"cursorWordStartLeft"
]
【问题讨论】:
-
我只是猜测,但请尝试
"command": "editor.action.insertSnippet", "args": {"snippet": "your_text_here"},。另外,您使用什么扩展程序通过单个热键执行多个命令? -
您似乎需要禁用
Editor: Auto Closing Brackets。另外我不建议使用macros扩展——它不是同步的,也没有维护。看看它的问题。 -
@HolyBlackCat 不会尝试使用该名称运行 sn-p 吗?哦,我使用的扩展是 geddski 的“宏”(
geddski.macros是扩展标识符)。 -
@Mark 嗯,我认为这是有问题的前世。你能建议一个替代方案吗?另外,我会尽快尝试您的建议,但我仍然很想知道如何插入文字。
-
@Mark 等等,我不知道你是如何禁用键绑定命令的设置的?
标签: visual-studio-code vscode-settings key-bindings