VSCode: 在定义的文本之间切换
VSCode: Toggle between defined texts
我必须通过任何键盘快捷键或鼠标单击在两个文本示例 ABC
和 MNO
之间切换。
- 如果我双击并选择单词是 ABC,它应该更改为 MNO,反之亦然。
- 或者在选择单词后我可以运行一些键盘快捷键来切换。
- 或者,如果当前行有
ABC
,则通过双击或键盘快捷键将其更改为 MNO
。
我知道这是一个非常奇怪的请求,但我有一个用例。即使我必须编写扩展程序,任何类型的变通方法都会起作用。
我写了一个扩展程序 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
}
}
这将执行 Cookie
与 SkipCookie
的条件替换,反之亦然。替换行中每个出现的所有内容。
“或者在 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"
}
我必须通过任何键盘快捷键或鼠标单击在两个文本示例 ABC
和 MNO
之间切换。
- 如果我双击并选择单词是 ABC,它应该更改为 MNO,反之亦然。
- 或者在选择单词后我可以运行一些键盘快捷键来切换。
- 或者,如果当前行有
ABC
,则通过双击或键盘快捷键将其更改为MNO
。
我知道这是一个非常奇怪的请求,但我有一个用例。即使我必须编写扩展程序,任何类型的变通方法都会起作用。
我写了一个扩展程序 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
}
}
这将执行 Cookie
与 SkipCookie
的条件替换,反之亦然。替换行中每个出现的所有内容。
“或者在 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"
}