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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
" Vim syntax file
" Language: none; used to see highlighting
" Maintainer: Ronald Schild <rs@scutum.de>
" Last Change: 2001 Sep 02
" Version: 5.4n.1
" To see your current highlight settings, do
" :so $VIMRUNTIME/syntax/hitest.vim
" save global options and registers
let s:hidden = &hidden
let s:lazyredraw = &lazyredraw
let s:more = &more
let s:report = &report
let s:shortmess = &shortmess
let s:wrapscan = &wrapscan
let s:register_a = @a
let s:register_se = @/
" set global options
set hidden lazyredraw nomore report=99999 shortmess=aoOstTW wrapscan
" print current highlight settings into register a
redir @a
highlight
redir END
" Open a new window if the current one isn't empty
if line("$") != 1 || getline(1) != ""
new
endif
" edit temporary file
edit Highlight\ test
" set local options
setlocal autoindent noexpandtab formatoptions=t shiftwidth=16 noswapfile tabstop=16
let &textwidth=&columns
" insert highlight settings
% delete
put a
" remove the colored xxx items
g/xxx /s///e
" remove color settings (not needed here)
global! /links to/ substitute /\s.*$//e
" move linked groups to the end of file
global /links to/ move $
" move linked group names to the matching preferred groups
% substitute /^\(\w\+\)\s*\(links to\)\s*\(\w\+\)$/\3\t\2 \1/e
global /links to/ normal mz3ElD0#$p'zdd
" delete empty lines
global /^ *$/ delete
" precede syntax command
% substitute /^[^ ]*/syn keyword &\t&/
" execute syntax commands
syntax clear
% yank a
@a
" remove syntax commands again
% substitute /^syn keyword //
" pretty formatting
global /^/ exe "normal Wi\<CR>\t\eAA\ex"
global /^\S/ join
" find out first syntax highlighting
let b:various = &highlight.',:Normal,:Cursor,:,'
let b:i = 1
while b:various =~ ':'.substitute(getline(b:i), '\s.*$', ',', '')
let b:i = b:i + 1
if b:i > line("$") | break | endif
endwhile
" insert headlines
call append(0, "Highlighting groups for various occasions")
call append(1, "-----------------------------------------")
if b:i < line("$")-1
let b:synhead = "Syntax highlighting groups"
if exists("hitest_filetypes")
redir @a
let
redir END
let @a = substitute(@a, 'did_\(\w\+\)_syn\w*_inits\s*#1', ', \1', 'g')
let @a = substitute(@a, "\n\\w[^\n]*", '', 'g')
let @a = substitute(@a, "\n", '', 'g')
let @a = substitute(@a, '^,', '', 'g')
if @a != ""
let b:synhead = b:synhead." - filetype"
if @a =~ ','
let b:synhead = b:synhead."s"
endif
let b:synhead = b:synhead.":".@a
endif
endif
call append(b:i+1, "")
call append(b:i+2, b:synhead)
call append(b:i+3, substitute(b:synhead, '.', '-', 'g'))
endif
" remove 'hls' highlighting
nohlsearch
normal 0
" add autocommands to remove temporary file from buffer list
aug highlighttest
au!
au BufUnload Highlight\ test if expand("<afile>") == "Highlight test"
au BufUnload Highlight\ test bdelete! Highlight\ test
au BufUnload Highlight\ test endif
au VimLeavePre * if bufexists("Highlight test")
au VimLeavePre * bdelete! Highlight\ test
au VimLeavePre * endif
aug END
" we don't want to save this temporary file
set nomodified
" the following trick avoids the "Press RETURN ..." prompt
0 append
.
" restore global options and registers
let &hidden = s:hidden
let &lazyredraw = s:lazyredraw
let &more = s:more
let &report = s:report
let &shortmess = s:shortmess
let &wrapscan = s:wrapscan
let @a = s:register_a
" restore last search pattern
call histdel("search", -1)
let @/ = s:register_se
" remove variables
unlet s:hidden s:lazyredraw s:more s:report s:shortmess
unlet s:wrapscan s:register_a s:register_se
" vim: ts=8
|