VS代码:如何制作一个python代码片段,在字符串或表达式点击tab键后将其转换
是否可以像我在示例中解释的那样制作一个转换代码的python代码段VS代码:如何制作一个python代码片段,在字符串或表达式点击tab键后将其转换,python,visual-studio-code,code-snippets,Python,Visual Studio Code,Code Snippets,是否可以像我在示例中解释的那样制作一个转换代码的python代码段 “Hello world”。打印-点击标签将其转换为 print("Hello world") 如果能自动理解它是字符串还是表达式,那就好了。因此,如果我在末尾创建一个变量,例如“a”,然后我写“.print”,然后点击tab,它就不会添加“”或“”,这样它就不会转换成其他形式 a = 10 a.print - hitting tab 将其转换为: print(a) 不包括: print("a") 进展(如果可
“Hello world”。打印
-点击标签将其转换为
print("Hello world")
如果能自动理解它是字符串还是表达式,那就好了。因此,如果我在末尾创建一个变量,例如“a”,然后我写“.print”,然后点击tab,它就不会添加“”或“”,这样它就不会转换成其他形式
a = 10
a.print - hitting tab
将其转换为:
print(a)
不包括:
print("a")
进展(如果可以这样说的话) 所以 TM_电流_线 工作不正常(可能是) 所以“${TM_CURRENT_LINE/[0-9a-z.]//g}”需要从行中删除每个数字、小写字符和“.”。这段小小的正则表达式代码(代码片段)可以正常工作,但实际上不起作用 当我写作时
mytext.py - hit tab/enter
它将删除前缀点之间的所有内容
图片中使用的代码段
"Print to console - test": {
"scope": "python",
"prefix": ".print",
"body": [
"${TM_CURRENT_LINE/[0-9a-z.]//g}"
],
"description": "Log output to console"
}
是我错了,还是这位配偶删除了那一行中的所有内容?我认为这不可能完全符合你的需要。比如说:
"Print": {
"prefix": ".print",
"body": [
"print(${TM_CURRENT_LINE/(.*)\\..+$/$1/})$0"
],
"description": "Print"
}
如果我写a.print并点击ENTER
,这将是输出:
aprint(a)
"a"print("a")
如果我写“a”。打印这将是输出:
aprint(a)
"a"print("a")
然后,您应该删除第一部分。这是基于我所知道的,做一些搜索到目前为止并没有得到更好的解决方案
如果在包含其他语句的行上使用它,则会出现一些问题,因为它将占用TM\u CURRENT\u行
。请参阅。更新的答案:
试试分机。它允许您使用正则表达式作为代码段前缀,这样您就可以准确地捕获.print
前面所需的内容
有关设置扩展的详细信息,请参阅。然后在python.hsnips
文件中创建以下代码段:
snippet `(("[^"]+")|(\b\w+))\.print` "expand to print()" A
print(``rv = m[2] ? m[2] : m[3]``)
endsnippet
正则表达式(“[^”]+”)|(\b\w+)\.print
与“Hello World.print
和a.print
在捕获组2中与“”匹配,在捕获组3中与\b\w+
匹配
然后,将这些捕获组m[2]
和m[3]
插入到print()
输出中,具体取决于哪个捕获组包含内容
使用A
标志,完成.print
键入后,将自动转换输入
旧答案: 这是一个宏,我认为它可以满足您的需要。使用,将其放入您的settings.json:
"multiCommand.commands": [
{
"command": "multiCommand.printVariable",
"interval": 150,
"sequence": [
"cursorHomeSelect",
"editor.action.clipboardCutAction",
{
"command": "editor.action.insertSnippet",
"args": {
"snippet": "print($CLIPBOARD)"
}
}
]
}
]
并将keybinding转换为keybindings.json以触发上述宏:
{
"key": "alt+p",
"command": "multiCommand.printVariable",
"when": "editorFocus"
},
现在看演示:
将光标放在变量的末尾(行上唯一的内容)在我下面提到的同一个链接中,有一个完整的官方文档。我试图在
打印之前删除该部分,但找不到方法,期待听到你的结果,这可能会很有趣!我在主帖子中做了一个更新。你可以看到@alfa你没有直接应用正则表达式当前行。其工作原理如下:代码段将前缀替换为正文,因此regex将应用于您在正文字段中编写的内容。因此,当您键入时,“打印”代码段将替换为整行删除任何字符,与删除.print相同。因此,基本上这件事不可能用代码段完成?到目前为止据我所知,我的代码是最接近请求的代码。事实上,不可能在前缀代码中放入变量,因此您无法处理它们。