Setting syntax highlighting in Vim

How can I keep all current formatting for a file type, but add functionality .

I would like to highlight the colors in the .vim files so that each color is highlighted as the terminal resolves it.

I created a vim.vim file containing:

syn keyword yellow yellow containedin=All highlight yellow ctermfg=yellow syn keyword red red containedin=all highlight red ctermfg=red 

and put it in ~/.vim/after/syntax/vim.vim

As suggested here .

It does not affect.


Update

In fact, I was mistaken when I said that my changes did not affect. If you type yellow yourself on a line, it will be highlighted in yellow. Unfortunately, this does not solve my problem.

I added the F3 functionality described by Al .

When I f3 in yellow (in the context of ctermfg=yellow ), it returns:

 hi<vimHiCtermColor> trans<vimHiCtermColor> lo<vimHiCtermColor> FG:-1 BG:-1 

Then :syn list vimHiCtermColor returns:

 --- Syntax items --- vimHiCtermColor xxx contained lightmagenta darkgray lightgrey darkgrey lightgreen lightgray darkmagenta gray white red grey darkred brown darkblue darkgreen lightblue yellow cyan contained lightcyan lightred black blue green magenta darkcyan darkyellow 

I checked :syn list darkgray (something I haven't defined yet) to see if it exists:

 --- Syntax items --- E28: No such highlight group name: darkgray Hit ENTER or type command to continue 

Where do I go next?

+4
source share
2 answers

Decision

Here is a direct answer for coloring only the yellow word.

 syn cluster vimHiCtermColors contains=vimHiCtermColorYellow syn keyword vimHiCtermColorYellow yellow contained syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimNumber,vimHiCtermColor,@vimHiCtermColors,vimFgBgAttrib,vimHiCtermError highlight vimHiCtermColorYellow ctermfg=yellow 

And here is the solution for coloring all color terminal names. They are colored only in the terminal (and not in the graphical interface), and other attributes (256-color terminal, colors of the graphical user interface, such as bold) are not highlighted at all. To continue this, you probably want some kind of script to iterate over all possible values.

 syn cluster vimHiCtermColors contains=vimHiCtermColorBlack,vimHiCtermColorBlue,vimHiCtermColorBrown,vimHiCtermColorCyan,vimHiCtermColorDarkBlue,vimHiCtermColorDarkcyan,vimHiCtermColorDarkgray,vimHiCtermColorDarkgreen,vimHiCtermColorDarkgrey,vimHiCtermColorDarkmagenta,vimHiCtermColorDarkred,vimHiCtermColorDarkyellow,vimHiCtermColorGray,vimHiCtermColorGreen,vimHiCtermColorGrey,vimHiCtermColorLightblue,vimHiCtermColorLightcyan,vimHiCtermColorLightgray,vimHiCtermColorLightgreen,vimHiCtermColorLightgrey,vimHiCtermColorLightmagenta,vimHiCtermColorLightred,vimHiCtermColorMagenta,vimHiCtermColorRed,vimHiCtermColorWhite,vimHiCtermColorYellow syn keyword vimHiCtermColorBlack black contained syn keyword vimHiCtermColorBlue blue contained syn keyword vimHiCtermColorBrown brown contained syn keyword vimHiCtermColorCyan cyan contained syn keyword vimHiCtermColorDarkBlue darkBlue contained syn keyword vimHiCtermColorDarkcyan darkcyan contained syn keyword vimHiCtermColorDarkgray darkgray contained syn keyword vimHiCtermColorDarkgreen darkgreen contained syn keyword vimHiCtermColorDarkgrey darkgrey contained syn keyword vimHiCtermColorDarkmagenta darkmagenta contained syn keyword vimHiCtermColorDarkred darkred contained syn keyword vimHiCtermColorDarkyellow darkyellow contained syn keyword vimHiCtermColorGray gray contained syn keyword vimHiCtermColorGreen green contained syn keyword vimHiCtermColorGrey grey contained syn keyword vimHiCtermColorLightblue lightblue contained syn keyword vimHiCtermColorLightcyan lightcyan contained syn keyword vimHiCtermColorLightgray lightgray contained syn keyword vimHiCtermColorLightgreen lightgreen contained syn keyword vimHiCtermColorLightgrey lightgrey contained syn keyword vimHiCtermColorLightmagenta lightmagenta contained syn keyword vimHiCtermColorLightred lightred contained syn keyword vimHiCtermColorMagenta magenta contained syn keyword vimHiCtermColorRed red contained syn keyword vimHiCtermColorWhite white contained syn keyword vimHiCtermColorYellow yellow contained syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimNumber,@vimHiCtermColors,vimFgBgAttrib,vimHiCtermError highlight vimHiCtermColorBlack ctermfg=black highlight vimHiCtermColorBlue ctermfg=blue highlight vimHiCtermColorBrown ctermfg=brown highlight vimHiCtermColorCyan ctermfg=cyan highlight vimHiCtermColorDarkBlue ctermfg=darkBlue highlight vimHiCtermColorDarkcyan ctermfg=darkcyan highlight vimHiCtermColorDarkgray ctermfg=darkgray highlight vimHiCtermColorDarkgreen ctermfg=darkgreen highlight vimHiCtermColorDarkgrey ctermfg=darkgrey highlight vimHiCtermColorDarkmagenta ctermfg=darkmagenta highlight vimHiCtermColorDarkred ctermfg=darkred highlight vimHiCtermColorDarkyellow ctermfg=darkyellow highlight vimHiCtermColorGray ctermfg=gray highlight vimHiCtermColorGreen ctermfg=green highlight vimHiCtermColorGrey ctermfg=grey highlight vimHiCtermColorLightblue ctermfg=lightblue highlight vimHiCtermColorLightcyan ctermfg=lightcyan highlight vimHiCtermColorLightgray ctermfg=lightgray highlight vimHiCtermColorLightgreen ctermfg=lightgreen highlight vimHiCtermColorLightgrey ctermfg=lightgrey highlight vimHiCtermColorLightmagenta ctermfg=lightmagenta highlight vimHiCtermColorLightred ctermfg=lightred highlight vimHiCtermColorMagenta ctermfg=magenta highlight vimHiCtermColorRed ctermfg=red highlight vimHiCtermColorWhite ctermfg=white highlight vimHiCtermColorYellow ctermfg=yellow , vimHiCtermColorBrown, vimHiCtermColorCyan, vimHiCtermColorDarkBlue, vimHiCtermColorDarkcyan, vimHiCtermColorDarkgray, vimHiCtermColorDarkgreen, vimHiCtermColorDarkgrey, vimHiCtermColorDarkmagenta, vimHiCtermColorDarkred, vimHiCtermColorDarkyellow, vimHiCtermColorGray, vimHiCtermColorGreen, vimHiCtermColorGrey, vimHiCtermColorLightblue, vimHiCtermColorLightcyan, vimHiCtermColorLightgray, vimHiCtermColorLightgreen, vimHiCtermColorLightgrey, vimHiCtermColorLightmagenta, vimHiCtermColorLightred, vimHiCtermColorMagenta syn cluster vimHiCtermColors contains=vimHiCtermColorBlack,vimHiCtermColorBlue,vimHiCtermColorBrown,vimHiCtermColorCyan,vimHiCtermColorDarkBlue,vimHiCtermColorDarkcyan,vimHiCtermColorDarkgray,vimHiCtermColorDarkgreen,vimHiCtermColorDarkgrey,vimHiCtermColorDarkmagenta,vimHiCtermColorDarkred,vimHiCtermColorDarkyellow,vimHiCtermColorGray,vimHiCtermColorGreen,vimHiCtermColorGrey,vimHiCtermColorLightblue,vimHiCtermColorLightcyan,vimHiCtermColorLightgray,vimHiCtermColorLightgreen,vimHiCtermColorLightgrey,vimHiCtermColorLightmagenta,vimHiCtermColorLightred,vimHiCtermColorMagenta,vimHiCtermColorRed,vimHiCtermColorWhite,vimHiCtermColorYellow syn keyword vimHiCtermColorBlack black contained syn keyword vimHiCtermColorBlue blue contained syn keyword vimHiCtermColorBrown brown contained syn keyword vimHiCtermColorCyan cyan contained syn keyword vimHiCtermColorDarkBlue darkBlue contained syn keyword vimHiCtermColorDarkcyan darkcyan contained syn keyword vimHiCtermColorDarkgray darkgray contained syn keyword vimHiCtermColorDarkgreen darkgreen contained syn keyword vimHiCtermColorDarkgrey darkgrey contained syn keyword vimHiCtermColorDarkmagenta darkmagenta contained syn keyword vimHiCtermColorDarkred darkred contained syn keyword vimHiCtermColorDarkyellow darkyellow contained syn keyword vimHiCtermColorGray gray contained syn keyword vimHiCtermColorGreen green contained syn keyword vimHiCtermColorGrey grey contained syn keyword vimHiCtermColorLightblue lightblue contained syn keyword vimHiCtermColorLightcyan lightcyan contained syn keyword vimHiCtermColorLightgray lightgray contained syn keyword vimHiCtermColorLightgreen lightgreen contained syn keyword vimHiCtermColorLightgrey lightgrey contained syn keyword vimHiCtermColorLightmagenta lightmagenta contained syn keyword vimHiCtermColorLightred lightred contained syn keyword vimHiCtermColorMagenta magenta contained syn keyword vimHiCtermColorRed red contained syn keyword vimHiCtermColorWhite white contained syn keyword vimHiCtermColorYellow yellow contained syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimNumber,@vimHiCtermColors,vimFgBgAttrib,vimHiCtermError highlight vimHiCtermColorBlack ctermfg=black highlight vimHiCtermColorBlue ctermfg=blue highlight vimHiCtermColorBrown ctermfg=brown highlight vimHiCtermColorCyan ctermfg=cyan highlight vimHiCtermColorDarkBlue ctermfg=darkBlue highlight vimHiCtermColorDarkcyan ctermfg=darkcyan highlight vimHiCtermColorDarkgray ctermfg=darkgray highlight vimHiCtermColorDarkgreen ctermfg=darkgreen highlight vimHiCtermColorDarkgrey ctermfg=darkgrey highlight vimHiCtermColorDarkmagenta ctermfg=darkmagenta highlight vimHiCtermColorDarkred ctermfg=darkred highlight vimHiCtermColorDarkyellow ctermfg=darkyellow highlight vimHiCtermColorGray ctermfg=gray highlight vimHiCtermColorGreen ctermfg=green highlight vimHiCtermColorGrey ctermfg=grey highlight vimHiCtermColorLightblue ctermfg=lightblue highlight vimHiCtermColorLightcyan ctermfg=lightcyan highlight vimHiCtermColorLightgray ctermfg=lightgray highlight vimHiCtermColorLightgreen ctermfg=lightgreen highlight vimHiCtermColorLightgrey ctermfg=lightgrey highlight vimHiCtermColorLightmagenta ctermfg=lightmagenta highlight vimHiCtermColorLightred ctermfg=lightred highlight vimHiCtermColorMagenta ctermfg=magenta highlight vimHiCtermColorRed ctermfg=red highlight vimHiCtermColorWhite ctermfg=white highlight vimHiCtermColorYellow ctermfg=yellow 

Description

If you look in /vim.vim colors and do a cterm search, you will see the line

 syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimNumber,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError 

This suggests that when ctermfg= or ctermbg= , highlight the next word as vimNumber , vimHiCtermColor , vimFgBgAttrib or vimHiCtermError . Looking at vimHiCtermColor (a few lines above), we see

 syn keyword vimHiCtermColor contained black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow 

All color terminal names are listed here and highlighted as keywords with the same syntax group. So, instead of selecting them all together, we can select them separately. The four lines of the first decision above describe the steps:

  • Create a new cluster, @vimHiCtermColors , containing each of the groups in step 2.
  • Add a new keyword for each color value.
  • Modify the vimHiCtermFgBg definition to use @vimHiCtermColors instead of vimHiCtermColor .
  • Highlight each keyword as you like.

The reason you tried to work has no double meaning. First, the syntax groups specified in nextgroup are preferable to general groups (in particular, your yellow group). But you can say: "How about containedin=ALL ?" This is the second point. Keywords are separate units and cannot contain anything else. The original vimHiCtermColor group was all keywords, so your containedin=ALL could not override it. If vimHiCtermColor was a match instead of a keyword, it might have worked.

+6
source

I would expect the ~/.vim/after/syntax/vim.vim to work, but if the keyword (yellow) is already highlighted, you might need to change the corresponding element as follows:

 syn keyword yellow yellow containedin=ALL 

Which file do you want to highlight?

Edit

I looked at the java.vim file, and it looks like there are a lot of overlapping syntax groups that can make setting the highlighting quite difficult. Here is what I did if it is helpful.

Useful mapping:

 " What is the current syntax highlighting group? map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#") . " BG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"bg#")<CR> 

