-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnvim-treesitter.txt
204 lines (158 loc) · 5.8 KB
/
nvim-treesitter.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
*nvim-treesitter.txt* Treesitter parser and query installer for Neovim
Authors:
Kiyan Yazdani <[email protected]>
Thomas Vigouroux <[email protected]>
Stephan Seitz <[email protected]>
Steven Sojka <[email protected]>
Santos Gallegos <[email protected]>
https://github.com/nvim-treesitter/nvim-treesitter/graphs/contributors
Type |gO| to see the table of contents.
==============================================================================
INTRODUCTION *nvim-treesitter-intro*
Nvim-treesitter provides functionalities for managing treesitter parsers and
compatible queries for core features (highlighting, injections, fold, indent).
WARNING: This is work in progress and requires the latest commit on Neovim
`master`.
==============================================================================
QUICK START *nvim-treesitter-quickstart*
Install the parser for your language
>vim
:TSInstall {language}
<
To get a list of supported languages
>vim
:TSInstall <tab>
<
To install supported parsers and queries, put this in your `init.lua` file:
>lua
require'nvim-treesitter.configs'.setup {
-- A directory to install the parsers and queries to.
-- Defaults to the `stdpath('data')/site` dir.
install_dir = "/some/path/to/store/parsers",
-- A list of parser names, or "core", "stable", "community", "unstable"
ensure_install = { "core", "rust" },
-- Automatically install missing parsers when entering buffer
auto_install = false,
-- List of parsers to ignore installing (for "core" etc.)
ignore_install = { "javascript" },
}
<
To check installed parsers and queries, use `:checkhealth nvim-treesitter`.
==============================================================================
COMMANDS *nvim-treesitter-commands*
*:TSInstall*
:TSInstall {language} ... ~
Install one or more treesitter parsers.
You can use |:TSInstall| `all` to install all parsers. Use |:TSInstall!| to
force the reinstallation of already installed parsers.
*:TSUpdate*
:TSUpdate {language} ... ~
Update the installed parser for one more {language} or all installed parsers
if {language} is omitted. The specified parser is installed if it is not already
installed.
*:TSUninstall*
:TSUninstall {language} ... ~
Deletes the parser for one or more {language}. You can use 'all' for language
to uninstall all parsers.
==============================================================================
INDENTATION *nvim-treesitter-indentation*
Indentation based on treesitter for the |=| operator.
NOTE: this is an experimental feature and will be upstreamed to Neovim when
stable.
To enable it for a supported parser, add the following to a corresponding
`FileType` autocommand or `ftplugin/<lang>.lua`: >lua
vim.bo.indentexpr = 'v.lua:require'nvim-treesitter'.indentexpr()'
<
Indentation for a language is controlled by `indents.scm` queries. The
following captures are supported:
`@indent` *nvim-treesitter-indentation-queries*
Queries can use the following captures: `@indent.begin` and `@indent.dedent`,
`@indent.branch`, `@indent.end` or `@indent.align`. An `@indent.ignore` capture tells
treesitter to ignore indentation and a `@indent.zero` capture sets
the indentation to 0.
`@indent.begin` *nvim-treesitter-indentation-indent.begin*
The `@indent.begin` specifies that the next line should be indented. Multiple
indents on the same line get collapsed. Eg.
>query
(
(if_statement)
(ERROR "else") @indent.begin
)
<
Indent can also have `indent.immediate` set using a `#set!` directive, which
permits the next line to indent even when the block intended to be indented
has no content yet, improving interactive typing.
eg for python:
>query
((if_statement) @indent.begin
(#set! indent.immediate 1))
<
Will allow:
>python
if True:<CR>
# Auto indent to here
`@indent.end` *nvim-treesitter-indentation-indent.end*
An `@indent.end` capture is used to specify that the indented region ends and
any text subsequent to the capture should be dedented.
`@indent.branch` *nvim-treesitter-indentation-indent.branch*
An `@indent.branch` capture is used to specify that a dedented region starts
at the line including the captured nodes.
`@indent.dedent` *nvim-treesitter-indentation-indent.dedent*
A `@indent.dedent` capture specifies dedenting starting on the next line.
>
`@indent.align` *nvim-treesitter-indentation-aligned_indent.align*
Aligned indent blocks may be specified with the `@indent.align` capture.
This permits
>
foo(a,
b,
c)
<
As well as
>
foo(
a,
b,
c)
<
and finally
>
foo(
a,
b,
c
)
<
To specify the delimiters to use `indent.open_delimiter` and
`indent.close_delimiter` should be used. Eg.
>query
((argument_list) @indent.align
(#set! indent.open_delimiter "(")
(#set! indent.close_delimiter ")"))
<
For some languages the last line of an `indent.align` block must not be
the same indent as the natural next line.
For example in python:
>python
if (a > b and
c < d):
pass
Is not correct, whereas
>python
if (a > b and
c < d):
pass
Would be correctly indented. This behavior may be chosen using
`indent.avoid_last_matching_next`. Eg.
>query
(if_statement
condition: (parenthesized_expression) @indent.align
(#set! indent.open_delimiter "(")
(#set! indent.close_delimiter ")")
(#set! indent.avoid_last_matching_next 1)
)
<
Could be used to specify that the last line of an `@indent.align` capture
should be additionally indented to avoid clashing with the indent of the first
line of the block inside an if.
vim:tw=78:ts=8:expandtab:noet:ft=help:norl: