【问题标题】:Visual Studio Code: Custom Shortcut to edit source code numbers and divide by twoVisual Studio Code:编辑源代码编号并除以二的自定义快捷方式
【发布时间】:2020-08-04 22:05:21
【问题描述】:

我不认为有办法做到这一点,但是,我想我还是会问...... 假设我在 python 脚本中有数百个数字,都需要除以 2。有没有办法创建键盘快捷键,以便我可以突出显示一个数字,按下快捷键,它会自动替换为减半的数量?例如,下面的源代码我需要第一行从0:4 转换为0:2,第二行从4:16 转换为2:8。我会手动完成,但现在有数百个数字需要转换。 Visual Studio 代码是我正在使用的 IDE。

test1 = word[0:4]
test2 = word[4:16]
test3 = word[16:32]
test4 = word[32:1024]
test5 = word[1024:1086]
test6 = word[1086:1900]
test7 = word[1900:2000]
test8 = word[2000:3000]

【问题讨论】:

  • 使用 python、shell 脚本等有很多方法可以做到这一点——为什么 VSCode 扩展是你的首选工具?
  • 我正在编辑源代码,而不是 txt 文件。我的 IDE 是 Visual Studio 代码,我需要能够用减半的结果替换大部分 Python 源代码偏移量。这有助于回答您的问题吗?
  • 我明白了。 DeepSpace 的回答很好,但请记住,源代码也是一个文本文件,可以这样处理。
  • 只是为了补充更多信息,我想避免你的做法的原因是脚本中有很多值我不想被减半。我现在意识到我给出的代码示例并不是我想要键盘快捷键的一个很好的例子。基本上,我一直在寻找一种简单的方法来让我挑选我想要在代码中更改的值,只是为了让我的生活更轻松一些。

标签: python visual-studio-code keyboard-shortcuts


【解决方案1】:

假设您使用 VS 代码作为 IDE 并希望编辑源代码(而不是任意文本文件),您在 VS 代码中可以做的最好的事情可能是使用正则表达式的查找替换(确保选择“使用正则表达式”,alt+R默认):

搜索word\[(\d+):(\d+)\]并替换为word[$1/2:$2/2],结果为

test1 = word[0/2:4/2]
test2 = word[4/2:16/2]
test3 = word[16/2:32/2]
test4 = word[32/2:1024/2]
test5 = word[1024/2:1086/2]
test6 = word[1086/2:1900/2]
test7 = word[1900/2:2000/2]
test8 = word[2000/2:3000/2]

这将在运行时评估您需要的输出。

【讨论】:

  • 这非常接近我的需要。谢谢你。是的 VS Code 是我的 IDE,我正在尝试编辑源代码。我应该在问题中明确表示。
  • 我不确定这是否绝对必要,但您可能应该执行 0//2:4//2 以便始终得到整数除法。
【解决方案2】:

在替换过程中可以将数字替换为表达式的实际值,扩展名为Regex Text Generatorv0.8.0

您首先选择与 DeepSpace 使用的相同正则表达式匹配的所有文本部分,然后使用相同的正则表达式提取每个选择的捕获组,并将它们用作生成文本并可以执行计算的不同正则表达式中的数值。

将使用的正则表达式作为注释文本放在文件中会很方便。您可以复制部分文件并将其粘贴到扩展的 InputBoxes 中。

# orig regex: word\[(\d+):(\d+)\]
# generate regex: word\[{{=N[1]/2}}:{{=N[2]/2}}\]
  1. 在“查找”对话框中粘贴第一个正则表达式 word\[(\d+):(\d+)\],然后勾选正则表达式按钮 (.*)。如果打开“查找”对话框时仍选择正则表达式,则会转义很多字符,只需粘贴正确的版本
  2. 单击文档,使焦点不再位于“查找”对话框中
  3. 选择与查找正则表达式匹配的所有字符串:Ctrl+Shift+L
  4. 使用 Ctrl+Shift+P 启动命令:Generate text based on Regular Expression (regex)
  5. Match Original Text Regular Expression输入框中粘贴第一个正则表达式,仍然在剪贴板中,然后按Enter
  6. 选择并将生成正则表达式复制粘贴到下一个输入框Generator Regular Expression
  7. 替换结果显示在编辑器中,您可以使用 Enter 接受或使用 Esc 拒绝

测试文件的结果将是:

test1 = word[0:2]
test2 = word[2:8]
test3 = word[8:16]
test4 = word[16:512]
test5 = word[512:543]
test6 = word[543:950]
test7 = word[950:1000]
test8 = word[1000:1500]

如果您需要定期执行此操作,您可以定义一个键盘快捷键,将使用的正则表达式输入到输入框中,并让您在需要时对其进行修改。

  {
    "key": "ctrl+f10",
    "when": "editorTextFocus",
    "command": "regexTextGen.generateText",
    "args": {
      "originalTextRegex" : "word\\[(\\d+):(\\d+)\\]",
      "generatorRegex" : "word\\[{{=N[1]/2}}:{{=N[2]/2}}\\]",
      "useInputBox" : true
    }
  }

步骤 4 .. 7 现在通过键盘快捷键完成。

【讨论】:

  • 正是我想要的。非常感谢!
【解决方案3】:
  1. 查找:word\[(\d+):(\d+)\] 替换:word[$1/2:$2/2] from @DeepSpace
  2. 查找:\d+/\d+查找所有num/num2[无替换]
  3. Ctrl+Shift+L 分别选择你所有的num/num2
  4. 从命令面板运行Emmet: Evaluate Math Expression(或将其绑定到键绑定)

Emmet 可以做这种数学运算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多