在同一文件中切换语言

时间:2014-04-14 16:19:05

标签: intellij-idea

我最近参加了一个用户组会议,其中IntelliJ代表正在演示版本13.

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

当我进入HTML标记时注意:

enter image description here

或在HTML元素中:

enter image description here

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

enter image description here

如果我在<style>元素内,我也可以获得CSS代码。因此,即使我在HTML文件中,由于我的位置,我看到CSS代码完成。

enter image description here

与JavaScript相同的情况。当我在<script>元素中调用代码完成时,即使我在HTML文件中,我也可以完成JavaScript。

enter image description here

任何时候IntelliJ IDEA都可以确定存在另一种嵌入式语言,它通过IntelliLang提供适当的语法突出显示,错误突出显示和代码完成。 Java也是如此。请注意,IDEA知道我竞争的方法采用SQL语句,因此使用SQL突出显示突出显示String值,并提供SQL代码完成:

enter image description here

所以即使我在.java文件中,我也可以完成SQL代码。原因是IntelliLang预先配置了解某些方法的嵌入式语言。您可以在文件&gt;中修改它们或添加更多内容。设置&gt; [项目设置]&gt;语言注射

此外,您可以使用注释告诉IntelliJ IDEA(以及查看代码的开发人员)String必须在特定语言中有效。例如,我可以注释一个String字段,变量或参数,以表明它必须是有效的HTML:

enter image description here

请注意,我会在左侧装订线中显示HTML语法高亮显示,HTML代码完成以及CSS颜色显示。如果我注释一个方法参数,那么每当我调用该方法时,我都会得到相应的语法高亮,代码完成和错误/警告突出显示:

enter image description here

@Language注释位于IntelliJ IDEA安装目录内annotations.jar目录中包含的redist内。它也可以在maven central中使用,或者如果您在没有附加注释的情况下使用注释,IDEA将提供将其作为库附加。

IntelliLang和@Language注释支持大量语言。输入@Language("")后,只需在引号内使用代码完成即可查看列表。 (内联搜索也在列表中工作。)最有用的一个是Regexp。例如,如果你有一个方法,希望传入的字符串是一个有效的正则表达式,那么注释它将给任何人调用它正则代码完成和错误突出显示,如果他们传入一个无效的正则表达式模式。即使是使用其他IDE的开发人员,它也可以作为一种文档形式使用。

至于快速更改代码完成语言的快捷方式,我唯一能想到的就是&#34; Inject Language&#34;意向。如果我输入字符串值,并通过 Alt + 输入调出快速修复/意图菜单,我可以选择注入语言:

enter image description here

如果我选择它,IntelliJ IDEA会问我想要使用哪种语言:

enter image description here

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

enter image description here

它还为我提供了添加@Language注释以进行永久注射的选项。

enter image description here

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