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:
String
helix 编辑器显示代码操作项 - 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