| Crates.io | hx-lsp |
| lib.rs | hx-lsp |
| version | 0.2.11 |
| created_at | 2024-05-17 02:34:20.104648+00 |
| updated_at | 2025-07-06 09:27:01.964643+00 |
| description | One LSP server support snippets and actions for helix editor. |
| homepage | |
| repository | https://github.com/erasin/hx-lsp |
| max_upload_size | |
| id | 1242754 |
| size | 183,898 |
An LSP tool that provides custom code snippets and Code Actions for Helix Editor.
From crate
cargo install --force hx-lsp
From source
git clone https://github.com/erasin/hx-lsp.git
cd hx-lsp
cargo install --path .
Modify the language configuration file languages.toml for Helix Editor.
$XDG_CONFIG_HOME/helix/languages.toml: Helix Configuration file.WORKSPACE_ROOT/.helix/languages.toml : Configuration file under project workspace root.About 'WORKSPACE_ROOT', It is read the 'rootPath' from the 'initialize' provided by Helix, when there are multiple levels of rootPath(
language.rootsof languages.toml), It will read the closest of root '.helix'.
Example, Add support for markdown.
[language-server.hx-lsp]
command = "hx-lsp"
[[language]]
name = "markdown"
language-servers = [ "marksman", "markdown-oxide", "hx-lsp" ]
# or only use choose features
language-servers = [ "marksman", "markdown-oxide", { name = "hx-lsp", only-features = [ "document-colors" ] } ]
About
language id, Read helix/languages.toml and helix wiki language server configurations。
helix lsp support options
only-featuresandexcept-featuresfilter server features。 hx-lsp 支持
- completion
- code-action
- document-colors
The Configuration file supports the jsonc format.
Comment style:
// ...,/* ... */,# ...。
Snippets file loading path:
$XDG_CONFIG_HOME/helix/snippets/WORKSPACE_ROOT/.helix/snippets/Actions file loading path:
$XDG_CONFIG_HOME/helix/actions/WORKSPACE_ROOT/.helix/actions/In LSP textDocument/didOpen request, The Configuration file with name that is language_id.json will be loading.
Use
:lsp-workspace-commandopen picker, and reload snippets or actions script.
Code Snippets support vscode snippets format. The same file suffix supports global suffixes such as. code-snippets and language pack suffixes such as. json.
~~For better use snippet completion, Use helix master and merge helix#9081 Add a snippet system to support smart-tab。 ~~
.
└── snippets
├── global.code-snippets
├── html.json
└── markdown.json
Snippet Format:
String, indexString Or Vec<String>, editor completion itemString Or Vec<String>, snippet connentOption<String | Vec<String>> Tip content
{
"mdbookNote": {
"prefix": "mdbookNote",
"body": [
"```admonish note ${1:title=\"$2\"}",
"${3:content}",
"```"
],
"description": "mdbook admonish note"
},
"mdbookBob": {
"prefix": "mdbookBob",
"body": "```svgbob \n$1\n```",
"description": "mdbook svgbob "
},
"dir": {
"prefix": "dir",
"body": [
"TM_FILENAME: $TM_FILENAME",
"TM_FILENAME_BASE: $TM_FILENAME_BASE",
"TM_DIRECTORY: $TM_DIRECTORY",
"TM_FILEPATH: ${TM_FILEPATH}",
"RELATIVE_FILEPATH: $RELATIVE_FILEPATH",
"WORKSPACE_NAME: $WORKSPACE_NAME ",
"WORKSPACE_FOLDER: $WORKSPACE_FOLDER "
],
"description": "path of current"
}
}
.
└── actions
├── html.json
└── markdown.json
Snippet Formatter:
String helix editor show Code Action ItemString Or Vec<String> Shell script: return true,1 or empty ,String Or Vec<String> Shell script: take shell scriptOption<String | Vec<String>> Tip content/* actions/markdown.json */
{
"bold": {
"title": "bold",
"filter": "",
"shell": ["echo -n **${TM_SELECTED_TEXT}**"],
"description": "bold"
},
"italic": {
"title": "italic",
"filter": "",
"shell": ["echo -n _${TM_SELECTED_TEXT}_"],
"description": "italic"
}
}
/* actions/go.json */
{
"run main": {
"title": "run main",
"filter": "[[ \"$TM_CURRENT_LINE\" == *main* ]] && echo true || echo false",
"shell": [
"alacritty --hold --working-directory ${TM_DIRECTORY} -e go run ${TM_FILENAME};"
"notify-send \"Golang\" \"RUN: ${TM_FILENAME}\""
],
"description": "go run main"
},
"run main in tmux": {
"title": "tmux: go run main",
"filter": "[[ \"$(cat)\" == *main* ]] && echo true || echo false",
"shell": [
"tmux split-window -h -c ${WORKSPACE_FOLDER}; tmux send 'go run ${TM_FILENAME}' Enter"
],
"description": "go run main"
}
}
Support variable for snippet body and action shell.
Read vscode Variables
Support like $UUID 和 ${UUID}。
path
TM_SELECTED_TEXTTM_CURRENT_LINETM_CURRENT_WORDTM_LINE_INDEXTM_LINE_NUMBERTM_FILENAMETM_FILENAME_BASETM_DIRECTORYTM_FILEPATHRELATIVE_FILEPATHCLIPBOARDWORKSPACE_NAMEWORKSPACE_FOLDERtime
CURRENT_YEARCURRENT_YEAR_SHORTCURRENT_MONTHCURRENT_MONTH_NAMECURRENT_MONTH_NAME_SHORTCURRENT_DATECURRENT_DAY_NAMECURRENT_DAY_NAME_SHORTCURRENT_HOURCURRENT_MINUTECURRENT_SECONDCURRENT_SECONDS_UNIXCURRENT_TIMEZONE_OFFSETother
RANDOMRANDOM_HEXUUID