Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio code 如何在不触发替换的情况下插入Keybinding中的文本_Visual Studio Code_Vscode Settings_Key Bindings - Fatal编程技术网

Visual studio code 如何在不触发替换的情况下插入Keybinding中的文本

Visual studio code 如何在不触发替换的情况下插入Keybinding中的文本,visual-studio-code,vscode-settings,key-bindings,Visual Studio Code,Vscode Settings,Key Bindings,我不熟悉VSCode,我经常需要制作键盘学习序列,这似乎不是VSCode IDE中的事情。根据几家网站的建议,我为marcos做了一个扩展,并一直在制作自定义键绑定作为解决方案 这是一个相当粗糙的过程,因为显然,唯一的命令主列表是在键盘快捷键选项卡中,其次,关于这数百个单独命令的文档很少甚至没有。(特别是,我无法找到每个命令接受的参数的主列表) 无论如何,我已经成功地制作了我需要的自定义键绑定,然而,我一直遇到的一个特殊问题是,我能看到插入特定文本的唯一方法是使用“type”命令,然而,这显然确

我不熟悉VSCode,我经常需要制作键盘学习序列,这似乎不是VSCode IDE中的事情。根据几家网站的建议,我为marcos做了一个扩展,并一直在制作自定义键绑定作为解决方案

这是一个相当粗糙的过程,因为显然,唯一的命令主列表是在键盘快捷键选项卡中,其次,关于这数百个单独命令的文档很少甚至没有。(特别是,我无法找到每个命令接受的参数的主列表)

无论如何,我已经成功地制作了我需要的自定义键绑定,然而,我一直遇到的一个特殊问题是,我能看到插入特定文本的唯一方法是使用“type”命令,然而,这显然确实尝试键入每个字符,并让键盘样式,等替代自动点火。我不需要也不希望这样,我需要能够阻止它,或者找到其他(实用的)方法来插入我的文本,而不需要任何重新解释、替换或其他键绑定触发(或者任何正在这样做的工具)

以下是我当前的keybinding命令集:

    "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); },
然后将其转换为以下行:

referenceGravity: this.surfaceGravity * (this.radius**2),
get referenceGravity() { this.surfaceGravity * (this.radius**2); },
在到达第二个
类型
命令之前,该命令工作正常:

        {"command": "type", "args": {"text": "() { return "}},
    // {"command": "type", "args": {"text": "() { return "}},
    {
      "command": "editor.action.insertSnippet",
      "args": {
        "snippet": "() { return }"
      }
    },
在此运行之前,该行如下所示:

获取参考重力
:this.surfaceGravity*(this.radius**2),

选择冒号字符。上面的
type
命令应该执行以下操作:

get referenceGravity() { return  this.surfaceGravity * (this.radius**2),
但实际情况是:

get referenceGravity() { return }) this.surfaceGravity * (this.radius**2),
显然,这是因为它将
类型
文本视为键盘输入,并触发“()”和“{}”的样式闭包

如何插入文字? 要明确的是,我并不希望每次我想这样做时都必须定义自定义代码段,或者必须预加载粘贴缓冲区,我需要这些键绑定是自包含的

我也不想一开始就盲目地禁用所有扩展、样式等,如果这意味着我必须在最后盲目地启用它们的话。我愿意尝试类似的东西,但是如果我已经禁用了某些东西,那么就不应该重新启用它,因为它不知道以前启用/禁用了什么。如果只是禁用/启用一个特定的设置,没关系,我可以根据需要修改它


为了更新这一点,我接受了@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"
    ]

为了向您展示代码段如何转换版本,此keybinding:

{
  "key": "ctrl+k ctrl+1",             // or whatever you want
  "command": "editor.action.insertSnippet",
    "args": {
      "snippet": "get ${TM_SELECTED_TEXT/^(\\w*):(.*),$/$1() {$2/}; },"
  }
},
生成所需的输出。您确实需要先选择行,但这可以很容易地在宏中自动执行(或者只绑定
cursorLineEndSelect
命令。该宏只有两个命令:
cursorLineEndSelect
并插入上述代码段)


使用multi命令的示例宏,我不知道
ctf0的语法。宏
哪个看起来更强大:

 "multiCommand.commands": [

     {
      "command": "multiCommand.yourMacroNameHere",
      "interval": 2000,
      "sequence": [
        "cursorEnd",
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
            "snippet": "get ${TM_SELECTED_TEXT/^\\s*(\\w*):(.*),$/$1() {$2/}; },"
          }
        },
        "cursorDown"
      ]
    },
间隔在您的情况下是不必要的,只是为了观察它的工作情况-它可以被注释掉。光标可以位于包含要转换的行的行上的任何位置。它不需要预先选择,宏将为您执行此操作

为了以防万一,我会在做了这些更改之后重新加载vscode(通过命令选项板)

同样,演示看起来很慢,但这只是为了演示使用
interval
选项的各个步骤。否则它是即时的


如果要使用宏,请使用
insertSnippet
命令代替该
type
命令:

        {"command": "type", "args": {"text": "() { return "}},
    // {"command": "type", "args": {"text": "() { return "}},
    {
      "command": "editor.action.insertSnippet",
      "args": {
        "snippet": "() { return }"
      }
    },

这似乎不会触发自动关闭大括号。代码段确实需要比
type
命令转义更多的字符,但在您的情况下不需要转义。

为了向您展示代码段如何转换版本,此键绑定:

{
  "key": "ctrl+k ctrl+1",             // or whatever you want
  "command": "editor.action.insertSnippet",
    "args": {
      "snippet": "get ${TM_SELECTED_TEXT/^(\\w*):(.*),$/$1() {$2/}; },"
  }
},
生成所需的输出。您确实需要先选择行,但这可以很容易地在宏中自动执行(或者只绑定
cursorLineEndSelect
命令。该宏只有两个命令:
cursorLineEndSelect
并插入上述代码段


使用multi命令的示例宏,我不知道
ctf0的语法。宏
哪个看起来更强大:

 "multiCommand.commands": [

     {
      "command": "multiCommand.yourMacroNameHere",
      "interval": 2000,
      "sequence": [
        "cursorEnd",
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
            "snippet": "get ${TM_SELECTED_TEXT/^\\s*(\\w*):(.*),$/$1() {$2/}; },"
          }
        },
        "cursorDown"
      ]
    },
间隔在您的情况下是不必要的,只是为了观察它的工作情况-它可以被注释掉。光标可以位于包含要转换的行的行上的任何位置。它不需要预先选择,宏将为您执行此操作

为了以防万一,我会在做了这些更改之后重新加载vscode(通过命令选项板)

同样,演示看起来很慢,但这只是为了演示使用
interval
选项的各个步骤。否则它是即时的


如果要使用宏,请使用
insertSnippet
命令代替该
type
命令:

        {"command": "type", "args": {"text": "() { return "}},
    // {"command": "type", "args": {"text": "() { return "}},
    {
      "command": "editor.action.insertSnippet",
      "args": {
        "snippet": "() { return }"
      }
    },

这似乎不会触发自动关闭大括号。代码段确实需要转义的字符比
type
命令转义的字符多,但不是在您的情况下。

我只是猜测,但请尝试
“命令”:“editor.action.insertSnippet”,“args”:{“snippet”:“your_text_here”},
。还有,什么ext