VS Code PHP标签自动完成

52
这个问题可能有点琐碎,但是我还是想问一下。我不明白为什么VS Code在输入HTML标签时可以正确地使用Tab键自动完成,但PHP标签却不行。当我输入"php"并按下Tab键时,它会创建一个无用的标签:<php></php>,我不知道这是怎么回事。我希望它能正常地自动完成PHP标签,即<?php ?>。我已经关闭了建议,因为它们让我分心了。有没有办法编辑默认/顶部的"Tab自动完成"项目?
9个回答

132

这个技巧对我有用:转到“偏好设置:打开用户片段”,并将此片段粘贴到 html(是的,就是HTML)用户片段中:

"php": {
    "prefix": "php",
    "body": [
        "<?php $1 ?>"
    ],
    "description": "php tag"
}

说实话,我不知道为什么这不是一个内置的代码片段。你有多大可能想要添加一个 <php> 标签?也许可以向开发团队建议一下? - Isac
1
这个能在引号内使用吗?在我的情况下不起作用...有什么解决方法吗? - norixxx
非常感谢您提供的代码片段。不过我不知道为什么VS Code没有内置它。 - iSaumya
2
对我有用。谢谢!(遇到了与@norixxx相同的问题。根据此处进行修复,并在此处得到了一些帮助) - 681234
我不得不输入“Preferences: Configure User Snippets”来配置代码段,因为“Preferences: Open User Snippets”无法打开。然后它就工作了。非常感谢。 - Sandesh Yadav
使用$1作为占位符对我没有起作用,因为我无法在php标签本身内部使用任何片段。将其更改为$0就解决了问题。 - Daniel

13

我会根据Lane的回答进行补充,将最终光标表示为$0的内容放置在标签之间的新行中。在代码片段中,“body”数组内的每个逗号都代表一个新行。

因此,在Visual Studio Code中,转到文件>首选项>用户代码片段,搜索“html.json”,并通过粘贴以下内容来进行编辑:

{
  // Place your snippets for html here. 
  "php": {
    "prefix": "php",
    "body": ["<?php", "$0", "?>"],
    "description": "php tag"
  }
}

6
在Visual Studio Code中,转到文件 > 首选项 > 用户代码片段 > html.json文件,然后粘贴以下代码:
"php": {
    "prefix": "php",
    "body": [
        "<?php $1 ; ?>",
        "$2"
    ],
    "description": "php tag"
}

5

文件 > 首选项下有用户代码片段,使用html添加php代码片段。

{
  "Snippet name": {
  "prefix": ["keywords", "for", "finding"],
  "body": [
    "<?php ${1:placeholder} ?>"
  ],
  "description": "A php tag."
  }
}

$1, $2等是变量,当片段被输入时将重点关注它们。您还可以使用占位符,就像我的示例中所示。

对于多行正文,请用逗号结束当前行,并在“”中的新行添加内容。有关在VS Code中创建自定义片段的更多信息,请访问此处:

https://code.visualstudio.com/docs/editor/userdefinedsnippets


3

进入“文件”>“首选项”>“用户代码片段”,在搜索栏中输入php并按enter。

VS Code将生成名为php.code-snippets的文件,在此处粘贴以下内容:

  { 

    // Place your GLOBAL snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and 
    // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
    // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is 
    // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: 
    // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. 
    // Placeholders with the same ids are connected.
    // Example:
    "php": {    
        "prefix": "php",
        "body": [
            "<?php //put here code ?>"
        ],
        "description": "php tag"
    } 
}

2
据我理解,您的问题是您没有添加外部的 PHP IntelliSense 扩展程序,而是使用了VS Code提供的默认PHP IntelliSense。如果是这种情况,您需要将该扩展程序添加到您的Visual Studio Code编辑器中。
要添加扩展程序,请使用键盘并按下 Ctrl+Shift+p ,您将获得命令面板,然后输入以下命令 Extensions: Install Extension ,然后在编辑器的左侧面板上,您将获得搜索扩展程序的选项,您可以搜索 PHP IntelliSense 并安装它。编辑器将要求重新启动以应用扩展程序。
我建议通过将以下属性 "php.suggest.basic":false 添加到编辑器的设置json配置中(键盘按下 Ctrl+, ,您将在编辑器右侧获得设置json)来禁用VS Code内置的PHP IntelliSense以避免重复建议。
为使PHP IntelliSense起作用,您需要至少安装PHP 7,您可以将其添加到PATH或在设置json中设置 "php.executablePath":"php物理路径" (键盘按下 Ctrl+, ,您将在编辑器右侧获得设置json)。

2
谢谢您的时间,但是我已经安装了PHP IntelliSense扩展(包括PHP7),即使在按照您的建议禁用内置扩展后,我仍然希望能解决问题,但它仍然出现同样的情况。 - Mezotar
4
我没有遇到很多使用VS Code编辑PHP感到满意的人。 - Ben Coffin

0
非常有用的问题和答案,感谢大家。我也错过了在VS代码中从php标记内部自动关闭和重新打开php标记的能力,所以我尝试在php.json文件中放置类似的片段,结果...它按预期工作!虽然这不是原始问题的严格答案,但仍然与之密切相关。
    "php": {
    "prefix": "php",
    "body": [
            "?>$0<?php"
    ],
    "description": "php tag"
}

-2

我更喜欢在keybindings.json中添加自定义键盘快捷方式 - 这样可以让您在智能感知无法正常工作的地方(例如在html属性引号内部)添加php标记。您还可以选择一些文本(可能从其他地方复制了一些php而没有完整的php标记),并自动将其包装在php标记中。这是我使用的:

{
  "key": "cmd+alt+ctrl+p",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "snippet": "<?php $1$TM_SELECTED_TEXT$0 ?>"
  }
}

-2

也许你应该安装 PHP Awesome Snippetts 扩展。


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