【推荐】Helix的编程语言配置
编程语言
编程语言设置以及语言服务器设置位于配置文件languages.toml 中。
languages.toml
languages.toml 有三个可能的位置:
在Helix源代码中:Helix repository。
其提供了语言设置的默认配置在你的配置目录下的languages.toml,这了会覆盖内置的语言配置设定。例如禁用rust语言自动格式化:
[language-server.mylang-lsp]
command = "mylang-lsp" [[language]]
name = "rust"
auto-format = false
在你项目工程目录下的一个
.helix目录.在这里的语言配置会覆盖你本地的语言配置,以及内置的语言配置。
语言配置
每个编程语言可在 [[language]] 字段中进行配置,例如:
[[language]]
name = "mylang"
scope = "source.mylang"
injection-regex = "mylang"
file-types = ["mylang", "myl"]
comment-token = "#"
indent = { tab-width = 2, unit = " " }
formatter = { command = "mylang-formatter" , args = ["--stdin"] }
language-servers = [ "mylang-lsp" ]
下列是可选的配置项
| 配置项 | 描述 |
|---|---|
name |
编程语言名称 |
language-id |
编程语言的标识,可以在TextDocumentItem查询 |
scope |
编程语言的文件标识,类似source.js 。 当前我们争取匹配流行的元文本语法风格和语言库。 通常在标记语言中使用source.<name> 或text.<name> |
injection-regex |
使用正则表达式来测试一个语言名称是否匹配一个语言的潜在注入点,language injection |
file-types |
编程语言的文件类型,例如["yml", "yaml"] |
shebangs |
命令行的解析器,例如 ["sh", "bash"] |
roots |
一组标记文件,通常是作为工程目录的根,例如 Cargo.lock, yarn.lock |
auto-format |
是否要自动保存 |
diagnostic-severity |
调试诊断信息显示的最小级别 (Error, Warning, Info, Hint) |
comment-token |
注释标记 |
indent |
使用的缩进符号. 自配置包括unit (缩进时插入文档的文本,通常设置为几个空格或 tab符号:"\t") 和tab-width ( 替换tab符号空格数量) |
language-servers |
编程语言的语言服务器. |
grammar |
tree-sitter 语法设置 (默认值是name) |
formatter |
编程语言的格式化工具, 它比LSP的设置优先级高. 格式化工具能从标准输入流中获得源文件,向标准输出流写出格式化的文件 |
soft-wrap |
editor.softwrap |
text-width |
行的最大长度(默认值是editor.text-width),使用命令:reflow 刷新软换行,如果 soft-wrap.wrap-at-text-width 已经设置 |
workspace-lsp-roots |
工程中的相对路径,被看作为LSP的根。应该只在.helix/config.toml中设置 |
探测文件类型
Helix 通过file-types来决定哪个编程语言配置被使用。file-types 是一列字符串或表格,例如:
file-types = ["Makefile", "toml", { suffix = ".git/config" }]
Helix决定编程语言配置的优先级顺序如下:
- 精准匹配:如果文件名称能精确匹配
file-types列表项。例如"Makefile"能匹配Makefile文件. - 扩展: 如果没能精确匹配,就匹配文件扩展名,例如
"toml"能匹配Cargo.toml或languages.toml. - 后缀: 如果还未能匹配,那么检查
suffix表中的路径。例如:{ suffix = ".git/config" }会匹配任意在.git中的config文件。
注意:/被用于分割目录,实际会根据具体系统环境来配置,例如在Windows中上述配置会匹配为.git\config
编程语言服务
编程语言服务在language-server 中配置
例如:
[language-server.mylang-lsp]
command = "mylang-lsp"
args = ["--stdio"]
config = { provideFormatter = true }
environment = { "ENV1" = "value1", "ENV2" = "value2" }
[language-server.efm-lsp-prettier]
command = "efm-langserver"
[language-server.efm-lsp-prettier.config]
documentFormatting = true
languages = { typescript = [ { formatCommand ="prettier --stdin-filepath ${INPUT}", formatStdin = true } ] }
These are the available options for a language server.
下列是对一个编程语言服务的可选配置项
| 配置项 | 描述 |
|---|---|
command |
编程语言服务可执行文件名称或者路径. 可执行文件的名称需要在$PATH中配置 |
args |
传递给编程语言服务的一系列参数 |
config |
LSP 初始化选项 |
timeout |
向编程语言服务请求的最大等待时间(s) 默认值是:20 |
environment |
启动编程语言服务的环境变量值:{ "KEY1" = "Value1", "KEY2" = "Value2" } |
在config 中的子表format 可以传递一些额外的格式化配置项
Document Formatting Requests.
例如,对于typescript:
[language-server.typescript-language-server]
# pass format options according to https://github.com/typescript-language-server/typescript-language-server#workspacedidchangeconfiguration omitting the "[language].format." prefix.
config = { format = { "semicolons" = "insert", "insertSpaceBeforeFunctionParenthesis" = true } }
为一个编程语言配置语言服务
language-servers 配置项设置了一个编程语言的语言服务,这个配置项在[language-server]下定义.
不同的编程语言可以使用相同的编程语言服务,例如 typescript-language-server 默认用于javascript, jsx, tsx 和typescript
通常在language-servers 中会指定多种编程语言服务,所以会经常针对特定语言配置其语言服务是否启动。
例如之前的例子中的efm-lsp-prettier 只会在格式化命令prettier中使用,所以typescript-language-server下应该做好这种配置。
语言服务的配置类似于:
[[language]]
name = "typescript"
language-servers = [ { name = "efm-lsp-prettier", only-features = [ "format" ] }, "typescript-language-server" ]
或者等价于:
[[language]]
name = "typescript"
language-servers = [ { name = "typescript-language-server", except-features = [ "format" ] }, "efm-lsp-prettier" ]
每个LSP特性的请求会按照 language-servers中的排序来处理优先级。
例如:第一个支持 goto-definition的语言服务会接管相关的LSP请求(命令goto_definition)
其他特性例如diagnostics, code-action, completion, document-symbols 和workspace-symbols 也遵循这个规则,当他们在多种语言服务中同时配置生效时。
如果没有配置except-features 或only-features ,那么会启动语言服务的所有特性。如果一个语言服务不支持某个特性,将会尝试下一个语言服务。
支持的特性列表:
formatgoto-definitiongoto-declarationgoto-type-definitiongoto-referencegoto-implementationsignature-helphoverdocument-highlightcompletioncode-actionworkspace-commanddocument-symbolsworkspace-symbolsdiagnosticsrename-symbolinlay-hints
Tree-sitter 语法配置
一个语言的tree-sitter语法是在[[grammar]]中配置的
例如:
[[grammar]]
name = "mylang"
source = { git = "https://github.com/example/mylang", rev = "a250c4582510ff34767ec3b7dcdd3c24e8c8aa68" }
语法配置包括这些配置项
| 配置项 | 描述 |
|---|---|
name |
tree-sitter 语法的名称 |
source |
获得语法的方式- 一组参数列表 |
source是一组参数列表,配置了git仓库的参数
| 配置项 | 描述 |
|---|---|
git |
一个语法的git远程仓库URL |
rev |
需要获取的修订编号(commit hash 值或tag) |
subpath |
需要编译的语法目录路径.一些语法仓库包括多个语法子目录(如tree-sitter-typescript 和tree-sitter-ocaml),这个配置项用于hx --grammar build命令,如果不设置默认是仓库根目录 |
选择语法
使用一个顶级配置项use-grammars 来控制获取或编译那些语法.获取和编译命令:hx --grammar fetch 和hx --grammar build
# 注意:这配置项必须在 [[language]] 和 [[grammar]] 字段之前
use-grammars = { only = [ "rust", "c", "cpp" ] }
# or
use-grammars = { except = [ "yaml", "json" ] }
当配置项省略,所有的语法将会被获取并编译
【推荐】Helix的编程语言配置的更多相关文章
- 个人推荐的Java邮件配置
# 大部分host都是smtp.加上你邮箱@后面的域名spring.mail.host=smtp.localhost.com spring.mail.username= spring.mail.pas ...
- 树莓派官方推荐的VNC Viewer配置详解Raspberry Pi3 B+
1GB内存,16GB硬盘容量.这是我目前使用的Pi3树莓派. SVN Viewer远程连接,台式机192.168.1.102连接局域网192.168.1.110上的树莓派.使用的软件是: https: ...
- VScode 插件推荐与C/C++配置
以下是我经常用到的VScode插件.由于插件本身具有详细的配置和介绍,不对插件本身的安装配置进行说明,仅仅支出这些插件的主要功能.具体使用强烈推荐看一下安装插件后的说明,大多数的问题和设置都可以找到, ...
- 推荐的php安全配置选项
推荐安全配置选项 这里有几个会影响安全功能的 PHP 配置设置.下面是一些显然应该用于生产服务器的: register_globals 设置为 offsafe_mode 设置为 offerror_re ...
- 转 推荐 33 个 IDEA 最牛配置,写代码太爽了!
本文由 简悦 SimpRead 转码, 原文地址 https://mp.weixin.qq.com/s/neyvJouuG1Rmxn3BwfRXVg 作者:琦彦 blog.csdn.net/fly91 ...
- VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)
更正了顺序,之前不知道怎么回事,内容顺序乱了 力求完美.详细,所以希望懂的人留言指点一下. 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接 后续会慢慢增添内容,修正 ...
- Ubuntu14.04或16.04下Hadoop及Spark的开发配置
对于Hadoop和Spark的开发,最常用的还是Eclipse以及Intellij IDEA. 其中,Eclipse是免费开源的,基于Eclipse集成更多框架配置的还有MyEclipse.Intel ...
- 在Hyper-V中安装和配置Ubuntu网络
http://www.abcde.cn/knowledgebase/845/Hyper-VUbuntu.html (文中的nameserver要改成自己路由器的IP:我的是192.168.2.1.) ...
- kafka0.9.0及0.10.0配置属性
问题导读1.borker包含哪些属性?2.Producer包含哪些属性?3.Consumer如何配置?borker(0.9.0及0.10.0)配置Kafka日志本身是由多个日志段组成(log segm ...
- .net core 中环境变量的配置
配置文件: Properties目录下的launchSettings.json IISExpress配置 "ASPNET_ENV": "EnvironmentOne&qu ...
随机推荐
- burpsuite验证码爆破后台夺权
目录 准备工作 爆破 同时爆破用户名密码和验证码 筛查爆破结果的成功输出 创建新用户远程桌面连接 准备工作 安装python 安装muggle_ocr库 运行xp_CAPTCHA服务端 burpsui ...
- centos7.9 扩容swap分区
情况说明:在VMware vsphere的虚拟化平台下,为了快速部署虚拟服务器,我们常常使用模板部署虚拟机.但真实业务有时要求的文件系统分区和大小常常与模板不同,这时便需要自定义硬件资源和使用 LVM ...
- 解密Prompt系列17. LLM对齐方案再升级 WizardLM & BackTranslation & SELF-ALIGN
话接上文的指令微调的样本优化方案,上一章是通过多样性筛选和质量过滤,对样本量进行缩减,主打经济实惠.这一章是通过扩写,改写,以及回译等半监督样本挖掘方案对种子样本进行扩充,提高种子指令样本的多样性和复 ...
- Arithmetic Progression 题解
Arithmetic Progression 题目大意 存在一个打乱了顺序的等差数列 \(a\),你可以询问不超过 \(60\) 次,每次可以以以下两种方式之一进行询问: 查询 \(a\) 中是否有严 ...
- Epic资源转到unity的方法
众所周知,unity中的素材主要是通过unity资源商店获取的.但是unity资源商店的白嫖机会太少了,而隔壁UE的Epic资源商店就有每月免费的资源,不白嫖成何体统?但是UE咱也不会用啊,白嫖的资源 ...
- Unity - Win平台修改窗口标题
原文参考 主要是通过user32.dll获取窗口句柄, 和Unity没有什么关系 using System; using System.Diagnostics; using System.Runtim ...
- Golang后端大厂面经!
大家好,我是阳哥.专注Go语言的学习经验分享和就业辅导. 之前分享了很多 Golang 后端的大厂面经,不少同学在催更新,这篇给大家继续安排. 本文来自一位同学的投稿,面试深X服的面经汇总,前半部分主 ...
- Python Lambda 用法大全
一.Lambda表达式基础 Lambda 的组成分为三部分 lambda arguments: expression arguments为Lambda表达式的参数列表,多个参数使用逗号分隔:expre ...
- 文心一言 VS 讯飞星火 VS chatgpt (129)-- 算法导论11.1 4题
四.用go语言,我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典.开始时该数组中可能包含一些无用信息,但要对整个数组进行初始化是不太实际的,因为该数组的规模太大.请给出在大数组上实现 ...
- 来世再不选Java!
危机感 距离上一次找工作面试已经过去快2年了,那时候正值疫情肆虐,虽然还未感受到"寒潮来临"的苗头,但最终还是成功通过了几轮面试,顺利签约.在目前公司待了2年了,在大环境的影响下, ...