【推荐】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 ...
随机推荐
- JUC并发编程(1)—CompletableFuture详解
@ 目录 CompletableFuture介绍 1.创建异步任务 2.CompletableFuture API ①. 获得结果和触发计算(get.getNow.join.complete) ②. ...
- Llama2-Chinese项目:3.1-全量参数微调
提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式如下所示: "<s>Human: &q ...
- 前端CodeReivew实践
把Code Review变成一种开发文化而不仅仅是一种制度 把Code Review 作为开发流程的必选项后,不代表Code Review这件事就可以执行的很好,因为Code Review 的执行,很 ...
- Util应用框架 UI 开发快速入门
本文是Util应用框架 Angular UI 开发快速入门教程. Util前端技术概述 Util 应用框架目前仅支持用于开发管理后台的 UI. 本文介绍了 Util UI 的技术特点和功能支持. UI ...
- 词!自然语言处理之词全解和Python实战!
本文全面探讨了词在自然语言处理(NLP)中的多维角色.从词的基础概念.形态和词性,到词语处理技术如规范化.切分和词性还原,文章深入解析了每一个环节的技术细节和应用背景.特别关注了词在多语言环境和具体N ...
- .NET8 Blazor的Auto渲染模式的初体验
.NET8发布后,Blazor支持四种渲染方式 静态渲染,这种页面只可显示,不提供交互,可用于网页内容展示 使用Blazor Server托管的通过Server交互方式 使用WebAssembly托管 ...
- go基础-泛型
概述 在强类型变成语言中,类型是确定不可变,如函数入参是确定类型.链表元素是确定类型,这极大限制了函数功能.也有些解决方案,为每种类型都实现一版函数,会导致大量重复代码:使用类型转换,使用特殊形参(如 ...
- 删除当前文件夹不是.vue文件,电脑命令符
::-----------------------------------------@echo offsetlocal EnableDelayedExpansionset _thisFilePath ...
- JAVA培训
类 类名 对象名=new 类名(); 面向对象的三种特性 * 封装 原理:利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体.数据被保护在抽象数据类型的内部,尽可能地隐藏 ...
- 微盟&致远OA&聚水潭&YonSuite系统对接集成整体解决方案
前言:大部分的企业都可能只用一套系统组织架构复杂,业务流程繁琐,内部同时有OA系统.BI系统.ERP系统......且各个系统都需要独立登陆,造成IT部门数据监管困难!如何在同一套中台系统上关联多管理 ...