aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 509fb9e7d3a703b95fd45c8b44c1347f63340d1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# colorizer.lua

[![luadoc](https://img.shields.io/badge/luadoc-0.1-blue)](https://norcalli.github.io/luadoc/nvim-colorizer.lua/modules/colorizer.html)

A high-performance color highlighter for Neovim which has **no external dependencies**! Written in performant Luajit.

![Demo.mp4](https://raw.githubusercontent.com/norcalli/github-assets/master/nvim-colorizer.lua-demo-short.mp4)

## Installation and Usage

Use your plugin manager or clone directly into your `runtimepath`.

```vim
Plug 'norcalli/nvim-colorizer.lua'
```

As long as you have `malloc()` and `free()` on your system, this will work. Which includes Linux, OSX, and Windows.

One line setup. This will create an `autocmd` for `FileType *` to highlight every filetype.

```vim
lua require'colorizer'.setup()
```

### Why another highlighter?

Mostly, **RAW SPEED**.

This has no external dependencies, which means you install it and **it just works**. Other colorizers typically were synchronous and slow, as well. Being written with performance in mind and leveraging the excellent LuaJIT and a handwritten parser, updates can be done in real time. There are plugins such as [hexokinase](https://github.com/RRethy/vim-hexokinase) which have good performance, but it has some difficulty with becoming out of sync. The downside is that *this only works for Neovim*, and that will never change.

Additionally, having a Lua API that's available means users can use this as a library to do custom highlighting themselves.

### Customization

The available highlight modes are `foreground`, `background`. The default is
`background`.

Full options list:
- `no_names`: Disable parsing names like "Blue"
- `rgb_fn`: Enable parsing `rgb(...)` functions.
- `mode`: Highlight mode. Valid options: `foreground`,`background`

For basic setup, you can use a command like the following.

```lua
-- Attaches to every FileType mode
require 'colorizer'.setup()

-- Attach to certain Filetypes, add special configuration for `html`
-- Use `background` for everything else.
require 'colorizer'.setup {
  'css';
  'javascript';
  html = {
	  mode = 'foreground';
  }
}

-- Use the `default_options` as the second parameter, which uses
-- `foreground` for every mode. This is the inverse of the previous
-- setup configuration.
require 'colorizer'.setup({
  'css';
  'javascript';
  html = { mode = 'background' };
}, { mode = 'foreground' })

-- Use the `default_options` as the second parameter, which uses
-- `foreground` for every mode. This is the inverse of the previous
-- setup configuration.
require 'colorizer'.setup {
  '*'; -- Highlight all files, but customize some others.
  css = { rgb_fn = true; }; -- Enable parsing rgb(...) functions in css.
  html = { no_names = true; } -- Disable parsing "names" like Blue or Gray
}
```


For lower level interface, see the [LuaDocs for API details](https://norcalli.github.io/luadoc/nvim-colorizer.lua/modules/colorizer.html) or use `:h colorizer.lua` once installed.

## TODO

- [ ] Add more display modes?
- [ ] Use a more space efficient trie implementation.
- [ ] Create a COMMON_SETUP which does obvious things like enable `rgb_fn` for css