为什么 Vim 以红色突出显示我所有的 JSON 评论?

Why does Vim highlight all my JSON comments in red?

我在 JSON 文件中得到了一些由 自动生成的评论,不幸的是 vim 似乎无法识别它们只是评论。

它们都是红色的 - 我的哪个插件正在这样做?

我真的不想关闭我所有的语法高亮显示,我也不想每次 运行 进入红色高亮显示时手动清除错误。

" Enable syntax highlighting
syntax enable

" PLUGINS
call plug#begin('~/.vim/plugged')

"   deoplete - code completion
if has('nvim')
"      Add in a syntax file for deoplete typescripe, then add deoplete
    Plug 'HerringtonDarkholme/yats.vim'
    Plug 'mhartington/nvim-typescript', {'do': './install.sh'}
    Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
    Plug 'Shougo/deoplete.nvim'
    Plug 'roxma/nvim-yarp'
    Plug 'roxma/vim-hug-neovim-rpc'
    Plug 'ternjs/tern_for_vim', { 'do': 'npm install' }
endif

"   fzf - fuzzy find
Plug 'junegunn/fzf', { 'dir': '~/.vim/installed/fzf' }

"   lightline - a nice looking bottom bar
Plug 'itchyny/lightline.vim'
"       also get rid of the useless -- INSERT -- since we have a nice bar
set noshowmode

"   nerdtree - a little tree file browser 
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
"       map it to control-O
map <C-o> :NERDTreeToggle<CR>

"   gitgutter - adds some git context to the left side bar
Plug 'airblade/vim-gitgutter'
set updatetime=100

"   ale - asynchronous linting engine, highlights stuff
Plug 'w0rp/ale'

"   deoplete-ternjs - adds javascript to deoplete
Plug 'carlitux/deoplete-ternjs'
"   tern_for_vim - adds in the tern 'engine' or whatever to vim
Plug 'ternjs/tern_for_vim', { 'do': 'npm install && npm install -g tern' }

"   vimproc - async execution for things
Plug 'Shougo/vimproc.vim', { 'do': 'make' }
"   tsuquyomi - unpronouncable client for TSServer for completion and more
Plug 'Quramy/tsuquyomi', { 'do': 'npm install -g typescript' }

call plug#end()

" CONFIGURE - some of our plugins need configurations so add that in

let g:deoplete#enable_at_startup = 1
let g:deoplete#enable_ignore_case = 1
let g:deoplete#enable_smart_case = 1
let g:deoplete#enable_camel_case = 1
let g:deoplete#enable_refresh_always = 1
let g:deoplete#max_abbr_width = 0
let g:deoplete#max_menu_width = 0
let g:deoplete#omni#input_patterns = get(g:,'deoplete#omni#input_patterns',{})

let g:tern_request_timeout = 1
let g:tern_request_timeout = 6000
let g:tern#command = ["tern"]
let g:tern#arguments = ["--persistent"]
let g:deoplete#sources#tss#javascript_support = 1
let g:tsuquyomi_javascript_support = 1
let g:tsuquyomi_auto_open = 1
let g:tsuquyomi_disable_quickfix = 1

如@Michail 所述,JSON 语法 支持注释,因此 Vim 将它们标记为错误。

在寻找与 (Neo)Vim 的 JSON 突出显示有关的其他一些奇怪的事情时,我发现您可以使用 let g:vim_json_warnings=0 禁用此类警告。这并不是一个真正的“解决方案”(正确的解决方案是向 JSON 语法添加注释,即使它是一个可选功能),但它确实删除了到处都是巨大的丑陋红色框。

如评论和接受的答案中所述,JSON 没有评论,但由于它是一个如此常见的扩展,所以至少能够禁用警告是很好的。

这为我修复了它:

autocmd FileType json syntax match Comment +\/\/.\+$+

不知道从哪里弄来的。

编辑:

请注意,要使其正常工作,您必须让 vim 通过 filetype on 处理文件类型检测。把它放在 autocmd ...

上方的某处

我发现有一个评论 json 的插件可以解决这个问题:jsonc。你应该去看看。

要关闭 JSON 注释错误突出显示,请在用户配置文件夹中添加以下文件。

after/syntax/json.vim

syntax clear jsonCommentError
syntax match jsonComment "//.*"
syntax match jsonComment "\(/\*\)\|\(\*/\)"
hi def link jsonComment Comment

要扩展 NERDCommenter 的规则,请将以下内容添加到 vimrc.

let NERDCustomDelimiters = {'json': { 'left': '//', 'right': '' }}
packadd nerdcommenter