Reactjs 在Sublime Text 3中,如何为JSX文件启用Emmet?
我以前一直在使用它,直到我遇到一个关于它如何处理语法突出显示的问题。然后我注意到有一个官方的包 在Allan Hortle的软件包中,他在Reactjs 在Sublime Text 3中,如何为JSX文件启用Emmet?,reactjs,sublimetext3,react-jsx,emmet,Reactjs,Sublimetext3,React Jsx,Emmet,我以前一直在使用它,直到我遇到一个关于它如何处理语法突出显示的问题。然后我注意到有一个官方的包 在Allan Hortle的软件包中,他在Preferences>Key Bindings–User中包含了一个片段,用于启用Emmet功能,如下所示: { "keys": ["tab"], "command": "expand_abbreviation_by_tab", "context": [ { "operand": "sourc
Preferences>Key Bindings–User
中包含了一个片段,用于启用Emmet功能,如下所示:
{
"keys": ["tab"],
"command": "expand_abbreviation_by_tab",
"context": [
{
"operand": "source.js.jsx",
"operator": "equal",
"match_all": true,
"key": "selector"
}
]
}
这段代码似乎不适用于官方的sublime react软件包。这似乎是一些可以通过键绑定进行修改的东西,但是对Sublime文档的初步阅读并没有得到关于这个主题的任何信息。帮助?如果您在文件中键入
shift+super+p
,它将让您在左下角看到当前选择的上下文
第一个字始终是基本文件类型。(source.js
,text.html
)在本例中,我选择将其更改为source.js.jsx
。这是因为在编译之前,JSX实际上不是javascript,尽管它看起来非常相似。在JSX中有大量的补全和完美的糖分,而不是JS。另一方面,使用普通的旧source.js
因此,您的这段代码是正确的,您只需将自述文件中的source.js.jsx
替换为source.js
:
Emmet的默认设置是不支持JS文件。因此,您需要在JSX文件中添加一个键盘快捷键来完成tab
打开首选项>键绑定-用户
并添加以下条目:
{
“键”:[“选项卡”],
“命令”:“按选项卡展开”,
“背景”:[
{
“操作数”:“source.js.jsx”,
“运算符”:“相等”,
“全部匹配”:正确,
“键”:“选择器”
},
{
“键”:“选择项为空”,
“运算符”:“相等”,
“操作数”:true,
“全部匹配”:正确
}
]
}
仅对这个答案进行扩展。您可能不希望您写的所有字母都可以扩展为html。可以在上下文中设置另一个额外对象,以限制何时应用制表符完成。这段代码是在中发现的,但是我修改了正则表达式使其更好一些
{
"keys": ["tab"],
"command": "expand_abbreviation_by_tab",
"context": [{
"operand": "source.js",
"operator": "equal",
"match_all": true,
"key": "selector"
},{
"key": "preceding_text",
"operator": "regex_contains",
"operand": "(\\b(a\\b|div|span|p\\b|button)(\\.\\w*|>\\w*)?)",
"match_all": true
},{
"key": "selection_empty",
"operator": "equal",
"operand": true,
"match_all": true
}]
}
您还需要按照要点中的建议安装软件包RegReplace和命令链,以便将span.class
转换为
如果您想添加更多要侦听的元素,只需将它们添加到列表中即可,即
(a\\b|div|span | p\\b|button | strong)
\\b
引用了一个单词边界,并在2015年4月阻止以下操作将abc
扩展为
,但默认情况下它不起作用。好吧,让我惊讶的是,它实际上是在使用control+E
快捷方式,但我想使用TAB
键展开。跟着我做了这件事
基本上,我必须在我的用户密钥绑定文件中粘贴以下内容(
首选项
键绑定-用户
):
这是没有所有注释的代码,并且有正确的
SCOPE\u选择器。只需使用ctrl+e
(cmd+e
在mac上),而不是使用tab键,即可让emmet在jsx中工作。
例如,如果我展开(使用ctrl+e
)
然后我得到
render(){
return(
<div className="modal">
<div className="btn btn-success">Click Me</div>
</div>
)
}
render(){
返回(
点击我
)
}
在2021年,无需进行任何配置,因为Emmet默认支持JSX文件
显然,您需要在安装Emmet之后从包控件安装
现在,选项卡
将起作用,但仅当HTML标记的前缀是侧注:突出显示的问题是什么?如果你在Github上遇到问题,我很乐意尝试解决。这可以自动完成,但对我来说似乎会破坏缩进。警告:通过重新绑定tab键来启用Emmet会破坏其他自动完成。例如,“fu”
+选项卡
将产生
,而不是像您通常使用的那样产生函数名({}
)。您也可以使用Ctrl
+E
而不是选项卡
。这是Emmet的展开缩写命令的默认键绑定,可以在任何上下文中使用。不过,您仍然可以使用enter。这肯定是一个黑客补丁,但在emmet完全支持jsx之前没有真正的解决方案。^E
现在可以开箱即用,无需调整设置。太棒了,这把我和格雷斯都修好了!这是一个非常好的视频,演示了如何设置:我正在使用ctrl+e
但是如何自动完成自动关闭标签?我想键入一些内容,然后快速将其包装在一个自动关闭的标记中,如so
?
render(){
return(
.modal>.btn.btn-success{Click Me}
)
}
render(){
return(
<div className="modal">
<div className="btn btn-success">Click Me</div>
</div>
)
}
"jsx_prefix": false