HiPhish / rainbow-delimiters.nvim

Rainbow delimiters for Neovim with Tree-sitter
https://gitlab.com/HiPhish/rainbow-delimiters.nvim
Apache License 2.0
560 stars 42 forks source link

.. default-role:: code

############################### Rainbow delimiters for Neovim ###############################

This Neovim plugin provides alternating syntax highlighting (“rainbow parentheses”) for Neovim, powered by Tree-sitter_. The goal is to have a hackable plugin which allows for different configuration of queries and strategies, both globally and per file type. Users can override and extend the built-in defaults through their own configuration.

This is a fork of nvim-ts-rainbow2, which was implemented as a module for nvim-treessiter. However, since nvim-treesitter has deprecated the module system I had to create this standalone plugin.

Installation and setup ######################

Installation

Install it like any other Neovim plugin. You will need a Tree-sitter parser for each language you want to use rainbow delimiters with.

Setup

No configuration is needed to get started, this plugin has reasonable defaults which you can override. Configuration is done by setting entries in the Vim script dictionary g:rainbow_delimiters. Here is an example configuration:

.. code:: vim

let g:rainbow_delimiters = { \ 'strategy': { \ '': rainbow_delimiters#strategy.global, \ 'vim': rainbow_delimiters#strategy.local, \ }, \ 'query': { \ '': 'rainbow-delimiters', \ 'lua': 'rainbow-blocks', \ }, \ 'priority': { \ '': 110, \ 'lua': 210, \ }, \ 'highlight': [ \ 'RainbowDelimiterRed', \ 'RainbowDelimiterYellow', \ 'RainbowDelimiterBlue', \ 'RainbowDelimiterOrange', \ 'RainbowDelimiterGreen', \ 'RainbowDelimiterViolet', \ 'RainbowDelimiterCyan', \ ], \ }

The equivalent code in Lua:

.. code:: lua

-- This module contains a number of default definitions local rainbow_delimiters = require 'rainbow-delimiters'

---@type rainbow_delimiters.config vim.g.rainbow_delimiters = { strategy = { [''] = rainbow_delimiters.strategy['global'], vim = rainbow_delimiters.strategy['local'], }, query = { [''] = 'rainbow-delimiters', lua = 'rainbow-blocks', }, priority = { [''] = 110, lua = 210, }, highlight = { 'RainbowDelimiterRed', 'RainbowDelimiterYellow', 'RainbowDelimiterBlue', 'RainbowDelimiterOrange', 'RainbowDelimiterGreen', 'RainbowDelimiterViolet', 'RainbowDelimiterCyan', }, }

Please refer to the manual_ for more details. For those who prefer a setup function there is the module rainbow-delimiters.setup that accepts all the same parameters as g:rainbow-delimiters.

.. code:: lua

require('rainbow-delimiters.setup').setup { strategy = { -- ... }, query = { -- ... }, highlight = { -- ... }, }

Help wanted ###########

There are only so many languages which I understand to the point that I can write queries for them. If you want support for a new language please consider contributing code. See the CONTRIBUTING_ for details.

Status of the plugin ####################

Tree-sitter support in Neovim is still experimental. This plugin and its API should be considered stable insofar as breaking changes will only happen if changes to Neovim necessitates them.

License #######

Licensed under the Apache-2.0 license. Please see the LICENSE_ file for details.

Migrating from nvim-ts-rainbow2 ###############################

Rainbow-Delimiters uses different settings than nvim-ts-rainbow2, but converting the configuration is straight-forward. The biggest change is where the settings are stored.

The name of the default query is now rainbow-delimiters because for some languages like HTML the notion of "parentheses" does not make any sense. In HTML the only meaningful delimiter is the tag. Hence the generic notion of a "delimiter".

Attribution ###########

This is a fork of a previous Neovim plugin, the original repository is available under https://sr.ht/~p00f/nvim-ts-rainbow/.

Attributions from the original author

Huge thanks to @vigoux, @theHamsta, @sogaiu, @bfredl and @sunjon and @steelsojka for all their help

.. _Tree-sitter: https://tree-sitter.github.io/tree-sitter/ .. _nvim-treesitter: https://github.com/nvim-treesitter/nvim-treesitter .. _CONTRIBUTING: CONTRIBUTING.rst .. _LICENSE: LICENSE .. _manual: doc/rainbow-delimiters.txt .. _neovim/neovim#17099: https://github.com/neovim/neovim/pull/17099 .. _nvim-ts-rainbow2: https://gitlab.com/HiPhish/nvim-ts-rainbow2 .. _nvim-treessiter: https://github.com/nvim-treesitter/nvim-treesitter

Screenshots ###########

Bash

.. image:: https://github.com/HiPhish/rainbow-delimiters.nvim/assets/4954650/514ed2a2-68a4-427e-aef6-7ac3a02a2ba0 :alt: Screenshot of a Bash script with alternating coloured delimiters

C

.. image:: https://github.com/HiPhish/rainbow-delimiters.nvim/assets/4954650/45f8e727-d507-43df-b112-a269e7262533 :alt: Screenshot of a C program with alternating coloured delimiters

Common Lisp

.. image:: https://github.com/HiPhish/rainbow-delimiters.nvim/assets/4954650/5e7e15bb-a4e3-41e5-b3fc-3c4150ffd252 :alt: Screenshot of a Common Lisp program with alternating coloured delimiters

HTML

.. image:: https://github.com/HiPhish/rainbow-delimiters.nvim/assets/4954650/371d310c-d5a7-490d-bb55-d3fe4bd8b1a8 :alt: Screenshot of an HTML document with alternating coloured delimiters

Java

.. image:: https://github.com/HiPhish/rainbow-delimiters.nvim/assets/4954650/bb372051-ec5f-4c0b-a9b9-3cd37edafa4f :alt: Screenshot of a Java program with alternating coloured delimiters

LaTeX

Using the rainbow-blocks query to highlight the entire \begin and \end instructions.

.. image:: https://github.com/HiPhish/rainbow-delimiters.nvim/assets/4954650/0176cc0d-b729-417e-8f85-c31da70d49f5 :alt: Screenshot of a LaTeX document with alternating coloured delimiters

Lua

Using the rainbow-blocks query to highlight the entire keywords like function, if, else and end.

.. image:: https://github.com/HiPhish/rainbow-delimiters.nvim/assets/4954650/a915f7e0-b1c9-4af2-ae1d-f2f48aa325e5 :alt: Screenshot of a Lua script with alternating coloured delimiters