mirror of
https://github.com/neovim/neovim.git
synced 2025-09-13 06:48:17 +00:00
docs: apply current colorscheme to default highlight groups
Problem: Not all default highlight groups show their actual colors. Solution: Refactor `vimhelp.lua` and apply it to all relevant lists (UI groups, syntax groups, treesitter groups, LSP groups, diagnostic groups).
This commit is contained in:
@@ -480,7 +480,7 @@ Use |LspTokenUpdate| and |vim.lsp.semantic_tokens.highlight_token()| for more
|
|||||||
complex highlighting.
|
complex highlighting.
|
||||||
|
|
||||||
The following groups are linked by default to standard |group-name|s:
|
The following groups are linked by default to standard |group-name|s:
|
||||||
>
|
|
||||||
@lsp.type.class Structure
|
@lsp.type.class Structure
|
||||||
@lsp.type.decorator Function
|
@lsp.type.decorator Function
|
||||||
@lsp.type.enum Structure
|
@lsp.type.enum Structure
|
||||||
@@ -496,7 +496,7 @@ The following groups are linked by default to standard |group-name|s:
|
|||||||
@lsp.type.type Type
|
@lsp.type.type Type
|
||||||
@lsp.type.typeParameter TypeDef
|
@lsp.type.typeParameter TypeDef
|
||||||
@lsp.type.variable Identifier
|
@lsp.type.variable Identifier
|
||||||
<
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
EVENTS *lsp-events*
|
EVENTS *lsp-events*
|
||||||
|
|
||||||
|
@@ -225,7 +225,7 @@ you can see the actual color, except for "Ignore"):
|
|||||||
Type int, long, char, etc.
|
Type int, long, char, etc.
|
||||||
StorageClass static, register, volatile, etc.
|
StorageClass static, register, volatile, etc.
|
||||||
Structure struct, union, enum, etc.
|
Structure struct, union, enum, etc.
|
||||||
Typedef A typedef
|
Typedef a typedef
|
||||||
|
|
||||||
Special any special symbol
|
Special any special symbol
|
||||||
SpecialChar special character in a constant
|
SpecialChar special character in a constant
|
||||||
|
@@ -393,7 +393,7 @@ instance, to highlight comments differently per language: >vim
|
|||||||
hi link @comment.doc.java String
|
hi link @comment.doc.java String
|
||||||
<
|
<
|
||||||
The following captures are linked by default to standard |group-name|s:
|
The following captures are linked by default to standard |group-name|s:
|
||||||
>
|
|
||||||
@text.literal Comment
|
@text.literal Comment
|
||||||
@text.reference Identifier
|
@text.reference Identifier
|
||||||
@text.title Title
|
@text.title Title
|
||||||
@@ -444,7 +444,7 @@ The following captures are linked by default to standard |group-name|s:
|
|||||||
@preproc PreProc
|
@preproc PreProc
|
||||||
@debug Debug
|
@debug Debug
|
||||||
@tag Tag
|
@tag Tag
|
||||||
<
|
|
||||||
*treesitter-highlight-spell*
|
*treesitter-highlight-spell*
|
||||||
The special `@spell` capture can be used to indicate that a node should be
|
The special `@spell` capture can be used to indicate that a node should be
|
||||||
spell checked by Nvim's builtin |spell| checker. For example, the following
|
spell checked by Nvim's builtin |spell| checker. For example, the following
|
||||||
|
@@ -2,6 +2,27 @@
|
|||||||
vim.treesitter.start()
|
vim.treesitter.start()
|
||||||
|
|
||||||
-- add custom highlights for list in `:h highlight-groups`
|
-- add custom highlights for list in `:h highlight-groups`
|
||||||
if vim.endswith(vim.fs.normalize(vim.api.nvim_buf_get_name(0)), '/doc/syntax.txt') then
|
local bufname = vim.fs.normalize(vim.api.nvim_buf_get_name(0))
|
||||||
require('vim.vimhelp').highlight_groups()
|
if vim.endswith(bufname, '/doc/syntax.txt') then
|
||||||
|
require('vim.vimhelp').highlight_groups({
|
||||||
|
{ start = [[\*group-name\*]], stop = '^======', match = '^(%w+)\t' },
|
||||||
|
{ start = [[\*highlight-groups\*]], stop = '^======', match = '^(%w+)\t' },
|
||||||
|
})
|
||||||
|
elseif vim.endswith(bufname, '/doc/treesitter.txt') then
|
||||||
|
require('vim.vimhelp').highlight_groups({
|
||||||
|
{
|
||||||
|
start = [[\*treesitter-highlight-groups\*]],
|
||||||
|
stop = [[\*treesitter-highlight-spell\*]],
|
||||||
|
match = '^@[%w%p]+',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
elseif vim.endswith(bufname, '/doc/diagnostic.txt') then
|
||||||
|
require('vim.vimhelp').highlight_groups({
|
||||||
|
{ start = [[\*diagnostic-highlights\*]], stop = '^======', match = '^(%w+)' },
|
||||||
|
})
|
||||||
|
elseif vim.endswith(bufname, '/doc/lsp.txt') then
|
||||||
|
require('vim.vimhelp').highlight_groups({
|
||||||
|
{ start = [[\*lsp-highlight\*]], stop = '^------', match = '^(%w+)' },
|
||||||
|
{ start = [[\*lsp-semantic-highlight\*]], stop = '^======', match = '^@[%w%p]+' },
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
@@ -2,28 +2,30 @@
|
|||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
-- Called when editing the doc/syntax.txt file
|
--- Apply current colorscheme to lists of default highlight groups
|
||||||
function M.highlight_groups()
|
---
|
||||||
local save_cursor = vim.fn.getcurpos()
|
--- Note: {patterns} is assumed to be sorted by occurrence in the file.
|
||||||
|
--- @param patterns {start:string,stop:string,match:string}[]
|
||||||
local start_lnum = vim.fn.search([[\*highlight-groups\*]], 'c')
|
function M.highlight_groups(patterns)
|
||||||
if start_lnum == 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local end_lnum = vim.fn.search('^======')
|
|
||||||
if end_lnum == 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local ns = vim.api.nvim_create_namespace('vimhelp')
|
local ns = vim.api.nvim_create_namespace('vimhelp')
|
||||||
vim.api.nvim_buf_clear_namespace(0, ns, 0, -1)
|
vim.api.nvim_buf_clear_namespace(0, ns, 0, -1)
|
||||||
|
|
||||||
|
local save_cursor = vim.fn.getcurpos()
|
||||||
|
|
||||||
|
for _, pat in pairs(patterns) do
|
||||||
|
local start_lnum = vim.fn.search(pat.start, 'c')
|
||||||
|
local end_lnum = vim.fn.search(pat.stop)
|
||||||
|
if start_lnum == 0 or end_lnum == 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
for lnum = start_lnum, end_lnum do
|
for lnum = start_lnum, end_lnum do
|
||||||
local word = vim.api.nvim_buf_get_lines(0, lnum - 1, lnum, true)[1]:match('^(%w+)\t')
|
local word = vim.api.nvim_buf_get_lines(0, lnum - 1, lnum, true)[1]:match(pat.match)
|
||||||
if vim.fn.hlexists(word) ~= 0 then
|
if vim.fn.hlexists(word) ~= 0 then
|
||||||
vim.api.nvim_buf_set_extmark(0, ns, lnum - 1, 0, { end_col = #word, hl_group = word })
|
vim.api.nvim_buf_set_extmark(0, ns, lnum - 1, 0, { end_col = #word, hl_group = word })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
vim.fn.setpos('.', save_cursor)
|
vim.fn.setpos('.', save_cursor)
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user