在VSCode中删除包围的引号或在引号和非引号之间切换

27

是否有适用于VSCode的快捷方式或扩展程序,可帮助删除所选文本周围的引号(单引号或双引号)?
请参见以下示例

'hello' ==> hello

换句话说,是否可能有一个功能,可以在引号和非引号之间切换当前选择?

我已经尝试了VSCode的es quotes扩展程序,它非常好用,可以在单引号和双引号之间切换。


请查看此 vscode 问题/功能请求。如果不满足您的需求,请提交功能请求。 - CrnaStena
5个回答

24

Soldeplata的回答进行详细解释:

开始前:通过按下Ctrl+k,Ctrl+s来查找smartselect(因为键盘布局和安装的键位映射扩展可能有所不同),以查找expanding selection的快捷方式。我有两个快捷方式可供选择:Shift+alt+Ctrl+w

步骤(不是一个快捷方式,而是一系列小步骤):

  • 您的起点..................................... 有人说:“你好”;

  1. 将光标放在单词hello的任何位置
    使用快捷键扩展选择...... 一些人说:“{{hello}}”;
  2. 剪切所选内容 (Ctrl+x)......................... 一些人说:“{{}}”;
  3. 按一次退格键
    (这会同时删除引号)...................... 一些人说:{{}};
  4. 粘贴 (Ctrl+v).................................... 一些人说:{{hello}};

你说的命令叫做“扩展选择”,对吗?(editor.action.smartSelect.expand?) 它似乎不能正确地处理多个单词。例如,我在我的一个配置 JSON 文件中有这个字符串:"Docstring - one-line"。如果我把光标放在第二个连字符后面的任何位置,所选的内容都是 line",但在其他情况下它按照你描述的方式工作。它似乎还取决于上下文。如果我从其他地方复制一个单引号字符串并进行几次“扩展选择”,那么单引号字符串永远不会被选中,总是更多或更少。 - wjandrea
4
请注意,您的 settings.json 文件中必须有 "editor.autoClosingDelete": "always",否则第三步将无法正常工作。 - Alexander Wallace Matchneer
@wjandrea 也许有更多(新的)设置会影响这个命令?我尝试了你的字符串“Docstring - one-line”,如果光标在一个分离的单词上,我必须扩展两次,但是在引号内的所有内容都可以从任何光标位置正确选择我的VSCode。如果字符串包含格式化的单词,如camelCase或snake_case,则可能需要扩展三次才能获取整个字符串。 - Superole
@wjandrea 啊,但对于字符串中的字符串效果不佳 :/ 例如,如果您想从此字符串中删除单引号: "Docstring:'one-line'" 或从此字符串中删除双引号:someSay ='Hello there,"stranger"'; - Superole

9

有一个扩展程序可以让你在引号之间进行一些技巧操作。你可以在简单引号和双引号之间切换,并且可以选择引号内的任何内容。

我找到的最接近的解决方案是使用快捷键(Ctrl+k, `)全选,然后剪切,删除引号,再粘贴文本。

这是我找到的最好的方法。


1
接受这个答案,因为这是完成工作的最合适方式,所提到的扩展也非常有用。谢谢。 - rahoolm
3
还有这个扩展程序,它仅切换引号。 - Nicolai Weitkemper

4
假设你收到以下JSON,你想要researchers的值成为一个数组而不是一个字符串。我们需要删除包裹数组的引号。在VSCode 1.64版本中,您可以使用内置的搜索和替换正则表达式捕获组(无需扩展程序)来进行此操作。
[
  {
    "id": 2,
    "description": "Project 1",
    "researchers": "[12,5,22]"
  },
  {
    "id": 3,
    "description": "Project 2",
    "researchers": "[1,44,22]"
  }
]

screenshot of search string in VS Code

在搜索字段中,您需要使用正则表达式"researchers": "\[(.+)\]",其中表达式的(.+)部分是我们希望在替换时保留或不改变的第一组。然后,在替换字段中,我们使用"researchers": [$1],其中$1对应于我们在搜索字符串中保留的第一个组(.+)。这意味着我们将找到的值(在第一个实例中为12,5,22),用"researchers": [12,5,22]包装起来。 替换后的JSON如下:
[
  {
    "id": 2,
    "description": "Project 1",
    "researchers": [12,5,22]
  },
  {
    "id": 3,
    "description": "Project 2",
    "researchers": [1,44,22]
  }
]

以下视频也很有帮助。https://www.youtube.com/watch?v=6AsSfyHWWls

谢谢!$1 是我正在寻找的参数。 - Tulio Casagrande

0

我使用ctl+d突出显示单词,然后输入引号。括号或大括号同理。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - jrswgtr

-5

这对你提供的示例有效。

  1. 选择要删除引号的文本。

  2. 菜单 编辑 | 替换

  3. 搜索 ' 引号标记

  4. 替换为 [空格]

  5. 单击“全部替换”图标

  6. 如果需要,可以使用 编辑 | 撤消 将引号放回。


1
我知道可以使用replace来实现,但这不是我的问题。我想要一个快捷方式或插件,可以仅替换选定的带引号或双引号的字符串,而不是整个文档或文本文件。 - rahoolm
抱歉,这个方案行不通。我的解决方案确实符合您所述的规格要求。 - Tamitik_Tech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接