*nvim-treesitter* Minimum version of neovim: nightly Authors: Yazdani Kiyan Vigouroux Thomas https://github.com/nvim-treesitter/nvim-treesitter/graphs/contributors Type |gO| to see the table of contents. ============================================================================== INTRODUCTION *nvim-treesitter-intro* nvim-treesitter wraps the Neovim treesitter API to provide functionnalities such as highlighting and incremental selection, and a command to easily install parsers. ============================================================================== QUICK START *nvim-treesitter-quickstart* Install the parser for your language > :TSInstall {language} < To get a list of supported languages > :TSInstallInfo < By default, everything is disabled. To enable supported features, put this in your `init.vim` file: > lua < lua < lua <a`, `a` `` (control + a), `` (alt + n), `` (enter), etc. External plugins can provide their own modules with their own options, those can also be configured using the `nvim-treesitter.configs.setup` function. ------------------------------------------------------------------------------ HIGHLIGHT *nvim-treesitter-highlight-mod* Consistent syntax highlighting. Query files: `highlights.scm`. Supported options: - enable: `true` or `false`. - disable: list of languages. - custom_captures: A map of user defined capture groups to highlight groups. See |nvim-treesitter-query-extensions|. > lua < lua < lua < lua < lua <` . No default mapping - list_definitions: list all definitions from the current file. Defaults to `gnD`. - goto_next_usage: go to next usage of identifier under the cursor. Defaults to ``. - goto_previous_usage: go to previous usage of identifier. Defaults to ``. > lua < lua < lua <a"] = "@parameter.inner", }, swap_previous = { ["A"] = "@parameter.inner", }, }, }, } EOF < *nvim-treesitter-text-objects-move-submod* Go to next/previous text object~ Define your own mappings to jump to the next or previous text object. This is similar to |]m|, |[m|, |]M|, |[M| Neovim's mappings to jump to the next or previous function. Query files: `textobjects.scm`. Supported options: - enable: `true` or `false`. - disable: list of languages. - goto_next_start: map of keymaps to a tree-sitter capture group (`@function.outer`). - goto_next_end: same as goto_next_start, but it jumps to the start of the text object. - goto_previous_start: same as goto_next_start, but it jumps to the previous text object. - goto_previous_end: same as goto_next_end, but it jumps to the previous text object. > lua < local ts_utils = require 'nvim-treesitter.ts_utils' < Methods *ts_utils.get_node_at_cursor* get_node_at_cursor(winnr)~ `winnr` will be 0 if nil. Returns the node under the cursor. *ts_utils.get_node_text* get_node_text(node, bufnr)~ Returns the text content of a `node`. *ts_utils.is_parent* is_parent(dest, source)~ Determines whether `dest` is a parent of `source`. Returns a boolean. *ts_utils.get_named_children* get_named_children(node)~ Returns a table of named children of `node`. *ts_utilsiget_next_node* get_next_node(node, allow_switch_parent, allow_next_parent)~ Returns the next node within the same parent. If no node is found, returns `nil`. If `allow_switch_parent` is true, it will allow switching parent when the node is the last node. If `allow_next_parent` is true, it will allow next parent if the node is the last node and the next parent doesn't have children. *ts_utils.get_previous_node* get_previous_node(node, allow_switch_parents, allow_prev_parent)~ Returns the previous node within the same parent. `allow_switch_parent` and `allow_prev_parent` follow the same rule as |ts_utils.get_next_node| but if the node is the first node. *ts_utils.goto_node* goto_node(node, goto_end, avoid_set_jump)~ Sets cursor to the position of `node` in the current windows. If `goto_end` is truthy, the cursor is set to the end the node range. Setting `avoid_set_jump` to `true`, avoids setting the current cursor position to the jump list. ============================================================================== FUNCTIONS *nvim-treesitter-functions* *nvim_treesitter#statusline()* nvim_treesitter#statusline(size)~ Returns a string describing the current position in the syntax tree. This could be used as a statusline indicator. Note: The `size` argument is optional. When specified, the string will not be longer than `size`. *nvim_treesitter#foldexpr()* nvim_treesitter#foldexpr()~ Functions to be used to determine the fold level at a given line number. To use it: > set foldmethod=expr set foldexpr=nvim_treesitter#foldexpr() < This will respect your 'foldnestmax' setting. Note: This is highly experimental, and folding can break on some types of edits. If you encounter such breakage, hiting `zx` should fix folding. In any case, feel free to open an issue with the reproducing steps. ============================================================================== HIGHLIGHTS *nvim-treesitter-highlights* `TSError` *hl-TSError* For syntax/parser errors. `TSPunctDelimiter` *hl-TSPunctDelimiter* For delimiters ie: `.` `TSPunctBracket` *hl-TSPunctBracket* For brackets and parens. `TSPunctSpecial` *hl-TSPunctSpecial* For special punctutation that does not fall in the catagories before. `TSConstant` *hl-TSConstant* For constants `TSConstBuiltin` *hl-TSConstBuiltin* For constant that are built in the language: `nil` in Lua. `TSConstMacro` *hl-TSConstMacro* For constants that are defined by macros: `NULL` in C. `TSString` *hl-TSString* For strings. `TSStringRegex` *hl-TSStringRegex* For regexes. `TSStringEscape` *hl-TSStringEscape* For escape characters within a string. `TSCharacter` *hl-TSCharacter* For characters. `TSNumber` *hl-TSNumber* For integers. `TSBoolean` *hl-TSBoolean* For booleans. `TSFloat` *hl-TSFloat* For floats. `TSFunction` *hl-TSFunction* For function (calls and definitions). `TSFuncBuiltin` *hl-TSFuncBuiltin* For builtin functions: `table.insert` in Lua. `TSFuncMacro` *hl-TSFuncMacro* For macro defined fuctions (calls and definitions): each `macro_rules` in Rust. `TSParameter` *hl-TSParameter* For parameters of a function. `TSParameterReference` *hl-TSParameterReference* For references to parameters of a function. `TSMethod` *hl-TSMethod* For method calls and definitions. `TSField` *hl-TSField* For fields. `TSProperty` *hl-TSProperty* Same as `TSField`. `TSConstructor` *hl-TSConstructor* For constructor calls and definitions: `{}` in Lua, and Java constructors. `TSConditional` *hl-TSConditional* For keywords related to conditionnals. `TSRepeat` *hl-TSRepeat* For keywords related to loops. `TSLabel` *hl-TSLabel* For labels: `label:` in C and `:label:` in Lua. `TSOperator` *hl-TSOperator* For any operator: `+`, but also `->` and `*` in C. `TSKeyword` *hl-TSKeyword* For keywords that don't fall in previous categories. `TSKeywordFunction` *hl-TSKeywordFunction* For keywords used to define a fuction. `TSException` *hl-TSException* For exception related keywords. `TSType` *hl-TSType* For types. `TSTypeBuiltin` *hl-TSTypeBuiltin* For builtin types (you guessed it, right ?). `TSStructure` *hl-TSStructure* This is left as an exercise for the reader. `TSInclude` *hl-TSInclude* For includes: `#include` in C, `use` or `extern crate` in Rust, or `require` in Lua. `TSAnnotation` *hl-TSAnnotation* For C++/Dart attributes, annotations that can be attached to the code to denote some kind of meta information. `TSText` *hl-TSText* For strings considered text in a markup language. `TSStrong` *hl-TSStrong* For text to be represented with strong. `TSEmphasis` *hl-TSEmphasis* For text to be represented with emphasis. `TSUnderline` *hl-TSUnderline* For text to be represented with an underline. `TSTitle` *hl-TSTitle* Text that is part of a title. `TSLiteral` *hl-TSLiteral* Literal text. `TSURI` *hl-TSURI* Any URI like a link or email. `TSVariable` *hl-TSVariable* Any variable name that does not have another highlight. `TSVariableBuiltin` *hl-TSVariableBuiltin* Variable names that are defined by the languages, like `this` or `self`. ============================================================================== MODULE-HIGHLIGHTS *nvim-treesitter-module-highlights* Apart from the general purpose highlights in |nvim-treesitter-highlights|, some submodules use their own highlight groups to visualize additional information. `TSDefinition` *hl-TSDefinition* Used by refactor.highlight_definitions to highlight the definition of the symbol under the cursor. `TSDefinitionUsage` *hl-TSDefinitionUsage* Used by refactor.highlight_definitions to highlight usages of the symbol under the cursor. `TSCurrentScope` *hl-TSCurrentScope* Used by refactor.highlight_current_scope to highlight the current scope. ============================================================================== PERFORMANCE *nvim-treesitter-performance* `nvim-treesitter` checks the 'runtimepath' on startup in order to discover available parsers and queries and index them. As a consequence, a very long 'runtimepath' might result in delayed startup times. vim:tw=78:ts=8:expandtab:noet:ft=help:norl: