# headlines.nvim **Repository Path**: rootquan/headlines.nvim ## Basic Information - **Project Name**: headlines.nvim - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-22 - **Last Updated**: 2026-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Headlines.nvim This plugin adds highlights for text filetypes, like `markdown`, `orgmode`, and `neorg`. 1. Background highlighting for headlines 2. Background highlighting for code blocks 3. Whole window separator for horizontal line 4. Bar for Quotes Treesitter grammar needs to be installed for the languages. > [!NOTE] > Consider using [MeanderingProgrammer/render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) instead. > It does everything headlines.nvim does and more. > I will continue to maintain headlines.nvim, but I am unlikely to add more features here. ## Install Use your favorite plugin manager to install. #### Example with Packer [wbthomason/packer.nvim](https://github.com/wbthomason/packer.nvim) ```lua -- init.lua require("packer").startup(function() use { "lukas-reineke/headlines.nvim", after = "nvim-treesitter", config = function() require("headlines").setup() end, } end) ``` #### Example with Plug [junegunn/vim-plug](https://github.com/junegunn/vim-plug) ```vim " init.vim call plug#begin('~/.vim/plugged') Plug 'lukas-reineke/headlines.nvim' call plug#end() lua << EOF require("headlines").setup() EOF ``` #### Example with Lazy [folke/lazy.nvim](https://github.com/folke/lazy.nvim) ```lua -- init.lua require("lazy").setup { { "lukas-reineke/headlines.nvim", dependencies = "nvim-treesitter/nvim-treesitter", config = true, -- or `opts = {}` }, } ``` ## Setup To configure headlines.nvim pass a config table into the setup function.
Default config: ```lua require("headlines").setup { markdown = { query = vim.treesitter.parse_query( "markdown", [[ (atx_heading [ (atx_h1_marker) (atx_h2_marker) (atx_h3_marker) (atx_h4_marker) (atx_h5_marker) (atx_h6_marker) ] @headline) (thematic_break) @dash (fenced_code_block) @codeblock (block_quote_marker) @quote (block_quote (paragraph (inline (block_continuation) @quote))) (block_quote (paragraph (block_continuation) @quote)) (block_quote (block_continuation) @quote) ]] ), headline_highlights = { "Headline" }, bullet_highlights = { "@text.title.1.marker.markdown", "@text.title.2.marker.markdown", "@text.title.3.marker.markdown", "@text.title.4.marker.markdown", "@text.title.5.marker.markdown", "@text.title.6.marker.markdown", }, bullets = { "◉", "○", "✸", "✿" }, codeblock_highlight = "CodeBlock", dash_highlight = "Dash", dash_string = "-", quote_highlight = "Quote", quote_string = "┃", fat_headlines = true, fat_headline_upper_string = "▄", fat_headline_lower_string = "▀", }, rmd = { query = vim.treesitter.parse_query( "markdown", [[ (atx_heading [ (atx_h1_marker) (atx_h2_marker) (atx_h3_marker) (atx_h4_marker) (atx_h5_marker) (atx_h6_marker) ] @headline) (thematic_break) @dash (fenced_code_block) @codeblock (block_quote_marker) @quote (block_quote (paragraph (inline (block_continuation) @quote))) (block_quote (paragraph (block_continuation) @quote)) (block_quote (block_continuation) @quote) ]] ), treesitter_language = "markdown", headline_highlights = { "Headline" }, bullet_highlights = { "@text.title.1.marker.markdown", "@text.title.2.marker.markdown", "@text.title.3.marker.markdown", "@text.title.4.marker.markdown", "@text.title.5.marker.markdown", "@text.title.6.marker.markdown", }, bullets = { "◉", "○", "✸", "✿" }, codeblock_highlight = "CodeBlock", dash_highlight = "Dash", dash_string = "-", quote_highlight = "Quote", quote_string = "┃", fat_headlines = true, fat_headline_upper_string = "▄", fat_headline_lower_string = "▀", }, norg = { query = vim.treesitter.parse_query( "norg", [[ [ (heading1_prefix) (heading2_prefix) (heading3_prefix) (heading4_prefix) (heading5_prefix) (heading6_prefix) ] @headline (weak_paragraph_delimiter) @dash (strong_paragraph_delimiter) @doubledash ([(ranged_tag name: (tag_name) @_name (#eq? @_name "code") ) (ranged_verbatim_tag name: (tag_name) @_name (#eq? @_name "code") )] @codeblock (#offset! @codeblock 0 0 1 0)) (quote1_prefix) @quote ]] ), headline_highlights = { "Headline" }, bullet_highlights = { "@neorg.headings.1.prefix", "@neorg.headings.2.prefix", "@neorg.headings.3.prefix", "@neorg.headings.4.prefix", "@neorg.headings.5.prefix", "@neorg.headings.6.prefix", }, bullets = { "◉", "○", "✸", "✿" }, codeblock_highlight = "CodeBlock", dash_highlight = "Dash", dash_string = "-", doubledash_highlight = "DoubleDash", doubledash_string = "=", quote_highlight = "Quote", quote_string = "┃", fat_headlines = true, fat_headline_upper_string = "▄", fat_headline_lower_string = "▀", }, org = { query = vim.treesitter.parse_query( "org", [[ (headline (stars) @headline) ( (expr) @dash (#match? @dash "^-----+$") ) (block name: (expr) @_name (#match? @_name "(SRC|src)") ) @codeblock (paragraph . (expr) @quote (#eq? @quote ">") ) ]] ), headline_highlights = { "Headline" }, bullet_highlights = { "@org.headline.level1", "@org.headline.level2", "@org.headline.level3", "@org.headline.level4", "@org.headline.level5", "@org.headline.level6", "@org.headline.level7", "@org.headline.level8", }, bullets = { "◉", "○", "✸", "✿" }, codeblock_highlight = "CodeBlock", dash_highlight = "Dash", dash_string = "-", quote_highlight = "Quote", quote_string = "┃", fat_headlines = true, fat_headline_upper_string = "▄", fat_headline_lower_string = "▀", }, } ``` To change any setting, pass a table with that option. Or add a completely new filetype. You can turn off highlighting by removing that part from the query, or setting highlight to `false`. ```lua require("headlines").setup { markdown = { headline_highlights = false, }, yaml = { query = vim.treesitter.parse_query( "yaml", [[ ( (comment) @dash (#match? @dash "^# ---+$") ) ]] ), dash_highlight = "Dash", }, } ``` Please see `:help headlines.txt` for more details. ## Screenshots All screenshots use [my custom onedark color scheme](https://github.com/lukas-reineke/onedark.nvim). ### Simple org file ```lua vim.cmd [[highlight Headline1 guibg=#1e2718]] vim.cmd [[highlight Headline2 guibg=#21262d]] vim.cmd [[highlight CodeBlock guibg=#1c1c1c]] vim.cmd [[highlight Dash guibg=#D19A66 gui=bold]] require("headlines").setup { org = { headline_highlights = { "Headline1", "Headline2" }, }, } ``` Screenshot