编程语言

编程语言设置以及语言服务器设置位于配置文件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. angular + express 实现websocket通信

    最近需要实现一个功能,后端通过TCP协议连接雷达硬件的控制器,前端通过websocket连接后端,当控制器触发消息的时候,把信息通知给所以前端: 第一个思路是单独写一个后端服务用来实现websocke ...

  2. 兴达易控Modbus转Profinet 网关连接 ACS510 变频器配置案例

    案例简介: 该案例为兴达易控Modbus转Profinet网关(XD-MDPN100)将ABB ACS510 变频器接入西门子 1200PLC.需要设备为西门子 PLC1200.ACS510 变频器. ...

  3. vue2中使用antv/G6节点内容可滚动的ER图

    先举一个栗子: 效果链接:https://code.juejin.cn/pen/7226264955824930816 如果不会请移步到官网的栗子,请点击查看 狠人话不多,直接给大家上代码: 整体代码 ...

  4. ChatGPT — Release Notes

    ChatGPT - Release Notes The latest update for ChatGPT Written by Natalie. Updated yesterday Release ...

  5. 【RcoketMQ】RcoketMQ 5.0新特性(一)- Proxy

    为了向云原生演进,提高资源利用和弹性能力,RcoketMQ在5.0进行了架构的调整与升级,先来看新特性之一,增加了Proxy层. 增加Proxy代理层 计算存储分离 计算存储分离是一种分层架构,将计算 ...

  6. Typora +Picgo 搭建个人笔记

    目录 Typora +Picgo 搭建个人笔记 一.Picgo +Github 搭建图床 1.基础设置 2. 将配置导出,方便下次使用 二.Typora:设置 : 1. 基本设置 2. 导出自动提交 ...

  7. Python使用pymysql和xlrd2将Excel数据导入MySQL数据库

    在数据处理和管理中,有时候需要将Excel文件中的数据导入到MySQL数据库中进行进一步的分析和操作.本文将介绍如何使用Python编程语言实现这个过程. 导入所需库 import xlrd2 # 导 ...

  8. DOM级别

    DOM1 DOM1级由两个模块组成:DOM核心(DOM CORE)和DOM HTML.其中,DOM核心规定的是如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作.DOM HTML模块则 ...

  9. 飞码LowCode前端技术:如何便捷配置出页面

    简介 飞码是京东科技平台研发部研发的低代码产品,可使营销运营域下web页面快速搭建.本文将从三个方面来讲解如何便捷配置出页面,第一部分从数据.事件.业务支持三个方面进行分析,第二部分从模板与页面收藏与 ...

  10. STL multimap容器

    multimap容器 multimap容器保存的是有序的键/值对,但是可以保存重复的元素.multimap中会出现具有相同键值的元素序列.multimap大部分成员函数的使用方式和map相同.因为重复 ...