Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VS代码:如何制作一个python代码片段,在字符串或表达式点击tab键后将其转换_Python_Visual Studio Code_Code Snippets - Fatal编程技术网

VS代码:如何制作一个python代码片段,在字符串或表达式点击tab键后将其转换

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") 进展(如果可

是否可以像我在示例中解释的那样制作一个转换代码的python代码段

“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相同。因此,基本上这件事不可能用代码段完成?到目前为止据我所知,我的代码是最接近请求的代码。事实上,不可能在前缀代码中放入变量,因此您无法处理它们。