[![Gitter](https://badges.gitter.im/nvim-treesitter/community.svg)](https://gitter.im/nvim-treesitter/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ![Linting and style checking](https://github.com/nvim-treesitter/nvim-treesitter/workflows/Linting%20and%20style%20checking/badge.svg?branch=master) ![Check loading of syntax files](https://github.com/nvim-treesitter/nvim-treesitter/workflows/Check%20loading%20of%20syntax%20files/badge.svg) # nvim-treesitter Treesitter configurations and abstraction layer for Neovim. ![Nvim-treesitter](nvim-treesitter.png) Traditional highlighting (left) vs Treesitter-based highlighting (right). **Warning: Treesitter and Treesitter highlighting are an experimental feature of nightly versions of Neovim. Please consider the experience with this plug-in as experimental until Neovim 0.5 is released!** # Quickstart ## Requirements - Neovim [nightly](https://github.com/neovim/neovim#install-from-source) - `git` in your path. - A C compiler in your path. ## Installation You can install `nvim-treesitter` with your favorite package manager, or using the default `pack` feature of Neovim! ### Using a package manager Simply add these lines to your `init.vim` : ```vim Plug 'nvim-treesitter/nvim-treesitter' ``` ### Using Neovim `pack` feature We highly recommend reading `:h packages` to learn more about this feature, but you can still follow these steps: ```sh $ mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter/start $ cd ~/.local/share/nvim/site/pack/nvim-treesitter/start $ git clone https://github.com/nvim-treesitter/nvim-treesitter.git ``` ## Adding parsers Treesitter uses a different _parser_ for every language. It can be quite a pain to install, but fortunately `nvim-treesitter` provides two command to tackle this issue: - `TSInstall {language}` to install one or more parsers. `TSInstall ` will give you a list of supported languages, or select `all` to install them all. - `TSInstallInfo` to know which parser is installed. Let's say you need parsers for `lua`, this is how you do with these commands: ```vim :TSInstall lua Downloading... Compiling... Treesitter parser for lua has been installed ``` Cool, lets see which parsers are installed: ```vim :TSInstallInfo lua [✓] installed c [✗] installed html [✗] not installed typescript [✗] not installed ... ``` And now you should be ready to use every functionality `nvim-treesitter` provides! ## Setup All modules are disabled by default, so you'll need to activate them by putting this in your `init.vim`: ```lua lua </after/queries/lua/highlights.scm` to add more queries to lua highlights. You can also manually add query paths to the runtime path by adding this to your vim config `set rtp+='path/to/queries'`. ## Troubleshooting Before doing anything make sure you have the latest version of this plugin and run `:checkhealth nvim_treesitter`. This will help you find where the bug might come from. ### Feature `X` does not work for `{language}`... First, check the `## {language} parser healthcheck` section of `:checkhealth` if you have any warning. If you do, it's highly possible that this is the cause of the problem. If everything is okay, then it might be an actual error. In both cases, feel free to [open an issue here](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose). ### I get `Error detected while processing .../plugin/nvim-treesitter.vim` everytime I open Neovim This is probably due to a change in a parser's grammar or its queries. Try updating the parser that you suspect has changed (`:TSUpdate {language}`) or all of them (`:TSUpdate`). If the error persists after updating all parsers, please [open an issue](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose). ### I experience weird highlighting issues similar to [#78](https://github.com/nvim-treesitter/nvim-treesitter/issues/78) This is a well known issue, which arise when the tree and the buffer are getting out of sync. As this issue comes from upstream, we don't have any finite fix. To get around this, you can force reparsing the buffer with this command: ```vim :write | edit | TSBufEnable highlight ``` This will save, restore and enable highlighting for the current buffer, fixing the issue.