3 个版本
| 0.1.2 | 2024 年 7 月 10 日 |
|---|---|
| 0.1.1 | 2024 年 7 月 7 日 |
| 0.1.0 | 2024 年 5 月 17 日 |
97 在 文本编辑器
73KB
1.5K SLoC
hx-lsp
为 Helix 编辑器 提供 custom 代码片段和 Code Actions 的 LSP 工具。
功能
- 完成:片段
- CodeAction:操作
安装
从 crate
cargo install --force hx-lsp
从源
git clone https://github.com/erasin/hx-lsp.git
cd hx-lsp
cargo install --path .
使用
修改 Helix 编辑器的语言配置文件 languages.toml。
$XDG_CONFIG_HOME/helix/languages.toml:Helix 配置文件。WORKSPACE_ROOT/.helix/languages.toml:项目工作空间根目录下的配置文件。
关于 'WORKSPACE_ROOT',它会读取 Helix 提供的 'initialize' 中的 'rootPath',当存在多个级别的 'rootPath'(languages.toml 的 languages 的 roots)时,它会读取最近的 root '.helix'。
例如,添加对 markdown 的支持。
[language-server.hx-lsp]
command = "hx-lsp"
[[language]]
name = "markdown"
language-servers = [ "marksman", "markdown-oxide", "hx-lsp" ]
关于
language id,请参阅 helix/languages.toml 和 helix 维基语言服务器配置。
配置
配置文件支持 jsonc 格式。
注释风格:
// ...,/* ... */,# ...。
片段文件加载路径
$XDG_CONFIG_HOME/helix/snippets/WORKSPACE_ROOT/.helix/snippets/
操作文件加载路径
$XDG_CONFIG_HOME/helix/actions/WORKSPACE_ROOT/.helix/actions/
在 LSP textDocument/didOpen 请求中,将加载具有名称为 language_id.json 的配置文件。
不支持动态加载配置。如果您修改配置文件,请使用
:lsp-restart来重新启动 lsp 并重新加载文件。
完成:片段
代码片段支持 vscode snippets 格式。相同的文件后缀支持全局后缀,如 . code-snippets,以及语言包后缀,如 . json。
为了更好地使用片段补全,使用 helix master 并合并 helix#9081 添加片段系统 以支持智能制表符。
.
└── snippets
├── global.code-snippets
├── html.json
└── markdown.json
片段格式:
- name:
String,索引 - prefix:
String或Vec<String>,编辑器补全项 - body:
String或Vec<String>,片段内容 - description:
Option<String>提示
{
"markdown a": {
// name
"prefix": "mda", // string
"body": "mda in .helix: ${1:abc} : ${2:cde}", // string
"description": "test a info content in .helix",
},
"markdown b": {
"prefix": [
// array
"mdb",
],
"body": "mdb: ${1:abc} : ${2:cde}", // string
"description": "test b info content",
},
"markdown c": {
"prefix": [
// array
"mdc",
"mdd",
],
"body": [
// array
"mda: ${1:abc} : ${2:cde}",
"test",
],
"description": "test c,d info content",
},
}
CodeAction:操作
.
└── actions
├── html.json
└── markdown.json
片段格式化器:
- title:
Stringhelix 编辑器显示代码操作项 - catch:
String捕获行内容,正则表达式,代码操作 - shell:
String或Vec<String>,执行 shell 脚本 - description:
Option<String>提示内容
/* actions/go.json */
{
"run main": {
"title": "go run main",
"catch": "func main",
"shell": [
"alacritty --hold --working-directory ${TM_DIRECTORY} -e go run ${TM_FILENAME}"
],
"description": "go run main"
},
"run main in tmux": {
"title": "tmux: go run main",
"catch": "func main",
"shell": [
"tmux split-window -h -c ${WORKSPACE_FOLDER};",
"tmux send 'go build' Enter"
],
"description": "go run main"
}
}
/* test */
{
"tmux split window helix": {
"title": "tmux split window in project",
"catch": "fn",
"shell": [
"tmux split-window -h",
"tmux send \"cd ${WORKSPACE_FOLDER}\n\""
],
"description": "tmux split and open helix in project"
}
}
catch:
- 正则表达式行
- 选定的内容
- 正则表达式匹配
变量
支持在片段内容和操作 shell 中使用变量。
支持如 $UUID 和 ${UUID}。
路径
-
TM_SELECTED_TEXT -
TM_CURRENT_LINE -
TM_CURRENT_WORD -
TM_LINE_INDEX -
TM_LINE_NUMBER -
TM_FILENAME -
TM_FILENAME_BASE -
TM_DIRECTORY -
TM_FILEPATH -
RELATIVE_FILEPATH -
CLIPBOARD -
WORKSPACE_NAME -
WORKSPACE_FOLDER
时间
-
CURRENT_YEAR -
CURRENT_YEAR_SHORT -
CURRENT_MONTH -
CURRENT_MONTH_NAME -
CURRENT_MONTH_NAME_SHORT -
CURRENT_DATE -
CURRENT_DAY_NAME -
CURRENT_DAY_NAME_SHORT -
CURRENT_HOUR -
CURRENT_MINUTE -
CURRENT_SECOND -
CURRENT_SECONDS_UNIX -
CURRENT_TIMEZONE_OFFSET
其他
-
RANDOM -
RANDOM_HEX -
UUID
操作捕获
-
CATCH1..9
依赖项
~13–25MB
~403K SLoC