mirror of
https://github.com/helix-editor/helix.git
synced 2024-09-11 10:55:45 +03:00
feat: Add textobjects for XML, HTML and jsx
This commit is contained in:
parent
fd7b1a3e37
commit
a5b50d14f1
@ -85,7 +85,7 @@
|
||||
| hocon | ✓ | | ✓ | |
|
||||
| hoon | ✓ | | | |
|
||||
| hosts | ✓ | | | |
|
||||
| html | ✓ | | | `vscode-html-language-server` |
|
||||
| html | ✓ | ✓ | | `vscode-html-language-server` |
|
||||
| hurl | ✓ | ✓ | ✓ | |
|
||||
| hyprlang | ✓ | | ✓ | |
|
||||
| idris | | | | `idris2-lsp` |
|
||||
@ -221,7 +221,7 @@
|
||||
| wit | ✓ | | ✓ | |
|
||||
| wren | ✓ | ✓ | ✓ | |
|
||||
| xit | ✓ | | | |
|
||||
| xml | ✓ | | ✓ | |
|
||||
| xml | ✓ | ✓ | ✓ | |
|
||||
| xtc | ✓ | | | |
|
||||
| yaml | ✓ | | ✓ | `yaml-language-server`, `ansible-language-server` |
|
||||
| yuck | ✓ | | | |
|
||||
|
@ -338,30 +338,32 @@ #### Unimpaired
|
||||
|
||||
These mappings are in the style of [vim-unimpaired](https://github.com/tpope/vim-unimpaired).
|
||||
|
||||
| Key | Description | Command |
|
||||
| ----- | ----------- | ------- |
|
||||
| `]d` | Go to next diagnostic (**LSP**) | `goto_next_diag` |
|
||||
| `[d` | Go to previous diagnostic (**LSP**) | `goto_prev_diag` |
|
||||
| `]D` | Go to last diagnostic in document (**LSP**) | `goto_last_diag` |
|
||||
| `[D` | Go to first diagnostic in document (**LSP**) | `goto_first_diag` |
|
||||
| `]f` | Go to next function (**TS**) | `goto_next_function` |
|
||||
| `[f` | Go to previous function (**TS**) | `goto_prev_function` |
|
||||
| `]t` | Go to next type definition (**TS**) | `goto_next_class` |
|
||||
| `[t` | Go to previous type definition (**TS**) | `goto_prev_class` |
|
||||
| `]a` | Go to next argument/parameter (**TS**) | `goto_next_parameter` |
|
||||
| `[a` | Go to previous argument/parameter (**TS**) | `goto_prev_parameter` |
|
||||
| `]c` | Go to next comment (**TS**) | `goto_next_comment` |
|
||||
| `[c` | Go to previous comment (**TS**) | `goto_prev_comment` |
|
||||
| `]T` | Go to next test (**TS**) | `goto_next_test` |
|
||||
| `[T` | Go to previous test (**TS**) | `goto_prev_test` |
|
||||
| `]p` | Go to next paragraph | `goto_next_paragraph` |
|
||||
| `[p` | Go to previous paragraph | `goto_prev_paragraph` |
|
||||
| `]g` | Go to next change | `goto_next_change` |
|
||||
| `[g` | Go to previous change | `goto_prev_change` |
|
||||
| `]G` | Go to last change | `goto_last_change` |
|
||||
| `[G` | Go to first change | `goto_first_change` |
|
||||
| `]Space` | Add newline below | `add_newline_below` |
|
||||
| `[Space` | Add newline above | `add_newline_above` |
|
||||
| Key | Description | Command |
|
||||
| ----- | ----------- | ------- |
|
||||
| `]d` | Go to next diagnostic (**LSP**) | `goto_next_diag` |
|
||||
| `[d` | Go to previous diagnostic (**LSP**) | `goto_prev_diag` |
|
||||
| `]D` | Go to last diagnostic in document (**LSP**) | `goto_last_diag` |
|
||||
| `[D` | Go to first diagnostic in document (**LSP**) | `goto_first_diag` |
|
||||
| `]f` | Go to next function (**TS**) | `goto_next_function` |
|
||||
| `[f` | Go to previous function (**TS**) | `goto_prev_function` |
|
||||
| `]t` | Go to next type definition (**TS**) | `goto_next_class` |
|
||||
| `[t` | Go to previous type definition (**TS**) | `goto_prev_class` |
|
||||
| `]a` | Go to next argument/parameter (**TS**) | `goto_next_parameter` |
|
||||
| `[a` | Go to previous argument/parameter (**TS**) | `goto_prev_parameter` |
|
||||
| `]c` | Go to next comment (**TS**) | `goto_next_comment` |
|
||||
| `[c` | Go to previous comment (**TS**) | `goto_prev_comment` |
|
||||
| `]T` | Go to next test (**TS**) | `goto_next_test` |
|
||||
| `[T` | Go to previous test (**TS**) | `goto_prev_test` |
|
||||
| `]p` | Go to next paragraph | `goto_next_paragraph` |
|
||||
| `[p` | Go to previous paragraph | `goto_prev_paragraph` |
|
||||
| `]g` | Go to next change | `goto_next_change` |
|
||||
| `[g` | Go to previous change | `goto_prev_change` |
|
||||
| `]G` | Go to last change | `goto_last_change` |
|
||||
| `[G` | Go to first change | `goto_first_change` |
|
||||
| `[x` | Go to next (X)HTML element | `goto_next_xml_element` |
|
||||
| `]x` | Go to previous (X)HTML element | `goto_prev_xml_element` |
|
||||
| `]Space` | Add newline below | `add_newline_below` |
|
||||
| `[Space` | Add newline above | `add_newline_above` |
|
||||
|
||||
## Insert mode
|
||||
|
||||
|
@ -498,6 +498,8 @@ pub fn doc(&self) -> &str {
|
||||
goto_prev_comment, "Goto previous comment",
|
||||
goto_next_test, "Goto next test",
|
||||
goto_prev_test, "Goto previous test",
|
||||
goto_next_xml_element, "Goto next (X)HTML element",
|
||||
goto_prev_xml_element, "Goto previous (X)HTML element",
|
||||
goto_next_entry, "Goto next pairing",
|
||||
goto_prev_entry, "Goto previous pairing",
|
||||
goto_next_paragraph, "Goto next paragraph",
|
||||
@ -5335,6 +5337,14 @@ fn goto_prev_test(cx: &mut Context) {
|
||||
goto_ts_object_impl(cx, "test", Direction::Backward)
|
||||
}
|
||||
|
||||
fn goto_next_xml_element(cx: &mut Context) {
|
||||
goto_ts_object_impl(cx, "xml_element", Direction::Forward)
|
||||
}
|
||||
|
||||
fn goto_prev_xml_element(cx: &mut Context) {
|
||||
goto_ts_object_impl(cx, "xml_element", Direction::Backward)
|
||||
}
|
||||
|
||||
fn goto_next_entry(cx: &mut Context) {
|
||||
goto_ts_object_impl(cx, "entry", Direction::Forward)
|
||||
}
|
||||
@ -5408,6 +5418,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
|
||||
'c' => textobject_treesitter("comment", range),
|
||||
'T' => textobject_treesitter("test", range),
|
||||
'e' => textobject_treesitter("entry", range),
|
||||
'x' => textobject_treesitter("xml_element", range),
|
||||
'p' => textobject::textobject_paragraph(text, range, objtype, count),
|
||||
'm' => textobject::textobject_pair_surround_closest(
|
||||
doc.syntax(),
|
||||
@ -5452,6 +5463,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
|
||||
("e", "Data structure entry (tree-sitter)"),
|
||||
("m", "Closest surrounding pair (tree-sitter)"),
|
||||
("g", "Change"),
|
||||
("x", "X(HTML) element (tree-sitter)"),
|
||||
(" ", "... or any character acting as a pair"),
|
||||
];
|
||||
|
||||
|
@ -119,6 +119,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
|
||||
"e" => goto_prev_entry,
|
||||
"T" => goto_prev_test,
|
||||
"p" => goto_prev_paragraph,
|
||||
"x" => goto_prev_xml_element,
|
||||
"space" => add_newline_above,
|
||||
},
|
||||
"]" => { "Right bracket"
|
||||
@ -133,6 +134,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
|
||||
"e" => goto_next_entry,
|
||||
"T" => goto_next_test,
|
||||
"p" => goto_next_paragraph,
|
||||
"x" => goto_next_xml_element,
|
||||
"space" => add_newline_below,
|
||||
},
|
||||
|
||||
|
9
runtime/queries/html/textobjects.scm
Normal file
9
runtime/queries/html/textobjects.scm
Normal file
@ -0,0 +1,9 @@
|
||||
(script_element (start_tag) (_) @xml_element.inside (end_tag)) @xml_element.around
|
||||
|
||||
(style_element (start_tag) (_) @xml_element.inside (end_tag)) @xml_element.around
|
||||
|
||||
(element (start_tag) (_)* @xml_element.inside (end_tag))
|
||||
|
||||
(element) @xml_element.around
|
||||
|
||||
(comment) @comment.around
|
@ -1,3 +1,9 @@
|
||||
; See runtime/queries/ecma/README.md for more info.
|
||||
|
||||
; inherits: _jsx,_javascript,ecma
|
||||
|
||||
(jsx_self_closing_element) @xml_element.around @xml_element.inside
|
||||
|
||||
(jsx_element (jsx_opening_element) (_)* @xml_element.inside (jsx_closing_element))
|
||||
|
||||
(jsx_element) @xml_element.around
|
||||
|
5
runtime/queries/xml/textobjects.scm
Normal file
5
runtime/queries/xml/textobjects.scm
Normal file
@ -0,0 +1,5 @@
|
||||
(element (start_tag) (_)* @xml_element.inside (end_tag))
|
||||
|
||||
(element) @xml_element.around
|
||||
|
||||
(comment) @comment.around
|
Loading…
Reference in New Issue
Block a user