Then you can move the cursor over what interests you and press F3 to find out what the current highlight group is. As a test, I opened java.vim in the syntax directory and went to line 52, which defines javaStorageClass. I decided to highlight the word transient on this line (since yellow not in the file anywhere, and I needed something to work).

I moved the cursor to transient and pressed F3 . Wim said:

 hi<vimSynKeyRegion> trans<vimSynKeyRegion> lo<vimSynKeyRegion> FG: BG: 

This is obviously the part of vimSynKeyRegion that could be guessed on behalf of: syn region . I decided to look at this further, so I polled the current selection configuration:

 :redir @a> :silent syn list :redir END :vnew "ap 

This creates a file containing all the syntax information. I searched for vimSynKeyRegion and found this line:

 vimSynKeyRegion xxx matchgroup=vimGroupName start=/\k\+/ skip=/\\\\\|\\|/ matchgroup=vimSep end=/|\|$/ contained oneline keepend contains=@vimSynKeyGroup 

vimSynKeyRegion configured to host items from a syntax cluster named vimSynKeyGroup . Therefore, we can highlight transient by making it a keyword in this group:

 :syn keyword MyNewGroup transient :hi MyNewGroup guifg=#ff00ff :syn cluster vimSynKeyGroup add=MyNewGroup 

Although this may not correspond exactly to what you want to do, I hope this gives you something to work with. You may find that some parts cannot be overridden (if they match keywords or similar), but you can always override the highlight to change the color, for example.

 :hi vimGroupName guifg=#ffff00 

Hope all this helps.

+4
source

Source: https://habr.com/ru/post/1304386/


All Articles