![Nvim-treesitter](nvim-treesitter.png) Traditionnal highlighting (left) vs Treesitter-based highlighting (right). [![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. **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 is using 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` to install one or more parser. You can use `TSInstall all` to download all parsers. - `TSInstallInfo` to know which parser is installed. Let's say you need parsers for `lua`, `c`, and `python`, this is how you do with these commands: ```vim :TSInstall c Downloading... Compiling... Treesitter parser for c has been installed :TSInstall lua Downloading... Compiling... Treesitter parser for lua has been installed :TSInstall python Downloading... Compiling... Treesitter parser for python has been installed ``` Cool, lets see which parsers are installed: ```vim :TSInstallInfo csharp [✗] not installed html [✗] not installed typescript [✗] not installed c [✓] installed swift [✗] not installed java [✗] not installed python [✓] installed cpp [✗] not installed lua [✓] installed ruby [✗] not installed ocaml [✗] not installed go [✗] not installed rust [✗] not installed json [✗] not installed javascript [✗] not installed css [✗] not installed julia [✗] not installed php [✗] not installed bash [✗] not installed tsx [✗] not installed ``` And now you should be able to use every functionality `nvim-treesitter` provides! ## Setup 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 run `:checkhealth nvim_treesitter`. This will help you find where the bug might come from. ### Feature `X` does not work for language `Y`... First, check the `## Y 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. ### I am expreiencing weird highlighting issues as in [#78[(https://github.com/nvim-treesitter/nvim-treesitter/issues/78) This is a weell known issue, that is caused by the tree and the buffer getting out of sync. As this issue comes form upstream, we don't have any definitive fix. One thing you can do to force reparsing the whole buffer is to run : ```vim :write | edit | TSBufEnable highlight ``` This will save, restore and enable highlighting for the current buffer, fixing the issue.