Intellij idea 在同一文件中的语言之间切换

Intellij idea 在同一文件中的语言之间切换,intellij-idea,Intellij Idea,我最近参加了一次用户组会议,IntelliJ代表在会上演示了版本13 他演示了如何切换文件的代码完成视图。我不记得这个特定文件的文件扩展名是什么,可能是java 其概念是,如果文件是带有嵌入式javascript的html,那么他可以通过快捷方式在html和javascript之间切换代码完成。如果他说将文件视为html,那么出于代码完成的目的,文件中的所有代码都被视为html,对于javascript,则反之亦然 有人知道他可能使用了什么快捷方式来启用语言切换吗?听起来你可能指的是该功能。In

我最近参加了一次用户组会议,IntelliJ代表在会上演示了版本13

他演示了如何切换文件的代码完成视图。我不记得这个特定文件的文件扩展名是什么,可能是java

其概念是,如果文件是带有嵌入式javascript的html,那么他可以通过快捷方式在html和javascript之间切换代码完成。如果他说将文件视为html,那么出于代码完成的目的,文件中的所有代码都被视为html,对于javascript,则反之亦然


有人知道他可能使用了什么快捷方式来启用语言切换吗?

听起来你可能指的是该功能。IntelliJ IDEA可以识别文件中嵌入的其他语言

一个简单的例子是包含CSS和JavaScript的HTML文件

请注意,当我在HTML标记中时:

或在HTML元素中:

代码完成显示HTML完成选项。但是,当我在
style
属性中时,我会得到CSS代码完成:

如果我在
元素中,我也会得到CSS代码完成。因此,即使我在一个HTML文件中,由于我的位置,我看到CSS代码完成

JavaScript也是如此。当我在
元素中调用代码完成时,我得到了JavaScript完成,即使我在HTML文件中

只要IntelliJ IDEA能够确定存在另一种嵌入式语言,它就会通过IntelliLang提供适当的语法高亮显示、错误高亮显示和代码完成。Java也是如此。请注意,IDEA知道我正在竞争的方法采用SQL语句,因此使用SQL高亮显示来高亮显示字符串值,并提供SQL代码完成:

因此,即使我在一个.java文件中,我也可以完成SQL代码。原因是IntelliLang是预先配置的,知道一些方法的嵌入式语言。您可以在文件>设置>项目设置>语言注入中修改或添加更多

此外,您可以使用注释告诉IntelliJ IDEA(以及查看代码的开发人员)字符串必须在特定语言中有效。例如,我可以对字符串字段、变量或参数进行注释,以指示它必须是有效的HTML:

请注意,我得到了HTML语法高亮显示、HTML代码完成和CSS颜色显示在左侧的空白处。如果我注释了一个方法参数,那么无论何时调用该方法,我都会得到相应的语法高亮显示、代码完成和错误/警告高亮显示:

@Language
注释位于IntelliJ IDEA安装目录中的
redist
目录中包含的
annotations.jar
中。如果您使用注释而不附加注释,IDEA也会将其作为库附加

IntelliLang和
@Language
注释支持大量语言。键入
@Language(“”
)后,只需在引号内使用代码补全即可查看列表。(内联搜索也可以在列表中使用。)其中最有用的是Regexp。例如,如果您有一个方法希望传入的字符串是有效的正则表达式,那么将其注释为有效正则表达式将使调用它的任何人在传入无效的正则表达式模式时都可以完成正则表达式代码并高亮显示错误。即使对于使用其他IDE的开发人员来说,它也是一种有用的文档形式

至于为了代码完成而动态更改语言的快捷方式,我认为您可能提到的唯一一件事就是“注入语言”意图。如果我输入一个字符串值,并通过Alt+Enter打开“快速修复/意图”菜单,我将获得一个注入语言的选项:

如果我选择该选项,IntelliJ IDEA将询问我要使用哪种语言:

做出选择后,IntelliJ IDEA将为我提供所选语言的临时语言注入(包括代码完成)

它还提供了一个选项来添加
@Language
注释以进行永久注入


据我所知(作为一名10年IntelliJ IDEA用户),这是切换代码完成语言类型的唯一方法。希望这就是你想要的。对我来说,IntelliLang是IntelliJ中最酷的功能之一。(它实际上是作为第三方插件开始的,JetBrains随后将其吸收到产品中。)

听起来您可能指的是该功能。IntelliJ IDEA可以识别文件中嵌入的其他语言

一个简单的例子是包含CSS和JavaScript的HTML文件

请注意,当我在HTML标记中时:

或在HTML元素中:

代码完成显示HTML完成选项。但是,当我在
style
属性中时,我会得到CSS代码完成:

如果我在
元素中,我也会得到CSS代码完成。因此,即使我在一个HTML文件中,由于我的位置,我看到CSS代码完成

JavaScript也是如此。当我在
元素中调用代码完成时,我得到了JavaScript完成,即使我在HTML文件中

只要IntelliJ IDEA能够确定存在另一种嵌入式语言,它就会通过IntelliLang提供适当的语法高亮显示、错误高亮显示和代码完成。Java也是如此。请注意,IDEA知道我正在竞争的方法采用SQL语句,因此使用SQL高亮显示来高亮显示字符串值,并提供SQL代码完成:

因此,即使我在一个.java文件中,我也可以完成SQL代码。原因是IntelliLang是预先配置的,了解emb