编程语言

编程语言设置以及语言服务器设置位于配置文件languages.toml 中。

languages.toml

languages.toml 有三个可能的位置:

  1. 在Helix源代码中:Helix repository

    其提供了语言设置的默认配置

  2. 在你的配置目录下的languages.toml,这了会覆盖内置的语言配置设定。例如禁用rust语言自动格式化:


    [language-server.mylang-lsp]
    command = "mylang-lsp" [[language]]
    name = "rust"
    auto-format = false
  3. 在你项目工程目录下的一个 .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决定编程语言配置的优先级顺序如下:

  1. 精准匹配:如果文件名称能精确匹配 file-types 列表项。例如"Makefile"能匹配Makefile文件.
  2. 扩展: 如果没能精确匹配,就匹配文件扩展名,例如"toml"能匹配Cargo.tomllanguages.toml.
  3. 后缀: 如果还未能匹配,那么检查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-symbolsworkspace-symbols 也遵循这个规则,当他们在多种语言服务中同时配置生效时。

如果没有配置except-featuresonly-features ,那么会启动语言服务的所有特性。如果一个语言服务不支持某个特性,将会尝试下一个语言服务。

支持的特性列表:

  • format
  • goto-definition
  • goto-declaration
  • goto-type-definition
  • goto-reference
  • goto-implementation
  • signature-help
  • hover
  • document-highlight
  • completion
  • code-action
  • workspace-command
  • document-symbols
  • workspace-symbols
  • diagnostics
  • rename-symbol
  • inlay-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-typescripttree-sitter-ocaml),这个配置项用于hx --grammar build命令,如果不设置默认是仓库根目录

选择语法

使用一个顶级配置项use-grammars 来控制获取或编译那些语法.获取和编译命令:hx --grammar fetchhx --grammar build

# 注意:这配置项必须在 [[language]] 和 [[grammar]] 字段之前

use-grammars = { only = [ "rust", "c", "cpp" ] }
# or
use-grammars = { except = [ "yaml", "json" ] }

当配置项省略,所有的语法将会被获取并编译

【推荐】Helix的编程语言配置的更多相关文章

  1. 个人推荐的Java邮件配置

    # 大部分host都是smtp.加上你邮箱@后面的域名spring.mail.host=smtp.localhost.com spring.mail.username= spring.mail.pas ...

  2. 树莓派官方推荐的VNC Viewer配置详解Raspberry Pi3 B+

    1GB内存,16GB硬盘容量.这是我目前使用的Pi3树莓派. SVN Viewer远程连接,台式机192.168.1.102连接局域网192.168.1.110上的树莓派.使用的软件是: https: ...

  3. VScode 插件推荐与C/C++配置

    以下是我经常用到的VScode插件.由于插件本身具有详细的配置和介绍,不对插件本身的安装配置进行说明,仅仅支出这些插件的主要功能.具体使用强烈推荐看一下安装插件后的说明,大多数的问题和设置都可以找到, ...

  4. 推荐的php安全配置选项

    推荐安全配置选项 这里有几个会影响安全功能的 PHP 配置设置.下面是一些显然应该用于生产服务器的: register_globals 设置为 offsafe_mode 设置为 offerror_re ...

  5. 转 推荐 33 个 IDEA 最牛配置,写代码太爽了!

    本文由 简悦 SimpRead 转码, 原文地址 https://mp.weixin.qq.com/s/neyvJouuG1Rmxn3BwfRXVg 作者:琦彦 blog.csdn.net/fly91 ...

  6. VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)

     更正了顺序,之前不知道怎么回事,内容顺序乱了 力求完美.详细,所以希望懂的人留言指点一下. 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接 后续会慢慢增添内容,修正 ...

  7. Ubuntu14.04或16.04下Hadoop及Spark的开发配置

    对于Hadoop和Spark的开发,最常用的还是Eclipse以及Intellij IDEA. 其中,Eclipse是免费开源的,基于Eclipse集成更多框架配置的还有MyEclipse.Intel ...

  8. 在Hyper-V中安装和配置Ubuntu网络

    http://www.abcde.cn/knowledgebase/845/Hyper-VUbuntu.html (文中的nameserver要改成自己路由器的IP:我的是192.168.2.1.) ...

  9. kafka0.9.0及0.10.0配置属性

    问题导读1.borker包含哪些属性?2.Producer包含哪些属性?3.Consumer如何配置?borker(0.9.0及0.10.0)配置Kafka日志本身是由多个日志段组成(log segm ...

  10. .net core 中环境变量的配置

    配置文件: Properties目录下的launchSettings.json IISExpress配置 "ASPNET_ENV": "EnvironmentOne&qu ...

随机推荐

  1. RabbitMQ——RabbitMQ面试题

    文章目录 为什么使用MQ?MQ的优点 消息队列有什么优缺点?RabbitMQ有什么优缺点? 你们公司生产环境用的是什么消息中间件? Kafka.ActiveMQ.RabbitMQ.RocketMQ 有 ...

  2. jmeter的基本功能使用

    jmeter安装配置 1.可以参考教程:https://blog.csdn.net/lfmsky1/article/details/88631190 jmeter简单基础使用步骤 (1)添加线程组 ( ...

  3. 【算法】游戏中的学习,使用c#面向对象特性控制游戏角色移动

    最近,小悦的生活像是一首繁忙的交响曲,每天忙得团团转,虽然她的日程安排得满满当当,但她并未感到充实.相反,她很少有时间陪伴家人,这让她感到有些遗憾.在周五的午后,小悦的哥哥突然打来电话,他的声音里充满 ...

  4. Lab3 存储过程与触发器

    实验三 存储过程与触发器  实验目的: 学习SQL语言进行编程的基本方法与技术,能够编写存储过程.触发器解决数据库需要处理的复杂问题.  实验内容: 1. 设计一个存储过程或者自定义函数,练习存储 ...

  5. Redis平台-整合PHP

    1.Redis的相关介绍: 定义: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...

  6. Acwing76场周赛

    题目链接 这次还是只做出来两道题,前两题都挺简单的,注意第二题需要开long long不开会wa,代码粘上来,以后可能会看吧 第一题 #include<iostream> #include ...

  7. 20.3 OpenSSL 对称AES加解密算法

    AES算法是一种对称加密算法,全称为高级加密标准(Advanced Encryption Standard).它是一种分组密码,以128比特为一个分组进行加密,其密钥长度可以是128比特.192比特或 ...

  8. Java模块化应用实践之精简JRE(内含开源)

    导语 Java9及以后的版本引入了模块化特性,但是直到今天JDK21都发布了,依然没有被大量使用起来,那么这个特性就真的没啥意义了吗? 别忘了,Java本身可是把模块化做到了极致的,所以可以利用这个特 ...

  9. 清理C盘,我在行

    我C盘炸了,我C盘满了,我C盘爆红了,我C盘无了,怎么办,我 要怎么做,我该怎么做,你快帮我,你帮帮我,你帮我看看,你给我看看,大神,大佬,大哥,快快快.每每听到这么急的语气,我就有点小开心,因为奶茶 ...

  10. [数据校验/数据质量] 数据校验框架:hibernate-validation

    0 前言 其一,项目中普遍遇到了此问题,故近两天深入地研究了一下. 其二,能够自信地说,仔细看完本篇,就无需再看其他的Java数据校验框架的文章了. 1 数据校验框架概述 1.0 数据校验框架的产生背 ...