编程语言

编程语言设置以及语言服务器设置位于配置文件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. 新零售SaaS架构:面向中小连锁的SaaS系统整体规划

    零售企业的发展路径 零售企业的发展路径一般可分为以下几个阶段: 单店经营阶段:企业在一个地区或城市开设单个门店.这时,企业需要把精力放在了解当地市场和顾客需求上,这是积累经验和品牌知名度的重要环节.为 ...

  2. 关于Async、Await的一些知识点

    在ASP.NET Core中,当一个HTTP请求到达服务器时,它会被分配给线程池中的一个线程来处理.该线程会执行相应的Controller方法. 如果这个方法是一个异步方法并且使用了await关键字, ...

  3. csps 线性dp

    合唱队形 正反分别求一遍最长上升子序列,然后枚举中间的最高点,计算出来队列里面的最多人,然后就可以知道需要出列的最少人. 过河 tips:两个互质的数字 p,q,他们所不能拼出来的最小的数字是 \(( ...

  4. Excel--比较两列数据的异同

    首先得到的数据分为两列,两种类型.由于在网站上搜索的时候,网站的"特殊性"会将000638-32-4 前面的0全部去掉.变成了638-32-4.基于得到了两列稍有不同的数据.由于人 ...

  5. Vue之键盘事件

    1.使用keydown触发事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  6. App支付报错"商家订单参数异常,请重新发起付款"排查流程

    今天在对接支付宝 APP 支付的时候遇到了一个报错,记录下问题的排查过程~ 报错过程 APP 中弹窗提示的报错"商家订单参数异常,请重新发起付款",检查了下参数感觉没啥问题,不知道 ...

  7. 【日常收支账本】【Day02】通过PyCharm集成QtDesigner和PyUIC快速创建界面

    一.集成QtDesigner和PyUIC PyCharm集成QtDesigner和PyUIC教程 二.在QtDesigner中画出窗体 1. 主界面 编辑账本: 新增.修改或删除记录 可视化账本:通过 ...

  8. 基于资源编排服务(ROS)实现存量资源的IaC化

    背景 如今,基础设施即代码(Infrastructure as code,IaC)是云资源管理和编排的趋势,基于 IaC 的管理模式,在提升云资源自动化管理能力,降低管理成本的同时,可以大大降低云资源 ...

  9. ERP大作业进度(一)

    ERP和进销存的区别 ERP(企业资源计划)和进销存(进货.销售和库存管理)是两个不同的概念,尽管它们在企业管理中通常存在交集.以下是它们之间的主要区别: 范围: ERP:ERP系统是一个综合性的.集 ...

  10. 【uniapp】【外包杯】学习笔记day04 | 学习模板+vue相关知识+环境搭建

    没啥好说的,人与人的悲欢并不相同,我只觉得吵闹. 好烦啊,虽然不应该总说一些低气压的话,不过目前预见的就是有很多工作要做,并且对于完成的希望也有点没有,就这样吧,没啥好说的. 昨天做了python的作 ...