VSCode: 在定义的文本之间切换

VSCode: Toggle between defined texts

我必须通过任何键盘快捷键或鼠标单击在两个文本示例 ABCMNO 之间切换。

我知道这是一个非常奇怪的请求,但我有一个用例。即使我必须编写扩展程序,任何类型的变通方法都会起作用。

我写了一个扩展程序 Replace On,它可以在双击时“立即”替换。

您可以将以下内容添加到您的 settings.json

"replace-on.selection-changed": {
    "all": {
      "ABC": {
        "replace": "MNO",
        "literal": true,
        "immediate": true
      },
      "MNO": {
        "replace": "ABC",
        "literal": true,
        "immediate": true
      }
    },
    "javascript": {
      "foo": {
        "replace": "Bar",
        "flags": "i"
      }
    }
  }

例如,我添加了您可以限制特定 languageId 的规则。

在下一个版本中,我将添加通过调用命令来使用非立即规则更改当前“单词”的可能性。从命令面板或键绑定。

我忘了我做了一个扩展可以很容易地做到这一点,请参阅 Find and Transform

这个键绑定:

{
  "key": "alt+y",                   // whatever keybinding you want
  "command": "findInCurrentFile",
  "args": {
    "find": "(Cookie)|(SkipCookie)",
    "replace": "${1:+SkipCookie}${2:+Cookie}",
    "isRegex": true,
    "restrictFind": "line"
    // "matchCase": true
  }
}

这将执行 CookieSkipCookie 的条件替换,反之亦然。替换行中每个出现的所有内容。


“或者在 select 输入单词后,我可以 运行 一些键盘快捷键来切换。”

您可以通过有条件的替换来制作片段。在你的 keybindings.json:

{
  "key": "alt+t",                    // whatever keybinding you want
  "command": "editor.action.insertSnippet",
  "args": {
    "snippet": "${TM_SELECTED_TEXT/(ABC)|(MNO)/${1:+MNO}${2:+ABC}/}"
  },
  "when": "editorTextFocus && editorHasSelection"
}

如果 selected 文本是 ABC,它将被替换为 MNO,反之亦然。它也适用于多个游标。

${1:+MNO} 表示如果有捕获组 1,即 ABC 将其替换为 MNO


如果您先 select 该行然后触发键绑定,则此表单可以切换一行中的所有事件:

{
  "key": "alt+t",
  "command": "editor.action.insertSnippet",
  "args": {
    // "snippet": "${TM_SELECTED_TEXT/(ABC)|(MNO)/${1:+MNO}${2:+ABC}/}"
    "snippet": "${TM_CURRENT_LINE/(.*?)((ABC)|(MNO))/${3:+MNO}${4:+ABC}/g}"
  },
  // "when": "editorTextFocus && editorHasSelection"
  "when": "editorTextFocus"
}