编程语言

编程语言设置以及语言服务器设置位于配置文件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. Vite+ts+springboot项目集成2

    项目集成 集成element-plus 官网地址: 安装图标库 pnpm install element-plus @element-plus/icons-vue 入口文件main.ts全局安装ele ...

  2. win10系统单独编译和使用WebRTC的回声消除(AEC)、音频增益(AGC)、去噪(NS)模块

    一.简介 本人想单独编译并使用WebRTC的音频回声消除模块,奈何技术有限,于是在百度的海洋里大海捞针,发现了https://www.cnblogs.com/mod109/p/5827918.html ...

  3. [ABC216G] 01Sequence 题解

    01Sequence 题目大意 构造一个满足 \(m\) 个形如 \((l,r,x)\) 的限制条件的 \(01\) 序列,其中 \((l,r,x)\) 表示区间 \([l,r]\) 的和不小于 \( ...

  4. Typora +Picgo 搭建个人笔记

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

  5. Chromium GPU资源共享

    资源共享指的是在一个 Context 中的创建的 Texture 资源可以被其他 Context 所使用.一般来讲只有相同 share group Context 创建的 Texture 才可以被共享 ...

  6. 配置虚拟主机-部署nginx代理并验证缓存生效

    1.虚拟主机的配置: 虚拟主机的作用: 虚拟主机提供了同一台服务器上运行多个网站的功能. 虚拟主机的三种模式:   1)基于域名配置虚拟主机是最常见的一种虚拟主机配置. 只需配置你的DNS服务器,将每 ...

  7. video.js 视频

    http://www.cnblogs.com/lechenging/p/3858181.html

  8. mysql查看索引利用率

    -- mysql查看索引利用率 -- 如果很慢把排序去掉,加上limit 并且在where条件中限定表名. -- cardinality越接近0,利用率越低 SELECT t.TABLE_SCHEMA ...

  9. 算法训练 递归 s01串

    问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据规模和约定 0~ ...

  10. SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段

    SQL INSERT INTO 语句用于在表中插入新记录. INSERT INTO 语法 可以以两种方式编写INSERT INTO语句: 指定要插入的列名和值: INSERT INTO 表名 (列1, ...