|
|
@ -6,7 +6,7 @@
|
|
|
|
- [User-defined Registers](#user-defined-registers)
|
|
|
|
- [User-defined Registers](#user-defined-registers)
|
|
|
|
- [Built-in Registers](#built-in-registers)
|
|
|
|
- [Built-in Registers](#built-in-registers)
|
|
|
|
- [Surround](#surround)
|
|
|
|
- [Surround](#surround)
|
|
|
|
- [Moving the Primary Selection with Syntax-tree Motions](#moving-the-primary-selection-with-syntax-tree-motions)
|
|
|
|
- [Moving the Selection with Syntax-tree Motions](#moving-the-selection-with-syntax-tree-motions)
|
|
|
|
- [Selecting and Manipulating Text with Textobjects](#selecting-and-manipulating-text-with-textobjects)
|
|
|
|
- [Selecting and Manipulating Text with Textobjects](#selecting-and-manipulating-text-with-textobjects)
|
|
|
|
- [Navigating Using Tree-sitter Textobjects](#navigating-using-tree-sitter-textobjects)
|
|
|
|
- [Navigating Using Tree-sitter Textobjects](#navigating-using-tree-sitter-textobjects)
|
|
|
|
<!--toc:end-->
|
|
|
|
<!--toc:end-->
|
|
|
@ -77,9 +77,9 @@ Surround can also act on multiple selections. For example, to change every occur
|
|
|
|
|
|
|
|
|
|
|
|
Multiple characters are currently not supported, but planned for future release.
|
|
|
|
Multiple characters are currently not supported, but planned for future release.
|
|
|
|
|
|
|
|
|
|
|
|
## Moving the Primary Selection with Syntax-tree Motions
|
|
|
|
## Moving the Selection with Syntax-tree Motions
|
|
|
|
|
|
|
|
|
|
|
|
`Alt-p`, `Alt-o`, `Alt-i`, and `Alt-n` (or `Alt` and arrow keys) allow you to move the primary
|
|
|
|
`Alt-p`, `Alt-o`, `Alt-i`, and `Alt-n` (or `Alt` and arrow keys) allow you to move the
|
|
|
|
selection according to its location in the syntax tree. For example, many languages have the
|
|
|
|
selection according to its location in the syntax tree. For example, many languages have the
|
|
|
|
following syntax for function calls:
|
|
|
|
following syntax for function calls:
|
|
|
|
|
|
|
|
|
|
|
@ -119,7 +119,7 @@ a more intuitive tree format:
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
If you have a selection that wraps `arg1` (see the tree above), and you use
|
|
|
|
If you have a selection that wraps `arg1` (see the tree above), and you use
|
|
|
|
Alt-n, it will select the next sibling in the syntax tree: `arg2`.
|
|
|
|
`Alt-n`, it will select the next sibling in the syntax tree: `arg2`.
|
|
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
```js
|
|
|
|
// before
|
|
|
|
// before
|
|
|
@ -128,7 +128,7 @@ func([arg1], arg2, arg3)
|
|
|
|
func(arg1, [arg2], arg3);
|
|
|
|
func(arg1, [arg2], arg3);
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Similarly, Alt-o will expand the selection to the parent node, in this case, the
|
|
|
|
Similarly, `Alt-o` will expand the selection to the parent node, in this case, the
|
|
|
|
arguments node.
|
|
|
|
arguments node.
|
|
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
```js
|
|
|
@ -136,15 +136,15 @@ func[(arg1, arg2, arg3)];
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
There is also some nuanced behavior that prevents you from getting stuck on a
|
|
|
|
There is also some nuanced behavior that prevents you from getting stuck on a
|
|
|
|
node with no sibling. When using Alt-p with a selection on `arg1`, the previous
|
|
|
|
node with no sibling. When using `Alt-p` with a selection on `arg1`, the previous
|
|
|
|
child node will be selected. In the event that `arg1` does not have a previous
|
|
|
|
child node will be selected. In the event that `arg1` does not have a previous
|
|
|
|
sibling, the selection will move up the syntax tree and select the previous
|
|
|
|
sibling, the selection will move up the syntax tree and select the previous
|
|
|
|
element. As a result, using Alt-p with a selection on `arg1` will move the
|
|
|
|
element. As a result, using `Alt-p` with a selection on `arg1` will move the
|
|
|
|
selection to the "func" `identifier`.
|
|
|
|
selection to the "func" `identifier`.
|
|
|
|
|
|
|
|
|
|
|
|
## Selecting and Manipulating Text with Textobjects
|
|
|
|
## Selecting and Manipulating Text with Textobjects
|
|
|
|
|
|
|
|
|
|
|
|
In Helix, Textobjects are a way to select, manipulate and operate on a piece of
|
|
|
|
In Helix, textobjects are a way to select, manipulate and operate on a piece of
|
|
|
|
text in a structured way. They allow you to refer to blocks of text based on
|
|
|
|
text in a structured way. They allow you to refer to blocks of text based on
|
|
|
|
their structure or purpose, such as a word, sentence, paragraph, or even a
|
|
|
|
their structure or purpose, such as a word, sentence, paragraph, or even a
|
|
|
|
function or block of code.
|
|
|
|
function or block of code.
|
|
|
@ -177,7 +177,7 @@ Contributions are welcome!
|
|
|
|
## Navigating Using Tree-sitter Textobject
|
|
|
|
## Navigating Using Tree-sitter Textobject
|
|
|
|
|
|
|
|
|
|
|
|
Navigating between functions, classes, parameters, and other elements is
|
|
|
|
Navigating between functions, classes, parameters, and other elements is
|
|
|
|
possible using tree-sitter and Textobject queries. For
|
|
|
|
possible using tree-sitter and textobject queries. For
|
|
|
|
example to move to the next function use `]f`, to move to previous
|
|
|
|
example to move to the next function use `]f`, to move to previous
|
|
|
|
class use `[c`, and so on.
|
|
|
|
class use `[c`, and so on.
|
|
|
|
|
|
|
|
|
|
|
@ -186,7 +186,7 @@ class use `[c`, and so on.
|
|
|
|
For the full reference see the [unimpaired][unimpaired-keybinds] section of the key bind
|
|
|
|
For the full reference see the [unimpaired][unimpaired-keybinds] section of the key bind
|
|
|
|
documentation.
|
|
|
|
documentation.
|
|
|
|
|
|
|
|
|
|
|
|
> 💡 This feature relies on tree-sitter Textobjects
|
|
|
|
> 💡 This feature relies on tree-sitter textobjects
|
|
|
|
> and requires the corresponding query file to work properly.
|
|
|
|
> and requires the corresponding query file to work properly.
|
|
|
|
|
|
|
|
|
|
|
|
[lang-support]: ./lang-support.md
|
|
|
|
[lang-support]: ./lang-support.md
|
|
|
|