*nvim-treesitter.txt* Treesitter parser and query installer for Neovim Authors: Kiyan Yazdani Thomas Vigouroux Stephan Seitz Steven Sojka Santos Gallegos 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 :TSInstallInfo < 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 into. -- 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" }, -- Install parsers synchronously (only applied to `ensure_installed`) sync_install = false, -- Automatically install missing parsers when entering buffer auto_install = false, -- List of parsers to ignore installing (for "core" etc.) ignore_install = { "javascript" }, < See |nvim-treesitter-commands| for a list of all available commands. ============================================================================== 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. *:TSInstallSync* :TSInstallSync {language} ... ~ Perform the |:TSInstall| operation synchronously. *:TSInstallInfo* :TSInstallInfo ~ List information about currently 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. *:TSUpdateSync* :TSUpdateSync {language} ... ~ Perform the |:TSUpdate| operation synchronously. *: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/.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: # 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: